haskoin-node

P2P library for Bitcoin and Bitcoin Cash

http://github.com/haskoin/haskoin#readme

Version on this page:1.0.1
LTS Haskell 22.29:1.0.1
Stackage Nightly 2024-07-13:1.1.3
Latest on Hackage:1.1.3

See all snapshots haskoin-node appears in

MIT licensed by Jean-Pierre Rupp
Maintained by [email protected]
This version can be pinned in stack with:haskoin-node-1.0.1@sha256:5e21ae786a9a9404500c6c2b18c07eb13239d3ae3c1e06538d3cecd5de35d767,2276

Module documentation for 1.0.1

Haskoin Node

Haskoin Node is a peer-to-peer library for Bitcoin and Bitcoin Cash. It uses a RocksDB database to store blockchain headers and peers.

Changes

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

[1.0.1] - 2023-08-03

Changed

  • Add compatibility with latest LTS Haskell.

[1.0.0] - 2023-07-28

Changed

  • Make compatible with latest haskoin-core.
  • Use DuplicateRecordFields and OverloadedRecordDot.
  • Simplify pub/sub queues.
  • Multiple refactoring passes.

[0.18.1] - 2022-07-27

Fixed

  • Set default port for peers where it is unset.

[0.18.0] - 2022-07-27

Added

  • Support setting up and connecting to IPv6 peers.

[0.17.14] - 2021-08-14

Fixed

  • Reduce verbosity on incoming header decode test.
  • Show appropriate error message upon receiving empty headers.

[0.17.13] - 2021-08-14

Added

  • Display more details about invalid incoming headers.

[0.17.12] - 2021-05-17

Fixed

  • Do not connect to more than the maximum number of peers.

[0.17.11] - 2021-05-17

Added

  • Display message command that disconnects a peer.

[0.17.10] - 2021-05-17

Fixed

  • Correct disconnect timeout algorithm bug.

[0.17.9] - 2021-05-17

Fixed

  • Add randomised timeouts to avoid disconnecting all peers.

[0.17.2] - 2021-03-09

Fixed

  • Do not start chain actor until database initialized.

[0.17.1] - 2021-01-08

Changed

  • Depend on haskoin-core-0.17.3.

[0.17.0] - 2020-10-21

Added

  • Support for Bitcoin Cash November 2020 hard fork.
  • BlockHeaders instance for ReaderT Chain.

[0.16.0] - 2020-07-23

Changed

  • Add support for column families.

[0.15.0] - 2020-07-20

Changed

  • Use new Haskell bindings for RocksDB.

[0.14.1] - 2020-06-19

Fixed

  • Correct flawed peer locking logic in Chain actor.

[0.14.0] - 2020-06-18

Changed

  • Massively refactor everything in a non-backwards-compatible way.
  • Use MIT license.
  • Bump haskoin-core.
  • Bump secp256k1-haskell.

Fixed

  • Fix getting stuck on a single peer.

[0.13.0] - 2020-05-08

Changed

  • Depend on Haskoin Store 0.13.3.
  • Better code organisation.

[0.12.0] - 2020-05-06

Changed

  • Add a test suite that simulates network instead of connecting to real one.

[0.11.3] - 2020-05-03

Changed

  • Revert including multiline decoding error text in logs.

[0.11.2] - 2020-05-03

Changed

  • Include header decoding error text in logs.

[0.11.1] - 2020-05-03

Changed

  • Improve logging.

[0.11.0] - 2020-05-03

Changed

  • Set peer too old time

[0.10.1] - 2020-05-03

Changed

  • Disconnect old peers after 48 hours instead of 30 minutes.

[0.10.0] - 2020-05-03

Changed

  • Move modules out of Network.Haskoin namespace.
  • Add better and more logging.
  • Change Manager module name and related values to PeerManager.

[0.9.21] - 2020-04-07

Removed

  • Remove unnecessary logging.

[0.9.20] - 2020-04-07

Changed

  • Better log messages.
  • Less verbose debug logging.

[0.9.19] - 2020-04-07

Changed

  • Better log messages.

[0.9.18] - 2020-04-07

Added

  • More aggressive peer discovery.

[0.9.17] - 2020-04-07

Added

  • Peers are disconnected automatically after awhile.

[0.9.16] - 2020-02-08

Added

  • Lower bound versions for some dependencies.

[0.9.15] - 2020-01-15

Changed

  • Update to support new NetworkAddress data structure from haskoin-core.

[0.9.14] - 2019-12-10

Removed

  • No longer support storing peers in db as performance tradeoff doesn’t justify it.

[0.9.13] - 2019-10-08

Changed

  • Really store peers in db.

[0.9.12] - 2019-10-08

Changed

  • Demote some logging to debug level.

[0.9.11] - 2019-10-02

Added

  • Add -O2 optimisations to GHC.

[0.9.10] - 2019-04-19

Added

  • Increase debugging information where application freezes.

[0.9.9] - 2019-04-12

Added

  • Increase debugging information.

[0.9.8] - 2019-04-12

Changed

  • Increase version of haskoin-core to 0.9.0.
  • Fix some tests.

[0.9.7] - 2019-04-12

Added

  • More debugging.

Changed

  • Be defensive against duplicate peers.
  • Increase interval between housekeeping pings.
  • Replace peers in database atomically.

[0.9.6] - 2019-04-01

Changed

  • Randomize known peers instead of keeping scores.
  • Simplify peer management code to avoid freezes.
  • Merge logic for chain and manager.

[0.9.5] - 2018-11-14

Changed

  • Do not record new peers in database when peer discovery is disabled.

[0.9.4] - 2018-11-01

Changed

  • Don’t spam best block events.

[0.9.3] - 2018-10-22

Changed

  • Correct display of milliseconds in log.
  • Correct bug when receiving headers from unknown peer.
  • Simplify chain syncing code.

[0.9.2] - 2018-10-18

Changed

  • Peer dies immediately when receiving a bad message.

[0.9.1] - 2018-10-18

Changed

  • Keep track of last synced header from a peer to avoid endless loops on large reorgs.

[0.9.0] - 2018-10-17

Changed

  • Use an STM listener instead of a publisher for the node API.

[0.8.2] - 2018-10-17

Added

  • Expose ChainMessage and ManagerMessage types from Haskoin.Node module.

[0.8.1] - 2018-10-11

Changed

  • Corrected documentation for killPeer function.
  • Leave time out of logic code.

[0.8.0] - 2018-10-09

Changed

  • Peers are now killed directly instead of through peer manager.

Removed

  • Chain no longer needs peer manager.

[0.7.2] - 2018-10-09

Added

  • Compatibility with base 4.12.

Changed

  • Update base to 4.9.

[0.7.1] - 2018-10-09

Added

  • Allow to easily obtain a peer’s publisher.

[0.7.0] - 2018-10-09

Added

  • Versioning for chain and peer database.
  • Automatic purging of chain and peer database when version changes.
  • Add extra timers.
  • Add publishers to every peer.

Changed

  • Full reimplementation of node API.
  • Simplify peer selection and management.
  • Merge manager and peer events.
  • Rename configuration variables for node.
  • Separate logic from actors for peer manager and chain.

Removed

  • Remove irrelevant fields from peer information.
  • Remove unreliable peer block head tracking.
  • Remove dependency on deprecated binary conduits.
  • Remove Bloom filter support from manager.
  • Remove unreliable peer request tracking code.
  • Remove separate manager events.

[0.6.1] - 2018-09-14

Changed

  • Fix bug where peer height did not update in certain cases.

[0.6.0] - 2018-09-14

Added

  • Documentation everywhere.

Changed

  • Make compatible with NQE 0.5.
  • Use supervisor only in peer manager.
  • API quality of life changes.
  • Exposed module is now only Haskoin.Node.

Removed

  • No more direct access to internals.

[0.5.2] - 2018-09-10

Changed

  • Improve dependency definitions.

[0.5.1] - 2018-09-10

Changed

  • Dependency sec256k1 changes to secp256k1-haskell.

[0.5.0] - 2018-09-09

Added

  • New CHANGELOG.md file.
  • Use nqe for concurrency.
  • Peer discovery.
  • RocksDB peer and block header storage.
  • Support for Merkle blocks.

Changed

  • Split out of former haskoin repository.
  • Use hpack and package.yaml.
  • Old haskoin-node package now renamed to old-haskoin-node and deprecated.

Removed

  • Removed Old Haskoin Node package completely.
  • Removed Stylish Haskell configuration file.
  • Remvoed haskoin-core and haskoin-wallet packages from this repository.