Git Product home page Git Product logo

bitcoin-s-core's Introduction

Build Status Coverage Status IRC NetworkGitter chat

Bitcoin-S

Design Principles

  • Immutable data structures everywhere
  • Algebraic Data Types to allow the compiler to check for exhaustiveness on match statements
  • Using property based testing to test robustness of code
  • Minimize dependencies to reduce attack surface

Projects

  1. core - this is where protocol data structures live, like Transactions, Blocks, or PrivateKeys. For more info read core/README.md

  2. core-test - this is where all test cases for the core project live

  3. bitcoind-rpc - this is a RPC client implementation for bitcoind. For more info read bitcoind-rpc/README.md

  4. bitcoind-rpc-test - this is where all test cases for the bitcoind-rpc project live

  5. eclair-rpc - this is a RPC client implementation for Eclair, which is a Lightning Network implementation. For more information please read eclair-rpc/README.md

  6. eclair-rpc-test - this is where all test cases for the eclair-rpc project live

  7. bench - benchmarks for Bitcoin-S. For more information please read bench/README.md

  8. testkit - This is a useful testkit for testing Bitcoin related applications. You can spin up Bitcoin and Lightning nodes arbitrarily and set them in specific states. For more information please read testkit/README.md

  9. zmq - bitcoind has a setting that publishes information about the state of the network over ZMQ. This project implements a subscriber that allows you to read and parse that information. For more information see zmq/README.md as well as the official Bitcoin Core ZMQ documentation

  10. secp256k1jni - JNI (Java Native Interface) for secp256k1, a optimized C library for EC operations on curve secp256k1. It has support for a wide range of cryptographic operations used in the Bitcoin protocol. Fore more information please read secp256k1jni/README.md

REPL

In any given sub project, it's possible to open a REPL session. This session has both main and test sources from Bitcoin-S available, as well as all dependencies for the given sub project. To do this:

// core project 
$ sbt coreTest/test:run // we do coreTest instead of core to have all test sources available

// this works as well
$ sbt
> project coreTest
> amm
...
Loading...
Compiling (synthetic)/ammonite/predef/interpBridge.sc
Compiling (synthetic)/ammonite/predef/replBridge.sc
Compiling (synthetic)/ammonite/predef/DefaultPredef.sc
Welcome to the Ammonite Repl 1.6.2
(Scala 2.12.7 Java 1.8.0_191)
If you like Ammonite, please support our development at www.patreon.com/lihaoyi
@ import org.bitcoins.core.protocol.ln.currency.MilliSatoshis 
import org.bitcoins.core.protocol.ln.currency.MilliSatoshis

@ MilliSatoshis(100) 
res1: MilliSatoshis = MilliSatoshisImpl(100)


// Bitcoind RPC project
$ sbt bitcoindRpcTest/test:run

// this works as well
$ sbt
> project bitcoindRpcTest
> amm

// Similarly for other projects

Artifacts

You need to add the Bitcoin-S Bintray to your resolvers to be able to access published artifacts.

sbt

With sbt, this can be done like this:

resolvers += Resolver.bintrayRepo("bitcoin-s", "bitcoin-s-core"),

Now you should be able to add Bitcoin-S artifacts like this:

"org.bitcoins" % "bitcoin-s-secp256k1jni" % "0.0.4"

"org.bitcoins" %% "bitcoin-s-core" % "0.0.4" withSources() withJavadoc()

"org.bitcoins" %% "bitcoin-s-bitcoind-rpc" % "0.0.4" withSources() withJavadoc()

"org.bitcoins" %% "bitcoin-s-eclair-rpc" % "0.0.4" withSources() withJavadoc()

"org.bitcoins" %% "bitcoin-s-testkit" % "0.0.4" withSources() withJavadoc()

"org.bitcoins" %% "bitcoin-s-zmq" % "0.0.4" withSources() withJavadoc()

Ammonite

Ammonite is (among other things) a modernized Scala REPL with syntax highlighting, multi-line editing, the ability to load artifacts directly in the REPL, and many other quality-of-life improvements missing in the default Scala REPL.

Ammonite is a project by Li Haoyi, and you can get it at ammonite.io

With Ammonite, this can be done like this:

@ import coursier.MavenRepository
import coursier.MavenRepository

@ interp.repositories() ++= Seq(MavenRepository("https://dl.bintray.com/bitcoin-s/bitcoin-s-core"))

@ import $ivy.`org.bitcoins::bitcoin-s-core:0.0.4`
import $ivy.$

@ import org.bitcoins.core.currency.Bitcoins
import org.bitcoins.core.currency.Bitcoins

@ Bitcoins(10)
res0: Bitcoins = BitcoinsImpl(10) // ๐ŸŽ‰

This is only necessary one time, Ammonite remembers your resolvers across sessions.

Published artifacts

Versioned artifacts are available online.

Snapshots (not necessarily stable, use for local development) are available at JFrog.

Tagged versions are available at Bintray.

bitcoin-s-core's People

Contributors

christewart avatar tommccabe avatar nkohen avatar torkelrogstad avatar mecampbellsoup avatar dwhjames avatar tkawachi avatar dan-smith-suredbits avatar boatkorachal avatar tannerr1776 avatar wildfunctions avatar

Watchers

McLOVIN avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.