Skip to content

imranmehdi5511/bitcoin-s-spv-node

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status Coverage Status

This is an implementation of an SPV node on the Bitcoin network using Scala & Bitcoin-S-Core.

Our implementation relies heavily on Akka, which has an implementation of the Actor model in Scala. If you want to read more about Akka and what it is/how it is used, it is best to start reading here.

Examples

Look inside of Main.scala for example of creating a PaymentActor, that montiors an address. Once a transaction that pays to the address is included in a block, it sends a message back to your actor saying a payment was successful.

package org.bitcoins.spvnode

import org.bitcoins.core.config.TestNet3
import org.bitcoins.core.crypto.{DoubleSha256Digest, Sha256Hash160Digest}
import org.bitcoins.core.protocol.blockchain.TestNetChainParams
import org.bitcoins.core.protocol.{BitcoinAddress, P2PKHAddress}
import org.bitcoins.core.util.BitcoinSUtil
import org.bitcoins.spvnode.constant.Constants
import org.bitcoins.spvnode.networking.PaymentActor
import org.bitcoins.spvnode.networking.sync.BlockHeaderSyncActor

/**
  * Created by chris on 8/29/16.
  */
object Main extends App {


  override def main(args : Array[String]) = {
    val blockHeaderSyncActor = BlockHeaderSyncActor(Constants.actorSystem)
    val gensisBlockHash = TestNetChainParams.genesisBlock.blockHeader.hash
    val startHeader = BlockHeaderSyncActor.StartHeaders(Seq(gensisBlockHash))
    blockHeaderSyncActor ! startHeader
  }
}

If you want to see more logging for the networking stuff, adjust your logback.xml file to DEBUG.

After that, you are ready to fire up your spv node with this command:

chris@chris-870Z5E-880Z5E-680Z5E:~/dev/bitcoins-spv-node$ sbt run

After that, you should start seeing headers being synced to your node. The headers are stored inside of a file called block_headers.dat file inside of src/main/resources. Note that this does not use any checkpointing system, so to sync up all ~930,000 headers on TestNet3 will take awhile.

Perisistent storage

For more information on how we store block headers in our spv node, please read database_documentation

Syncing our node

For more information on syncing our node with the peer to peer network, please read header_sync

About

This is a implementation of an spv node using bitcoin-s-core

Resources

License

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Scala 100.0%