mirror of
https://github.com/bitcoin-s/bitcoin-s.git
synced 2025-02-25 07:17:32 +01:00
Addign merkleRoot function to Blocks
This commit is contained in:
parent
d38764745d
commit
cd26c70631
3 changed files with 19 additions and 3 deletions
|
@ -1,5 +1,6 @@
|
||||||
package org.bitcoins.core.protocol.blockchain
|
package org.bitcoins.core.protocol.blockchain
|
||||||
|
|
||||||
|
import org.bitcoins.core.consensus.Merkle
|
||||||
import org.bitcoins.core.crypto.DoubleSha256Digest
|
import org.bitcoins.core.crypto.DoubleSha256Digest
|
||||||
import org.bitcoins.core.protocol.{CompactSizeUInt, NetworkElement}
|
import org.bitcoins.core.protocol.{CompactSizeUInt, NetworkElement}
|
||||||
import org.bitcoins.core.protocol.transaction.Transaction
|
import org.bitcoins.core.protocol.transaction.Transaction
|
||||||
|
@ -41,6 +42,12 @@ sealed trait Block extends NetworkElement with BitcoinSLogger {
|
||||||
*/
|
*/
|
||||||
def hash : DoubleSha256Digest = CryptoUtil.doubleSHA256(bytes)
|
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)
|
def hex = RawBlockSerializer.write(this)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package org.bitcoins.core.protocol.blockchain
|
package org.bitcoins.core.protocol.blockchain
|
||||||
|
|
||||||
|
import org.bitcoins.core.consensus.Merkle
|
||||||
import org.bitcoins.core.crypto.DoubleSha256Digest
|
import org.bitcoins.core.crypto.DoubleSha256Digest
|
||||||
import org.bitcoins.core.currency.{Bitcoins, CurrencyUnit}
|
import org.bitcoins.core.currency.{Bitcoins, CurrencyUnit}
|
||||||
import org.bitcoins.core.protocol.CompactSizeUInt
|
import org.bitcoins.core.protocol.CompactSizeUInt
|
||||||
|
@ -105,8 +106,7 @@ sealed trait ChainParams {
|
||||||
val output = TransactionOutput(amount,scriptPubKey)
|
val output = TransactionOutput(amount,scriptPubKey)
|
||||||
val tx = Transaction(TransactionConstants.version,Seq(input), Seq(output), TransactionConstants.lockTime)
|
val tx = Transaction(TransactionConstants.version,Seq(input), Seq(output), TransactionConstants.lockTime)
|
||||||
val prevBlockHash = DoubleSha256Digest(BitcoinSUtil.decodeHex("00000000000000"))
|
val prevBlockHash = DoubleSha256Digest(BitcoinSUtil.decodeHex("00000000000000"))
|
||||||
//TODO: Replace this with a merkle root hash computed algorithmically
|
val merkleRootHash = Merkle.computeMerkleRoot(Seq(tx))
|
||||||
val merkleRootHash = DoubleSha256Digest(BitcoinSUtil.decodeHex("4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"))
|
|
||||||
val genesisBlockHeader = BlockHeader(version,prevBlockHash,merkleRootHash,time,nBits,nonce)
|
val genesisBlockHeader = BlockHeader(version,prevBlockHash,merkleRootHash,time,nBits,nonce)
|
||||||
val genesisBlock = Block(genesisBlockHeader,CompactSizeUInt(1,1),Seq(tx))
|
val genesisBlock = Block(genesisBlockHeader,CompactSizeUInt(1,1),Seq(tx))
|
||||||
genesisBlock
|
genesisBlock
|
||||||
|
@ -119,7 +119,9 @@ sealed trait ChainParams {
|
||||||
*/
|
*/
|
||||||
object MainNetChainParams extends ChainParams {
|
object MainNetChainParams extends ChainParams {
|
||||||
override def networkId = "main"
|
override def networkId = "main"
|
||||||
|
|
||||||
override def genesisBlock = createGenesisBlock(1231006505, 2083236893, 0x1d00ffff, 1, Bitcoins(50))
|
override def genesisBlock = createGenesisBlock(1231006505, 2083236893, 0x1d00ffff, 1, Bitcoins(50))
|
||||||
|
|
||||||
override def requireStandardTransaction = ???
|
override def requireStandardTransaction = ???
|
||||||
|
|
||||||
override def base58Prefixes : Map[Base58Type,Seq[Byte]] =
|
override def base58Prefixes : Map[Base58Type,Seq[Byte]] =
|
||||||
|
@ -140,7 +142,9 @@ object MainNetChainParams extends ChainParams {
|
||||||
object TestNetChainParams extends ChainParams {
|
object TestNetChainParams extends ChainParams {
|
||||||
|
|
||||||
override def networkId = "test"
|
override def networkId = "test"
|
||||||
override def genesisBlock : Block = ???
|
|
||||||
|
override def genesisBlock : Block = createGenesisBlock(1296688602, 414098458, 0x1d00ffff, 1, Bitcoins(50))
|
||||||
|
|
||||||
override def requireStandardTransaction = ???
|
override def requireStandardTransaction = ???
|
||||||
|
|
||||||
override def base58Prefixes : Map[Base58Type,Seq[Byte]] = Map(
|
override def base58Prefixes : Map[Base58Type,Seq[Byte]] = Map(
|
||||||
|
|
|
@ -53,4 +53,9 @@ class ChainParamsTest extends FlatSpec with MustMatchers {
|
||||||
|
|
||||||
genesisTransaction.txId.hex must be ("4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b")
|
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")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue