Addign merkleRoot function to Blocks

This commit is contained in:
Chris Stewart 2016-05-27 18:06:46 -05:00
parent d38764745d
commit cd26c70631
3 changed files with 19 additions and 3 deletions

View file

@ -1,5 +1,6 @@
package org.bitcoins.core.protocol.blockchain
import org.bitcoins.core.consensus.Merkle
import org.bitcoins.core.crypto.DoubleSha256Digest
import org.bitcoins.core.protocol.{CompactSizeUInt, NetworkElement}
import org.bitcoins.core.protocol.transaction.Transaction
@ -41,6 +42,12 @@ sealed trait Block extends NetworkElement with BitcoinSLogger {
*/
def hash : DoubleSha256Digest = CryptoUtil.doubleSHA256(bytes)
/**
* Computes the merkle root for this block
* @return the merkle root for the transactions inside of this block
*/
def merkleRoot : DoubleSha256Digest = Merkle.computeBlockMerkleRoot(this)
def hex = RawBlockSerializer.write(this)
}

View file

@ -1,5 +1,6 @@
package org.bitcoins.core.protocol.blockchain
import org.bitcoins.core.consensus.Merkle
import org.bitcoins.core.crypto.DoubleSha256Digest
import org.bitcoins.core.currency.{Bitcoins, CurrencyUnit}
import org.bitcoins.core.protocol.CompactSizeUInt
@ -105,8 +106,7 @@ sealed trait ChainParams {
val output = TransactionOutput(amount,scriptPubKey)
val tx = Transaction(TransactionConstants.version,Seq(input), Seq(output), TransactionConstants.lockTime)
val prevBlockHash = DoubleSha256Digest(BitcoinSUtil.decodeHex("00000000000000"))
//TODO: Replace this with a merkle root hash computed algorithmically
val merkleRootHash = DoubleSha256Digest(BitcoinSUtil.decodeHex("4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"))
val merkleRootHash = Merkle.computeMerkleRoot(Seq(tx))
val genesisBlockHeader = BlockHeader(version,prevBlockHash,merkleRootHash,time,nBits,nonce)
val genesisBlock = Block(genesisBlockHeader,CompactSizeUInt(1,1),Seq(tx))
genesisBlock
@ -119,7 +119,9 @@ sealed trait ChainParams {
*/
object MainNetChainParams extends ChainParams {
override def networkId = "main"
override def genesisBlock = createGenesisBlock(1231006505, 2083236893, 0x1d00ffff, 1, Bitcoins(50))
override def requireStandardTransaction = ???
override def base58Prefixes : Map[Base58Type,Seq[Byte]] =
@ -140,7 +142,9 @@ object MainNetChainParams extends ChainParams {
object TestNetChainParams extends ChainParams {
override def networkId = "test"
override def genesisBlock : Block = ???
override def genesisBlock : Block = createGenesisBlock(1296688602, 414098458, 0x1d00ffff, 1, Bitcoins(50))
override def requireStandardTransaction = ???
override def base58Prefixes : Map[Base58Type,Seq[Byte]] = Map(

View file

@ -53,4 +53,9 @@ class ChainParamsTest extends FlatSpec with MustMatchers {
genesisTransaction.txId.hex must be ("4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b")
}
it must "generate the correctly merkle root for the testnet genesis block" in {
TestNetChainParams.genesisBlock.merkleRoot.hex must be ("4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b")
}
}