Skip to content

Update readme #52

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 13 additions & 39 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,44 +1,18 @@
[![Safety Dance](https://img.shields.io/badge/unsafe-forbidden-success.svg)](https://github.com/rust-secure-code/safety-dance/)

# Murmel
Murmel is a lightweight Bitcoin node. Its intended use is to serve a lightning network stack with a settlement layer.
Its resource requirements are marginal if compared to a Bitcoin Core node.
# Bitcoin-Wasm
Bitcon Wasm Is A [WASM-WASI](https://wasi.dev/) Compliant embedded Bitcoin and Lighting Payment Node, It is developed to be embedded in native applications with WASI compliant sdk.
The Distributed file would be a .wasm file which an application with WASI compliant SDK such as [wasmtime](https://wasmtime.dev/) and [JCO](https://bytecodealliance.github.io/jco/)
It consists of two Sub Component
- Bitcoin SPV Node
- Lightning Payment Node which relies on Lightning Payment Provider for Routing Payments

A Murmel determines the chain with most work on its own and is capable of doing further checks. Its
security guarantee is at least as defined in the Simplified Payment Verification (SPV) section of Satoshi's white paper.
## Build

The bitcoin network is governed by full nodes. Full nodes determine which blocks are valid and thereby decide if a miner gets paid
for the block it creates. The chain with most work therefore communicates what full nodes think bitcoin is. Therefore following
the chain with most work is not following miner, as in popular belief, but following the majority opinion of full nodes.
Read more about this [here](https://medium.com/@tamas.blummer/follow-the-pow-d6d1d1f479bd).

Murmel does not maintain a memory pool of transactions, as unconfirmed payments unsecure to accept.
Use Murmel to accept confirmed payments or to underpin a Ligthning Network node.

#### About the name
Murmel is German for marble. Murmel is small, fast, hard and beautiful just like a marble.

## Design and Implementation notes
Murmel implements a small and fast P2P engine using on [mio](https://crates.io/crates/mio). The network messages are routed
to their respective processors and back through message queues. Processors of logically distinct tasks are otherwise
de-coupled and run in their own thread.

The blockchain data is persisted in a [Hammersbald](https://github.com/rust-bitcoin/hammersbald) database.

Murmel's filter implementation [BIP158](https://github.com/bitcoin/bips/blob/master/bip-0158.mediawiki) was moved into the rust-bitcoin project,
[here](https://github.com/rust-bitcoin/rust-bitcoin/blob/master/src/util/bip158.rs).

Murmel will not use those filters until they are available committed into the bitcoin block chain as they are otherwise not safe to use:
a disagreement between two sources of filters can not be resolved by a client without knowledge of the UTXO. Consulting a third node would evtl. give yet another answer.

Filters that could be verified with the block content alone, as I (repeatedly) suggested on the
[dev-list](https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2019-February/016646.html),
were rejected in favor of the current design, that is in fact more convenient once committed, but only then.


## Status
Under refactoring.

## How to run Murmel
Murmel does not do anything useful yet.
## Run

## Progress
Currently in Progress (Bitcoin SPV Node)
- Descriptive Wallet [ in progress ]
- Compact Block Filter
- Bitcoind Support
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
6 changes: 6 additions & 0 deletions cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[workspace]

members = [
# "bitcoin-wasm",
# "lightning-wasm",
]
37 changes: 37 additions & 0 deletions lightning-wasm/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
[package]
name = "ldk-sample"
version = "0.1.0"
authors = ["Valentine Wallace <[email protected]>"]
license = "MIT OR Apache-2.0"
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
lightning = { version = "0.0.121", features = ["max_level_trace"] }
lightning-block-sync = { version = "0.0.121", features = [ "rpc-client", "tokio" ] }
lightning-invoice = { version = "0.29.0" }
lightning-net-tokio = { version = "0.0.121" }
lightning-persister = { version = "0.0.121" }
lightning-background-processor = { version = "0.0.121", features = [ "futures" ] }
lightning-rapid-gossip-sync = { version = "0.0.121" }

base64 = "0.13.0"
bitcoin = "0.30.2"
bitcoin-bech32 = "0.12"
bech32 = "0.8"
libc = "0.2"

chrono = { version = "0.4", default-features = false, features = ["clock"] }
rand = "0.4"
serde_json = { version = "1.0" }
bytes = "1"
tokio = { version = "1", features = [ "rt", "sync", "time", "macros" ] }
warp_wasi = "0.3"
serde = { version = "1.0.200", features = ["derive"]}

[profile.release]
panic = "abort"

[profile.dev]
panic = "abort"
Loading