比特币轻量伪节点
spruned的Python项目详细描述
这是什么?
Spruned是一个用于光系统的比特币客户端。256MB内存和500MB硬盘 应该足够让它继续运行。
同时支持比特币主网和测试网 比特币的轻量化系统(它被证明对覆盆子有效 它为比特币cli提供了一个接口。
它是怎么工作的?
当你需要的时候,可以根据需要下载和存储比特币块。 它们直接来自peer2peer比特币网络。有一个“引导” 功能,将最后50个(默认设置)块保留在 本地存储,因为提取块可能还需要10秒 通过慢速连接,这种“引导模式”减少了 用法。
您可以使用比特币cli或任何其他rpc客户端,就好像您使用了比特币 正在运行。对于与事务相关的api和utxo跟踪, 斯普林德使用驻极体网络。
依赖关系
Spruned与Python一起工作>;=3.5.2。现在它应该只对 Linux系统。它大量使用connectrum、pybitcointools和 pycoinnet库。感谢Mantainers&;贡献者!尤其是在 这个发展阶段(但最好总是这样)是 建议使用virtualenv来运行sprined。
用法
开发人员:我希望代码足够自我解释,如果您熟悉的话 使用Asyncio。
其他人:你可以从如何安装云杉拍摄获得灵感 看看setup.sh但是,如果你够幸运的话,setup.sh本身会 创建一个虚拟环境并在其中安装sprined。
好吧,试试这个:
$ cd ~/src $ sudo apt-get install libleveldb-dev python3-dev git virtualenv $ git clone https://github.com/gdassori/spruned.git $ cd spruned $ ./setup.sh $ venv/bin/python spruned.py --help usage: spruned.py [-h] [--rpcuser RPCUSER] [--rpcpassword RPCPASSWORD] [--rpcport RPCPORT] [--rpcbind RPCBIND] [--datadir DATADIR] [--daemon] [--keep-blocks KEEP_BLOCKS] [--network {bitcoin.mainnet,bitcoin.testnet}] [--debug] [--cache-size CACHE_SIZE] A Bitcoin Lightweight Pseudonode optional arguments: -h, --help show this help message and exit --rpcuser RPCUSER Username for JSON-RPC connections (default: rpcuser) --rpcpassword RPCPASSWORD Password for JSON-RPC connections (default: rpcpassword) --rpcport RPCPORT Listen for JSON-RPC connections on <port> (default: 8332 or testnet: 18332) (default: 8332) --rpcbind RPCBIND Bind to given address to listen for JSON-RPC connections. (default: 127.0.0.1) --datadir DATADIR Specify data directory (default: /home/guido/.spruned) --daemon Run in the background as a daemon and accept commands (default: False) --keep-blocks KEEP_BLOCKS --network {bitcoin.mainnet,bitcoin.testnet} --debug Enable debug mode (default: False) --cache-size CACHE_SIZE Cache size (in megabytes) (default: 50)
而且,一旦你跑得漂亮:
$ tail -f ~/.spruned/spruned.log # to see what's going on!
或检查状态*:
$ bitcoin-cli getblockchaininfo { "mediantime": 1523387051, "blocks": 517579, "headers": 517579, "verificationprogress": 100, "chain": "main", "chainwork": null, "difficulty": null, "bestblockhash": "00000000000000000018e502dec1f93d32521674019a45d7d095cbd390279dff", "warning": "spruned v0.0.1. emulating bitcoind v0.16", "pruned": false }
下载块:
$ bitcoin-cli getblock `bitcoin-cli getblockhash 1` { "bits": 486604799, "mediantime": 1231469665, "nextblockhash": "000000006a625f06636b8bb6ac7b960a8d03705d1ace08b1a19da3fdcc99ddbd", "tx": [ "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098" ], "previousblockhash": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", "version": 1, "chainwork": "Not Implemented Yet", "nonce": 2573394689, "time": 1231469665, "height": 1, "hash": "00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048", "versionHex": "Not Implemented Yet", "merkleroot": "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098", "difficulty": "Not Implemented Yet" }
或交易:
$ bitcoin-cli getrawtransaction 0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098 01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0704ffff 001d0104ffffffff0100f2052a0100000043410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb 8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac00000000
最后,广播一个事务:
$ bitcoin-cli sendrawtransaction 01000000011cee4c0dd7f1a90ae80311c414d48f3a16596e9ea08fa3edfb793734e2b2a100010000006a47304402205a665616085b4f425cccfde5be2113258f3c104c2c53ef918866ada8f02f7caf0220458bdbc220a3f1017b65d9138e5121a9c63decc89550a2e64e914013d26cb93b0121029643906e277eae677134d40356dfb575a2dfbe09a18a1fd7fadfd853715a7242ffffffff0234e3e600000000001976a91410a71790c6bbc2694c74b6fee9a449a11f74123388ac444c5501000000001976a9148c9e0a9029bbce075e2b5aae90010905aa4c64b188ac00000000 489feae0e317b9255031710eadc238bb1ba3009fff0e86b303b0963e34a332b0
*不包括比特币cli
比特币0.16中的模拟API:
- estimatefee - estimatesmartfee - getbestblockhash - getblock [mode 0 and mode 1] - getblockchaininfo - getblockcount - getblockhash - getblockheader [ verbose \ non verbose ] - getrawtransaction [ non verbose only ] - gettxout - sendrawtransaction
正在进行的工作:
- getrawtransaction [ verbose ] - getmempoolinfo - getrawmempool
要求
- 互联网连接
- 少于500MB的磁盘空间:-)
- python>;=3.5.2
限制
- 可能会减少隐私:如果你自己拥有整个区块链, 你不必告诉任何人你在找什么。
- 不比完整节点快:Internet下载速度比读取速度慢 磁盘。
- 不向网络中继和参与(这可能会改变)。
- 非常不稳定!
未来发展
- 完全TOR支持
- mempool模拟
- ZeroMQ仿真
- 维护界面