Reward correctly when there are uncles

This commit is contained in:
nicksavers 2014-08-24 14:27:07 +02:00
parent 446f613cf6
commit 2b74aca6a9
2 changed files with 29 additions and 11 deletions

View File

@ -38,7 +38,7 @@ public class Block {
private static long MIN_GAS_LIMIT = 125000L; private static long MIN_GAS_LIMIT = 125000L;
public static BigInteger BLOCK_REWARD = BigInteger.valueOf(1500000000000000000L); public static BigInteger BLOCK_REWARD = BigInteger.valueOf(1500000000000000000L);
public static BigInteger UNCLE_REWARD = BLOCK_REWARD.multiply( public static BigInteger UNCLE_REWARD = BLOCK_REWARD.multiply(
BigInteger.valueOf(7)).divide(BigInteger.valueOf(8)); BigInteger.valueOf(3)).divide(BigInteger.valueOf(4));
private BlockHeader header; private BlockHeader header;

View File

@ -112,8 +112,8 @@ public class Blockchain {
if (block == null) if (block == null)
return; return;
if (block.getNumber() == 3211) if (block.getNumber() == 12301)
logger.debug("Block #3211"); logger.debug("Block #12301");
// if it is the first block to add // if it is the first block to add
// make sure the parent is genesis // make sure the parent is genesis
@ -176,17 +176,35 @@ public class Blockchain {
repository.dumpState(block, totalGasUsed, i++, txr.getTransaction().getHash()); repository.dumpState(block, totalGasUsed, i++, txr.getTransaction().getHash());
} }
// miner reward this.addReward(block);
if(block.getNumber() >= CONFIG.traceStartBlock())
repository.dumpState(block, totalGasUsed, 0, null);
}
/**
*
* @param block
*/
private void addReward(Block block) {
// Create coinbase if doesn't exist yet
if (repository.getAccountState(block.getCoinbase()) == null) if (repository.getAccountState(block.getCoinbase()) == null)
repository.createAccount(block.getCoinbase()); repository.createAccount(block.getCoinbase());
// Add standard block reward
repository.addBalance(block.getCoinbase(), Block.BLOCK_REWARD); repository.addBalance(block.getCoinbase(), Block.BLOCK_REWARD);
// Add extra rewards based on number of uncles
if(block.getUncleList().size() > 0) {
BigInteger partialReward = Block.BLOCK_REWARD
.multiply(BigInteger.valueOf(1 * block.getUncleList().size()))
.divide(BigInteger.valueOf(8));
repository.addBalance(block.getCoinbase(), partialReward);
for (BlockHeader uncle : block.getUncleList()) { for (BlockHeader uncle : block.getUncleList()) {
repository.addBalance(uncle.getCoinbase(), Block.UNCLE_REWARD); repository.addBalance(uncle.getCoinbase(), Block.UNCLE_REWARD);
} }
}
if(block.getNumber() >= CONFIG.traceStartBlock())
repository.dumpState(block, totalGasUsed, 0, null);
} }
public void storeBlock(Block block) { public void storeBlock(Block block) {