Contract 0x73dD069c299A5d691E9836243BcaeC9c8C1D8734

 
Txn Hash
Method
Block
From
To
Value
0x76acc638c3bcb742482b60eea3db6dfb36127838a789814a51e771e7e4416768Approve128066962021-07-11 15:02:18399 days 10 hrs ago0x5af32024b9feab14f697245ec7b91f0c689aa906 IN  Bitcoineum.com: BTE Token0 Ether0.‍0003139612
0xa9253b4260dcb473dcfef45367bdfa6869bce622dc7728a070ab1b6bd7dd20e1Approve123787712021-05-06 4:59:32465 days 20 hrs agoENS Name abovemoon.eth IN  Bitcoineum.com: BTE Token0 Ether0.‍0006374744
0x7a7d051c62ef1447a1d8fcf37f217c1e144cb814ad17ff3af829e13f034fc495Approve123149462021-04-26 8:54:29475 days 16 hrs ago0x1193eabb390705938673726664c8808369ffaa13 IN  Bitcoineum.com: BTE Token0 Ether0.‍0022089147.‍30000023
0x3eb887c029a09d1c6bb68451b79d9757f6b5c1223ccd5f7f634b03d547306a79Approve120764012021-03-20 15:10:30512 days 9 hrs ago0x000d7321f6767c3910bbce248cb9df5c8eb0edf9 IN  Bitcoineum.com: BTE Token0 Ether0.‍00804034177.‍1000016
0x30fc72b656d9ca19690dc653fc276e6bb2cf7f8b1e41a55afd413e0ace6f42d1Approve118955582021-02-20 18:56:48540 days 6 hrs ago0x15c7cc779d93a58b6193bc8081b70624fcc2f27b IN  Bitcoineum.com: BTE Token0 Ether0.‍004994110.‍00000023
0x083b3f6ec0f7e31b4310f23163386f012e970c03c262aea972ee27faa49a2dc7Approve116705572021-01-17 4:28:48574 days 20 hrs agoENS Name 0xdyi.eth IN  Bitcoineum.com: BTE Token0 Ether0.‍0019476642.‍90000023
0xaf83d26a886283ce1152e4d488f2c27240584e12e5ae3c888c053a2cdb7daacbTransfer109130082020-09-22 15:03:57691 days 9 hrs ago0xc4320e6ee508fb0e9da7cb6dd872a1ec5a6894e0 IN  Bitcoineum.com: BTE Token0 Ether0.‍00795895216
0xebd351ca71a6d2820eb507b047585a0fab42b5b2f28efc5fafd461ca21108e7bApprove109067642020-09-21 16:05:15692 days 8 hrs ago0x693602c01ae0bfe7e80d3f470dc710048e7ba713 IN  Bitcoineum.com: BTE Token0 Ether0.‍01287998283.‍7
0x94539b0c9c39ddf73406a1cb334c4f0d14061206406f2c2c3da2395638ca63f0Approve109035412020-09-21 4:16:08692 days 20 hrs ago0x2c4b9083c95f7c33d78b6088979fce9b2c493fe6 IN  Bitcoineum.com: BTE Token0 Ether0.‍004994110
0xb76a792fb81cdf3f7dfdc36bb788f32dc82871c101a30c8431a4dfd19909b16cApprove108997192020-09-20 14:19:18693 days 10 hrs ago0x96b0425c29ab7664d80c4754b681f5907172ec7c IN  Bitcoineum.com: BTE Token0 Ether0.‍00908200
0xf13682410f8ca3fe181615195fe51aca312d548f53714df88c592cfa0b7c5eabApprove108973712020-09-20 5:46:35693 days 19 hrs ago0x714b62104020b67ef4cbb516226f0855f4dd5bc3 IN  Bitcoineum.com: BTE Token0 Ether0.‍0048578107
0xd624d6fd5f5748c78e81e08dab68698c121f03ccec6dff72cedcfb2840203bd9Approve108971292020-09-20 4:48:22693 days 20 hrs ago0x6d468806ec32c33e210ffa6c1dcac68cf54f6159 IN  Bitcoineum.com: BTE Token0 Ether0.‍00484418106.‍70000023
0x8105d23b15df1d2c93b3b0f84e7326216fa87e3e7cb29f8df1d2205b071f14f9Transfer108937342020-09-19 16:20:48694 days 8 hrs ago0xfba13e6dde55d4831d4a4d1e80ce0b4b0077f9d7 IN  Bitcoineum.com: BTE Token0 Ether0.‍0066110.‍00000134
0x9958d8036fdf10f1d3b73c639179e4e627fc6c62242ec62210083f5f809552ebTransfer108935992020-09-19 15:54:26694 days 9 hrs ago0xfba13e6dde55d4831d4a4d1e80ce0b4b0077f9d7 IN  Bitcoineum.com: BTE Token0 Ether0.‍00349168160.‍00000123
0x74e912c533115746ad202f3e4603b8b76b394285db32f80b46c1ceebde2096c2Approve108933622020-09-19 15:01:04694 days 10 hrs agoENS Name richen.eth IN  Bitcoineum.com: BTE Token0 Ether0.‍007491165.‍00000023
0x947504ecb977d9a1f0fffa3432c77c9171d3e99b9cb11dcf6744290f3a594f0cTransfer108933312020-09-19 14:55:38694 days 10 hrs ago0xee221b8986f21c76423160983033a47b83ff3f5b IN  Bitcoineum.com: BTE Token0 Ether0.‍00360079165
0xd701aa471c119b888ed8118fcbacc2eee2bb67e1e1bd72662d609e163b7ab031Approve108932812020-09-19 14:42:19694 days 10 hrs ago0x6df6c11098cad413cb8b0ad8b12738bdf14a43c8 IN  Bitcoineum.com: BTE Token0 Ether0.‍00681150
0x25c803282ab9cda8a8dc2dff9caacaedcba88fca76b50107af9e2d59865878b5Approve108930172020-09-19 13:44:54694 days 11 hrs agoENS Name phunk87.eth IN  Bitcoineum.com: BTE Token0 Ether0.‍0060382133
0x4fcfe9420ac2d13c0efb813ef4740bb190eb0d95a48d50eee11acbf64ea47fc4Approve108927632020-09-19 12:48:15694 days 12 hrs ago0xd8f7c3f46becb870327ca82b3f89bb6423623112 IN  Bitcoineum.com: BTE Token0 Ether0.‍005902130
0x6ce5eaebbd19a7d3c97c8d65d7ffcfbd5318201020b80115743cda78cece50b4Approve108925232020-09-19 11:55:57694 days 13 hrs ago0xe616314aa0f4165b3097de2ca15d0d568e8d7a49 IN  Bitcoineum.com: BTE Token0 Ether0.‍0059928132.‍00000023
0xe610f18ba310e3d3fdb2373658e3b936a8ffa07a3d28683e1d910452a03f56a7Approve108918942020-09-19 9:39:45694 days 15 hrs ago0xc2febf0e69436e3c91390f42fcab0f38786df6e8 IN  Bitcoineum.com: BTE Token0 Ether0.‍00559328123.‍20000023
0x853b85cf6183bf877d52ec95504b9db6b4238f2cefc2c4143ea45f6889e6360dTransfer108918642020-09-19 9:32:31694 days 15 hrs ago0x53107e0cf5bb0bbcd5139bbde4fa75f1e8f61f25 IN  Bitcoineum.com: BTE Token0 Ether0.‍00331637151.‍8
0x4704869c8b11b065ace362ed7f1bef552370c0d6b0de084b2c7ffd67ae69a5eaTransfer108916602020-09-19 8:49:22694 days 16 hrs ago0x062011983059e4275ad09ca7872b4fcd806c0f4a IN  Bitcoineum.com: BTE Token0 Ether0.‍00462647125.‍6
0x462c191e22af110f55c8abc301d1e44a3641383c98bfece0a9816210b1189aafTransfer108860752020-09-18 12:10:41695 days 12 hrs ago0xa3a5cf9824f78c194faee172e264fb3b1923e05c IN  Bitcoineum.com: BTE Token0 Ether0.‍0067408183.‍00000134
0x563913fff945b69becf72d7dc66f8d2c26d9f2cbfb07c77b35a3725fb37a6599Transfer108854212020-09-18 9:49:25695 days 15 hrs ago0x560c2b75c7b4e077c71d66ae4e18b688d099963f IN  Bitcoineum.com: BTE Token0 Ether0.‍00480106220
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x6dda4d42573cfaa3b16c272ba31789db2e57e50acba952e71e16eb0f61aef7fb46738312017-12-04 11:04:441714 days 13 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0x289e13dfdd9d1ebb1e3be2c14eab9bb1e541eddac4a411e599d563d2142ab53e46737712017-12-04 10:48:281714 days 14 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0xfe103c6d0e73113ac361d710939d8d4580b14e34c40fc1fdb87bb20bb8729f6346736732017-12-04 10:21:301714 days 14 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0xbb2442f41564c9d71ea2ef6f90930275b1dbd1b3aff749527b4f3a11ca1e244546733932017-12-04 9:16:091714 days 15 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍043 Ether
0xdb998f7d8c4ab9060d8d59b26ec3c3ae07acc7d9b2a9af9c18565fea8de5bca446732022017-12-04 8:28:211714 days 16 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0x9e9cb31335835a61313d928be567cff4869558a3dc30d63d2f1576a0102bc28846731162017-12-04 8:06:021714 days 16 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0x0074ee54c42a3572154decdb2b8bcf575f1d0e153e605f36213270bd85448e7046730072017-12-04 7:41:571714 days 17 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0x3f00487b566ef3a8654e45d9b60a67762c75424e94188ea472dcb36b7fa5884846728912017-12-04 7:10:201714 days 17 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0x6dd0c95a1714f6595ba7e4b8d5e83f33289bb1887b8f771989a6200d51d28b7046728372017-12-04 7:00:271714 days 18 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0xf21040bed1d60ec3420460cd8c34579a467507e63a3173cb35c23248ee9b940846727612017-12-04 6:43:191714 days 18 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0xf597d2f3675fe60ececd0181a688f275c0b710172cc378a5c5539893c799ee6246694762017-12-03 17:17:591715 days 7 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0x39360a8c1f9315ec7b04ca225f24d51e3868534c202d735fad16578101afb7ee46694272017-12-03 17:04:471715 days 7 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0xe478d6cb3cb8c5351f2191fc1796ec5fca25061a8bcaf92425b30eba3071d6ad46693802017-12-03 16:54:001715 days 8 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0xa689b8539ffcc07ffa9c722a49ce2c86bd87b533d2a3e44d0e5b5e5556ef5cd346693312017-12-03 16:44:291715 days 8 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0x5c3600d88515372c09f2eef8fc68a9ce1912dc87dff3dca8c4b3db40d040611d46692862017-12-03 16:33:101715 days 8 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0x3cacff24f5513249fc32e4a3bf059ce86b0eb48cd19169d593aefc915fe7ed4446692382017-12-03 16:23:311715 days 8 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0x51502dff0b24bc0471005b9604ce7499e0c5d0b4167755b6b4b1dab424f4953f46691502017-12-03 16:03:151715 days 8 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0x0e42f7ce7dd5e75cc15251425d7ed63518945c7558c2f8c28adbac6be6f1baa046690942017-12-03 15:51:231715 days 9 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0x29afcdb8f6f0ca5f536b023e4234f204f060fbf0b9bee97b9a08211997db1bb846690462017-12-03 15:37:571715 days 9 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0x329e2763d33998b7f648bd7d837b17ad1896d3713a97887853d808a65f76e67046689952017-12-03 15:28:131715 days 9 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0x29e6cd4299581cc48a44c9f53a1229d16be7bf8e205219f1feff381156e2cb3946689472017-12-03 15:14:411715 days 9 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0x84f02a0de30c1ce75aa680070d80475aebac07f9ab9eda3ad99b9cce84ecb09d46688942017-12-03 15:02:481715 days 10 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0x1301df8ed5564bdc6f8d884dc2f15fce8c7444642592ad362ff0926a4b606bde46688492017-12-03 14:52:171715 days 10 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0x1e7af53486229e6af369ca726d0af9502b9e8bd698793c7d71b9a8ef1338faf046687962017-12-03 14:40:231715 days 10 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
0xd0ce670ae86aa6643313b8f36fe955c686ea62b25b2236b70dbcec648fb1d0b246687462017-12-03 14:26:101715 days 10 hrs ago Bitcoineum.com: BTE Token0xdeaddeaddeaddeaddeaddeaddeaddeaddeaddead0.‍0432 Ether
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

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

Contract ABI

[{"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"}]

60606040526003805460ff19169055341561001957600080fd5b5b6000808055660775f05a074000600455655af3107a4000600581905560065560326007556107e060085562033450600b55600a556702cc3a21c2b80000600d55600e8054600160a060020a03191673deaddeaddeaddeaddeaddeaddeaddeaddeaddead179055436009555b5b61211f806100956000396000f300606060405236156102405763ffffffff60e060020a600035041663014c3dbc81146102455780630480e58b1461026a57806306fdde031461028f578063095ea7b31461031a5780630f59a6381461033e57806312a00b211461036357806318160ddd1461038b5780631c9ab3ad146103b05780631f6a1bf71461041857806322b2f1781461043d57806323b872dd146104625780632b000f001461048c5780632ff2e9dc146104bd578063313ce567146104e257806332cb6b0c14610507578063333cfa141461052c57806334805e7c1461055957806350c8dbd214610581578063555aaff6146105a65780635f623e15146105d7578063608d031a146105fc5780636eadeba0146106235780636f4ebb701461064b57806370a082311461068257806370d5ae05146106b35780637e21c28b146106e25780637f4e48491461074a578063808cf58e146107c857806388537daf146107ed57806390c469851461082357806395d89b411461085157806399f4b251146108dc5780639a2457c1146108f85780639d8abff314610940578063a6ad57e614610988578063a9059cbb146109ad578063aee1d4d3146109d1578063b0c2a163146109f6578063baa3fc4814610a1b578063c3de7cbf14610a49578063c52e40d014610a76578063c539607c14610a9b578063dd62ed3e14610ac0578063dda6c3ce14610af7578063ddd5e1b214610b21578063f01551f614610b57578063f52ae24b14610b7c578063fa90693b14610bb8578063fab425e714610be2578063ff62d2cf14610c0a575b600080fd5b341561025057600080fd5b610258610c2f565b60405190815260200160405180910390f35b341561027557600080fd5b610258610c34565b60405190815260200160405180910390f35b341561029a57600080fd5b6102a2610c3a565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102df5780820151818401525b6020016102c6565b50505050905090810190601f16801561030c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561032557600080fd5b61033c600160a060020a0360043516602435610c61565b005b341561034957600080fd5b610258610cfd565b60405190815260200160405180910390f35b341561036e57600080fd5b610258600435610d03565b60405190815260200160405180910390f35b341561039657600080fd5b610258610d78565b60405190815260200160405180910390f35b34156103bb57600080fd5b6103c6600435610d7e565b604051978852602088019690965260408088019590955260608701939093526080860191909152151560a0850152600160a060020a031660c084015290151560e0830152610100909101905180910390f35b341561042357600080fd5b610258610e54565b60405190815260200160405180910390f35b341561044857600080fd5b610258610e5a565b60405190815260200160405180910390f35b341561046d57600080fd5b61033c600160a060020a0360043581169060243516604435610e60565b005b341561049757600080fd5b610258600435602435604435606435610f5a565b60405190815260200160405180910390f35b34156104c857600080fd5b610258610fb0565b60405190815260200160405180910390f35b34156104ed57600080fd5b610258610fb5565b60405190815260200160405180910390f35b341561051257600080fd5b610258610fba565b60405190815260200160405180910390f35b341561053757600080fd5b610545600435602435610fc5565b604051901515815260200160405180910390f35b341561056457600080fd5b610258600435610fdc565b60405190815260200160405180910390f35b341561058c57600080fd5b610258610fea565b60405190815260200160405180910390f35b34156105b157600080fd5b6105bf600435602435610ff0565b60405191825260208201526040908101905180910390f35b34156105e257600080fd5b610258611012565b60405190815260200160405180910390f35b341561060757600080fd5b610545611019565b604051901515815260200160405180910390f35b341561062e57600080fd5b610258600435611024565b60405190815260200160405180910390f35b341561065657600080fd5b610258600435600160a060020a036024351660443561102c565b60405190815260200160405180910390f35b341561068d57600080fd5b610258600160a060020a036004351661107e565b60405190815260200160405180910390f35b34156106be57600080fd5b6106c661109d565b604051600160a060020a03909116815260200160405180910390f35b34156106ed57600080fd5b6103c66004356110ac565b604051978852602088019690965260408088019590955260608701939093526080860191909152151560a0850152600160a060020a031660c084015290151560e0830152610100909101905180910390f35b341561075557600080fd5b61075d6110ff565b6040519c8d5260208d019b909b526040808d019a909a5260608c019890985260808b019690965260a08a019490945260c089019290925260e08801526101008701526101208601526101408501526101608401526101808301919091526101a0909101905180910390f35b34156107d357600080fd5b610258611274565b60405190815260200160405180910390f35b34156107f857600080fd5b610545600435600160a060020a0360243516611279565b604051901515815260200160405180910390f35b341561082e57600080fd5b6102586004356024356044356112a9565b60405190815260200160405180910390f35b341561085c57600080fd5b6102a2611303565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102df5780820151818401525b6020016102c6565b50505050905090810190601f16801561030c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610545611323565b604051901515815260200160405180910390f35b341561090357600080fd5b61091a600435600160a060020a036024351661169c565b604051928352602083019190915215156040808301919091526060909101905180910390f35b341561094b57600080fd5b61091a600435600160a060020a036024351661171d565b604051928352602083019190915215156040808301919091526060909101905180910390f35b341561099357600080fd5b61025861174c565b60405190815260200160405180910390f35b34156109b857600080fd5b61033c600160a060020a0360043516602435611751565b005b34156109dc57600080fd5b6102586117fa565b60405190815260200160405180910390f35b3415610a0157600080fd5b610258611800565b60405190815260200160405180910390f35b3415610a2657600080fd5b610258600435602435604435611806565b60405190815260200160405180910390f35b3415610a5457600080fd5b61054560043560243561186a565b604051901515815260200160405180910390f35b3415610a8157600080fd5b610258611895565b60405190815260200160405180910390f35b3415610aa657600080fd5b61025861189b565b60405190815260200160405180910390f35b3415610acb57600080fd5b610258600160a060020a03600435811690602435166118b3565b60405190815260200160405180910390f35b3415610b0257600080fd5b6105456004356118e0565b604051901515815260200160405180910390f35b3415610b2c57600080fd5b610545600435600160a060020a0360243516611a87565b604051901515815260200160405180910390f35b3415610b6257600080fd5b610258611d5c565b60405190815260200160405180910390f35b3415610b8757600080fd5b610b9e600160a060020a0360043516602435611d62565b604051911515825260208201526040908101905180910390f35b3415610bc357600080fd5b610545600435611f2e565b604051901515815260200160405180910390f35b3415610bed57600080fd5b610258600435611f79565b60405190815260200160405180910390f35b3415610c1557600080fd5b610258611f91565b60405190815260200160405180910390f35b435b90565b60045481565b60408051908101604052600a815260b060020a69426974636f696e65756d02602082015281565b8015610c9757600160a060020a0333811660009081526002602090815260408083209386168352929052205415610c9757600080fd5b5b600160a060020a03338116600081815260026020908152604080832094871680845294909152908190208490557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259084905190815260200160405180910390a35b5050565b600c5481565b60008080808062033450861015610d1f57620334509350610d23565b8593505b6402540be40092506001915062033450845b049050600062033450855b061115610d4b576001015b600191505b80821015610d6b576002835b0492505b600190910190610d50565b8294505b50505050919050565b60005481565b600080600080600080600080610d92612060565b60008a8152600f60205260409081902090610100905190810160409081528254825260018301546020830152600283015490820152600382015460608201526004820154608082015260059091015460ff808216151560a0840152600160a060020a0361010083041660c084015260a860020a90910416151560e08201529050805181602001518260400151836060015184608001518560a001518660c001518760e00151985098509850985098509850985098505b50919395975091939597565b60095481565b60065481565b600160a060020a038084166000908152600260209081526040808320338516845282528083205493861683526001909152902054610ea4908363ffffffff611f9716565b600160a060020a038085166000908152600160205260408082209390935590861681522054610ed9908363ffffffff611fb116565b600160a060020a038516600090815260016020526040902055610f02818363ffffffff611fb116565b600160a060020a03808616600081815260026020908152604080832033861684529091529081902093909355908516916000805160206120d48339815191529085905190815260200160405180910390a35b50505050565b60008060008386811515610f6a57fe5b0491505084830281871015610f8157819550610f95565b80871115610f9157809550610f95565b8695505b5b84861015610fa2578495505b8592505b5050949350505050565b600081565b600881565b660775f05a07400081565b6000610fd083610fdc565b82101590505b92915050565b60075460018201025b919050565b600a5481565b6000808383018390101561100357600080fd5b508190508281015b9250929050565b6298968081565b600454600054105b90565b80405b919050565b600061107461103a85610d03565b6000848152601060209081526040808320600160a060020a0389168452825280832060010154878452600f90925290912060020154611806565b90505b9392505050565b600160a060020a0381166000908152600160205260409020545b919050565b600e54600160a060020a031681565b600f60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909160ff80821691600160a060020a036101008204169160a860020a9091041688565b600080600080600080600080600080600080600061111b612060565b600061112d611128610c2f565b611f79565b6000818152600f602052604090206005015490915060a860020a900460ff16151561119c5761010060405190810160409081526005548252602082018390526000908201819052606082018190526080820181905260a0820181905260c0820152600160e0820152915061121d565b6000818152600f60205260409081902090610100905190810160409081528254825260018301546020830152600283015490820152600382015460608201526004820154608082015260059091015460ff808216151560a0840152600160a060020a0361010083041660c084015260a860020a90910416151560e082015291505b60055460065482600754600854600b54600954600a54600c54600d548b600001518c604001518d608001519e509e509e509e509e509e509e509e509e509e509e509e509e505b5050909192939495969798999a9b9c565b606481565b6000828152601060209081526040808320600160a060020a038516845290915290206002015460ff165b92915050565b6000808080868611156112be578592506112c2565b8692505b826298968086028115156112d257fe5b04915060001990506298968082106112ec578093506112f8565b62989680815b04820293505b5b5050509392505050565b604080519081016040526003815260e860020a6242544502602082015281565b600354600090819060ff161561133857600080fd5b6003805460ff1916600117905560055460009062989680905b049050348190101561136257600080fd5b69d3c21bcecceda100000034111561137957600080fd5b611381611019565b151561138c57600080fd5b61139c611128610c2f565b611f79565b6113a4610c2f565b8114156113b057600080fd5b6000818152600f602052604090206005015460a860020a900460ff1615156114c3576113da611fc8565b6101006040519081016040908152600554825260208083018490526000828401819052606084018190526080840181905260a0840181905260c08401819052600160e0850152848152600f90915220815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a082015160058201805460ff191691151591909117905560c08201518160050160016101000a815481600160a060020a030219169083600160a060020a0316021790555060e08201516005909101805491151560a860020a0260a860020a60ff0219909216919091179055505b6114d3611128610c2f565b611f79565b6114db610c2f565b8114156114e757600080fd5b6000818152600f602052604090206005015460a860020a900460ff16151561150e57600080fd5b6000818152600f602052604090206005015460ff161561152d57600080fd5b61153d611128610c2f565b611f79565b33611546610c2f565b82141561155257600080fd5b61155c8282611279565b1561156657600080fd5b611576611128610c2f565b611f79565b9550606060405190810160409081526000888152600f6020908152828220600401548452348185015260018385015289825260108152828220600160a060020a0333168352905220815181556020820151816001015560408201516002918201805460ff19169115159190911790556000888152600f60205260409081902060038101805460010190559182018054349081018255600c80548201905560048401805482019055905492548a945033600160a060020a0316937f79974ce89535ebe44946f7f7d2814356530f301d744391e2da3cb544e8415bac939091905180848152602001838152602001828152602001935050505060405180910390a361167e34612022565b600196505b5b50505b505b505b5b506003805460ff191690555b5090565b6000828152601060209081526040808320600160a060020a03851684529091528120600201548190819060ff161561170b575050506000828152601060209081526040808320600160a060020a038516845290915290208054600182015460029092015490919060ff16611715565b5060009150819050805b5b9250925092565b601060209081526000928352604080842090915290825290208054600182015460029092015490919060ff1683565b600481565b600160a060020a03331660009081526001602052604090205461177a908263ffffffff611fb116565b600160a060020a0333811660009081526001602052604080822093909355908416815220546117af908263ffffffff611f9716565b600160a060020a0380841660008181526001602052604090819020939093559133909116906000805160206120d48339815191529084905190815260200160405180910390a35b5050565b60075481565b60055481565b6000808284111561181657600080fd5b6000841161182357600080fd5b6000831161183057600080fd5b8262989680850281151561184057fe5b04905062989680811061185557849150611861565b62989680855b04810291505b5b509392505050565b60008061187684610fdc565b905080831015801561188b5750806101000183105b91505b5092915050565b600d5481565b60006118ad611128610c2f565b611f79565b90505b90565b600160a060020a038083166000908152600260209081526040808320938516835292905220545b92915050565b60006118ea612060565b60006118f46120b3565b6000806000806119048933611279565b801561191c575061191c89611917610c2f565b610fc5565b5b15611a75576000898152600f602052604090819020906101009051908101604090815282548252600183015460208301908152600284015491830191909152600383015460608301526004830154608083015260059092015460ff808216151560a0840152600160a060020a0361010083041660c084015260a860020a90910416151560e082015297506119b19051610fdc565b60008a8152601060209081526040808320600160a060020a033316845290915290819020919750606090519081016040908152825482526001830154602083015260029092015460ff161515918101919091529450611a1a8751886040015187602001516112a9565b9350611a3684611a3189518a6040015189516112a9565b610ff0565b9093509150611a4486611024565b60405190815260200160405190819003902090508083108015611a675750808210155b15611a755760019750611a7b565b5b600097505b50505050505050919050565b600354600090819060ff1615611a9c57600080fd5b6003805460ff1916600117905583611ab2610c2f565b811415611abe57600080fd5b6000818152600f602052604090206005015460a860020a900460ff161515611ae557600080fd5b6000818152600f602052604090206005015460ff1615611b0457600080fd5b84611b0d610c2f565b811415611b1957600080fd5b611b2a81611917610c2f565b610fc5565b1515611b3557600080fd5b611b4681611b41610c2f565b61186a565b1515611b5157600080fd5b85611b5a612060565b6000828152600f602052604080822090610100905190810160409081528254825260018301546020830152600283015490820152600382015460608201526004820154608082015260059091015460ff808216151560a0840152600160a060020a0361010083041660c084015260a860020a90910416151560e08201529150611be283610fdc565b9050611bed81611024565b1515611bf857600080fd5b8833611c048282611279565b1515611c0f57600080fd5b8a611c19816118e0565b1515611c2457600080fd5b60008c8152600f602052604090206005018054600160a060020a03339081166101000261010060a860020a031960ff1990931660019081179390931617909255600a805490910190819055611c79918e61102c565b600160a060020a038c16600090815260016020526040902054909950611ca5908a63ffffffff611f9716565b600160a060020a03808d166000818152600160205260408082209490945580548d0190558e9290913316907f02d996374be8c81683a2ac4abd51bbf94eaa161436677d4195541f2ef4cb63b8908d905190815260200160405180910390a48a600160a060020a031630600160a060020a03166000805160206120d48339815191528b60405190815260200160405180910390a3600199505b5b505b50505b5050505b505b506003805460ff191690555b5092915050565b60085481565b600354600090819081908190819060ff1615611d7d57600080fd5b6003805460ff1916600117905560008611611d9757600080fd5b600160a060020a03331660009081526001602052604090205486901015611dbd57600080fd5b60005486901015611dcd57600080fd5b600160a060020a033316600090815260016020526040902054611df6908763ffffffff611fb116565b600160a060020a03331660009081526001602052604081209190915554611e23908763ffffffff611fb116565b60009081558793509150819050600160a060020a03831663e24a504287836040516040015260405160e060020a63ffffffff841602815260048101919091526024016040805180830381600087803b1515611e7d57600080fd5b6102c65a03f11515611e8e57600080fd5b505050604051805190602001805191935090915050811515611eaf57600080fd5b33600160a060020a03167f11933e4bf668f8fb8314a699158eba5c7836ff5ece3f1bc3056c6c34ccc56e4a30898985604051600160a060020a0394851681529290931660208301526040808301919091526060820192909252608001905180910390a28181945094505b6003805460ff191690555b5050509250929050565b6000818152600f602052604081206005015460a860020a900460ff161515611f5857506000610fe5565b506000818152600f602052604090206005015460ff16610fe5565b5b919050565b600060075482811515611f8857fe5b0490505b919050565b600b5481565b600082820183811015611fa657fe5b8091505b5092915050565b600082821115611fbd57fe5b508082035b92915050565b60075460085402600954611fda610c2f565b03111561201f57611ff8600c54600d54600854600654026004610f5a565b600d8190556008549081151561200a57fe5b046005556000600c5561201b610c2f565b6009555b5b565b600e54600090600160a060020a031682156108fc0283604051600060405180830381858888f193505050509050801515610cf957600080fd5b5b5050565b6101006040519081016040528060008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000600160a060020a031681526020016000151581525090565b6060604051908101604090815260008083526020830181905290820152905600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582023a5ec9c898790009860a99e7c78ae01613b6e446e79605bfbb8d51649f2cb4e0029

Swarm Source

bzzr://23a5ec9c898790009860a99e7c78ae01613b6e446e79605bfbb8d51649f2cb4e
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.