spruned bitcoin clientLinks: -
spruned+BTC-RPC-Explorer howto-
spruned @ Github-
spruned documentation @ readthedocs (often out of date, contributors wanted!)-
spruned mailing list \ groups.ioHi everyone fellow bitcoiners!
spruned is a Bitcoin Light Client that emulates the bitcoind RPC API. I present it here for the first time! The project is on development for a year, with intermittency. Now it's quite mature and stable.
spruned is:
- a bitcoin client
- some sort of pseudo-node
- something that runs on small low-end computers, embedded devices, oversold VPS, cheap boxes, small containers, everywhere :-)
spruned is not:- a real bitcoin node
- a wallet
- something that participates to keep the network healthy
The spruned behavior is quite different from a full node, and is the following:- A full node downloads the entire block headers chain, and even spruned does. This is about 150mb on mainnet, 300mb on testnet.
- A full node downloads the entire blockchain. spruned potentially doesn't download even a single block, until needed. When the "getblock" command is used, spruned go on the P2P network to download blocks from the full nodes.
- A full node do relay, spruned doesn't (this is going to change)
- A full node has big reliable indexes of data to provide transactions over the API. spruned doesn't, it uses the electrum network on demand.
- A full node does a lot of math on the data and ensures its coherence (concatenation, cryptography, pow, scripts legalness). spruned does just some checks to ensure the provided transactions actually exists in the blockchain with Merkle proofs.
Given those compromises:- A full node doesn't run on raspberry with a 2GB SD with the full tx and blocks API. spruned does :-)
Some crypto-checks are done:- Block Headers with Checkpoints verified since the Genesis Block to the last one useful (1 week behind at the time of any release, new checkpoints will be added from Bitcoin Core).
- PoW verified for each block header. The difficulty is NOT enforced yet.
- Every transaction presented by spruned API is verified with merkle proofs from the electrum servers to the local downloaded headers chain. spruned will never present transactions fake claims about transactions blocks inclusion.
Some non-crypto-check are done:
- Quorum Mechanism. The connections pool must agree when information is out of the checkpoints scope.
- Quorum Based Fee Estimation with the exclusion of the out-of-range sources.
- Cache FIFO with custom size, to avoid downloading data twice.
Sources decentralization:- No block explorers, centralized sources
- DNS seed bootstrap, peers discovery.
Privacy:- The privacy model is the same as electrum.
- You can use your own servers disabling the peer discovery for both Electrum and the P2P network.
- Electrum Trust Model merged with data from the P2P network.
- Configurable Tor support: Two modes: only as a proxy, and use peers on clearnet, or --tor, to enforce only hidden services usages, no exit nodes.
Compatibility- spruned emulates the bitcoind RPC API. this means that a lot of bitcoind-based software could be also backed by spruned. LND, clightning, opentimestamps, btc-rpc-explorer and more, are compatible with spruned. whenever the network subset of the bitcoind RPC API is needed, spruned may help.
- zeromq implemented. same 4 channels as bitcoind emulated, to grant better compatibility also outside the RPC segment.
Dream list (aka Todo):
- exists :-) (brand, website, binaries, installers for windows, APK with Kivy [spruned is Python based])
- decentralize the source of trust :-) [yeah, I said dream list.]. I'd like spruned to keep a subset of the information the electrum servers provide and relay them over a dedicated P2P net. To go on the real Electrum network would be a fallback.
- random P2P blocks "sharding", indexes propagation over Kademlia (maybe, Kademlia, maybe there's something better out there, IPFS, and much more. quite a lot of new stuff popped out since the last time I saw that world. We need something with supernodes)
- uber efficient serialization because...
- requests obfuscation (asks more than you need)
- bitcoind RPC API wallet subset with an HD one :-)
Support spruned!- You can donate! Even a small one is very appreciated (well, over the dust threshold:P). The Bitcoin donation address (same in the README.md on
Github for double checks) is: 3FVGopUDc6tyAP6t4P8f3GkYTJ5JD5tPwV
- Participate! Programmers, designers, people willing to write documentation and guides. Everyone is welcome.
- Use spruned :-) Maybe the best contribute is using it and open issues if new bugs are encountered.
- Request features!
- Star the project on
Github. Starred projects mean interest, reputation, and it's easy to find more contributors (and so speed up the development).
- Talk about spruned! Do you like the idea and you see a future for that? Do you like the idea of some sort of a decentralized "layer 2" on top of the P2P to exchange provable information out of the scope of the legacy P2P net? Make some presentation :-)
- Subscribe to the spruned mailing list: groups.io \ mailing list! It's quite dormant, but if people start posting, it will not be dormant anymore :-)
Contacts:- freenode khs9ne \ mn3mnonic
-
twitter khs9ne- telegram gdassori