比特币轻量伪节点

spruned的Python项目详细描述


带有rpc的比特币轻量级伪节点,可以获取任何块或事务

traviscoverallspypi

这是什么?

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仿真
  • 维护界面

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java 安卓 XMLPullParser错误   Java响应网格布局   Java中使用递归的不同方法   java变量可能尚未初始化(边加权图)   java如何将这样的文件插入MySQL数据库   java云端点:不允许实体类型的数组或集合   java(编译器或jvm)是否以不同方式处理类的静态最终成员?如果是,怎么做   java如何从lambda表达式返回新的非抽象映射?   java JDK 7支持的最大Spring版本是什么   我们如何从java类生成DTD   java在我的例子中BindingResult、FieldErrors或GlobalErrors是否可以为null?   java[LibGDX][GWT]读取文件外观时出错。HTML格式的json[序列化异常]   字典Java不可修改密钥集映射   java Admob在firebase sdk之后显示测试广告,但不显示真实广告