You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardexpand all lines: README.md
+28-12
Original file line number
Diff line number
Diff line change
@@ -1,25 +1,41 @@
1
-
# Bitcoin SPV in Rust
2
-
This is an implementation of Bitcoin's Simplified Payment Verification mode. The SPV mode is suitable for lightweight nodes, such as a mobile phone. An SPV node verifies proof-of-work of a block but does not validate included transactions. It will follow the chain with most work.
1
+
# Murmel
2
+
Murmel is a lightweight Bitcoin node. Its intended use is to serve a lightning network stack with a settlement layer.
3
+
Its resource requirements are marginal if compared to a Bitcoin Core node.
3
4
4
-
An SPV node needs to connect full nodes to work. It does not offer any services to other nodes.
5
+
Murmel filters blocks on client side implementing [BIP157](https://github.com/bitcoin/bips/blob/master/bip-0157.mediawiki).
6
+
Since Bitcoin Core does not yet support BIP157, Murmel may also be operated as filter server to serve a
7
+
lightweight instance of itself.
5
8
6
-
This implementation is tailored to serve a Lightning Network node on a resource and bandwidth limited device. It does not feature a memory pool of transactions, as payments are assumed to use the Lightning layer and otherwise only confirmed transactions are of interest.
9
+
A Murmel client determines the chain with most work on its own and is capable of doing further checks. Its
10
+
security guarantee is at least as defined in the Simplified Payment Verification (SPV) section of Satoshi's white paper.
7
11
8
-
## Status
9
-
This is work in progress, far from production quality. It aims to serve parallel development of a Lightning Node.
12
+
Murmel does not maintain a memory pool of transactions, as payments are assumed to use the Lightning Network layer and otherwise only confirmed transactions are of interest.
13
+
14
+
#### About the name
15
+
Murmel is German for marble. Murmel is small, fast, hard and beautiful just like a marble.
16
+
17
+
## Design and Implementation notes
18
+
Murmel implements a small and fast P2P engine using on [mio](https://crates.io/crates/mio). The network messages are routed
19
+
to their respective processors and back through message queues. Processors of logically distinct tasks are otherwise
20
+
de-coupled and run in their own thread.
10
21
11
-
The code currently has a lot of dependencies as I wanted to progress quickly towards the stuff that is really new. Most dependencies will be removed later. Networking and Database code is carefully isolated from the logic of the node, so their implementations can be replaced.
22
+
The blockchain data is persisted in a [Hammersbald](https://github.com/rust-bitcoin/hammersbald) database.
23
+
The calculated [BIP157](https://github.com/bitcoin/bips/blob/master/bip-0157.mediawiki) filters for scripts and also for
24
+
spent outpoints allow checking the UTXO based on its immutable store. In contrast to Bitcoin Core, Murmel does not have
25
+
to re-compute anything on a re-org (switch of fork with most work) and optionally able to verify spent coins and
26
+
block reward. These additional checks to that required by SPV allows Murmel to have a security guarantee higher than
27
+
any other light node, but certainly still sub-par to a Bitcoin Core node.
12
28
13
-
I plan to implement BIP157 and BIP158 as soon as they are available in Bitcoin. Until that the node will download full blocks. I do not want to waste time implementing BIP37 that hurts privacy.
14
29
15
-
## Contributions and Vision
16
-
The current plan is to create a small footprint, low bandwidth, stable and secure Lightning Network node combining with the below projects:
30
+
## Status
31
+
Not yet for serious use. Marble is able to support it's own and Lightning Node development.
32
+
33
+
## Uses
34
+
Marble uses and supports below projects:
17
35
18
36
*[Rust language bindings for Bitcoin secp256k1 library.](https://github.com/rust-bitcoin/rust-secp256k1)
0 commit comments