Merge pull request #34 from nicksavers/master

Properties, gitignore & document blockchain-class
This commit is contained in:
romanman 2014-06-22 09:19:46 +01:00
commit 0f3b7558f5
3 changed files with 30 additions and 21 deletions

2
.gitignore vendored
View File

@ -9,7 +9,7 @@
.project
.classpath
.settings
bin
/bin
# Package Files #
*.zip

View File

@ -15,17 +15,33 @@ import java.util.*;
import static org.ethereum.core.Denomination.*;
/*
*
* www.ethereumJ.com
* @author: Nick Savers
* Created on: 20/05/2014 10:44
*
/**
* The Ethereum blockchain is in many ways similar to the Bitcoin blockchain,
* although it does have some differences.
*
* The main difference between Ethereum and Bitcoin with regard to the blockchain architecture
* is that, unlike Bitcoin, Ethereum blocks contain a copy of both the transaction list
* and the most recent state. Aside from that, two other values, the block number and
* the difficulty, are also stored in the block.
*
* The block validation algorithm in Ethereum is as follows:
* <ol>
* <li>Check if the previous block referenced exists and is valid.</li>
* <li>Check that the timestamp of the block is greater than that of the referenced previous block and less than 15 minutes into the future</li>
* <li>Check that the block number, difficulty, transaction root, uncle root and gas limit (various low-level Ethereum-specific concepts) are valid.</li>
* <li>Check that the proof of work on the block is valid.</li>
* <li>Let S[0] be the STATE_ROOT of the previous block.</li>
* <li>Let TX be the block's transaction list, with n transactions.
* For all in in 0...n-1, set S[i+1] = APPLY(S[i],TX[i]).
* If any applications returns an error, or if the total gas consumed in the block
* up until this point exceeds the GASLIMIT, return an error.</li>
* <li>Let S_FINAL be S[n], but adding the block reward paid to the miner.</li>
* <li>Check if S_FINAL is the same as the STATE_ROOT. If it is, the block is valid; otherwise, it is not valid.</li>
* </ol>
* See <a href="https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-White-Paper#blockchain-and-mining">Ethereum Whitepaper</a>
*/
public class Blockchain {
private static final long serialVersionUID = -143590724563460486L;
private static Logger logger = LoggerFactory.getLogger("blockchain");
// to avoid using minGasPrice=0 from Genesis for the wallet
@ -113,7 +129,7 @@ public class Blockchain {
setLastBlock(block);
index.put(block.getNumber(), block.getParentHash());
} else {
logger.warn("Invalid block with nr: " + block.getNumber());
logger.warn("Invalid block with nr: {}", block.getNumber());
}
}
@ -130,7 +146,7 @@ public class Blockchain {
*/
public WalletTransaction addWalletTransaction(Transaction transaction) {
String hash = Hex.toHexString(transaction.getHash());
logger.info("pending transaction placed hash: {} ", hash );
logger.info("pending transaction placed hash: {}", hash );
WalletTransaction walletTransaction = this.walletTransactions.get(hash);
if (walletTransaction != null)
@ -144,7 +160,7 @@ public class Blockchain {
public void removeWalletTransaction(Transaction transaction){
String hash = Hex.toHexString(transaction.getHash());
logger.info("pending transaction removed with hash: {} ", hash );
logger.info("pending transaction removed with hash: {} ", hash);
walletTransactions.remove(hash);
}
@ -162,7 +178,7 @@ public class Blockchain {
logger.info("DB is empty - adding Genesis");
this.lastBlock = Genesis.getInstance();
this.addBlock(lastBlock);
logger.debug("Block #" + Genesis.NUMBER + " -> " + lastBlock.toFlatString());
logger.debug("Block #{} -> {}", Genesis.NUMBER, lastBlock.toFlatString());
db.put(ByteUtil.longToBytes(Genesis.NUMBER), lastBlock.getEncoded());
}
@ -172,7 +188,7 @@ public class Blockchain {
this.lastBlock = new Block(db.get(ByteUtil.longToBytes(blockNr)));
// in case of cold load play the contracts
WorldManager.instance.applyBlock(lastBlock);
logger.debug("Block #" + lastBlock.getNumber() + " -> " + lastBlock.toFlatString());
logger.debug("Block #{} -> {}", lastBlock.getNumber(), lastBlock.toFlatString());
this.addBlock(lastBlock);
blockNr = lastBlock.getNumber()+1;
}

View File

@ -7,7 +7,6 @@ server.acceptConnections = false
# Peer Server Zero: peer discovery
peer.discovery.ip = 54.72.69.180
peer.discovery.port = 30303
# Peer Server One: peer discovery
#peer.discovery.ip = 54.204.10.41
@ -23,11 +22,6 @@ peer.discovery.port = 30303
# Some dude in Canada
#peer.active.ip = 131.104.247.135
#peer.active.port = 30303
# Nick
#peer.active.ip = 82.217.72.169
#peer.active.port = 30303
# RomanJ general
peer.active.ip = 54.211.14.10
@ -83,7 +77,6 @@ samples.dir = samples
# downloaded from peers again
database.reset = true
# this string is computed
# to be eventually the address
# that get the miner reward