ElectrumX 安装运行

ElectrumX 可以在任何版本的 unix上运行。在 MacOS 和 DragonFlyBSD 上也能成功运行。如果想在 Windows 上运行,需要改动一些代码。

一.必要条件

Python3: ElectrumX使用asyncio。 需要Python版本> = 3.7。
aiohttp: 异步HTTP的Python库。需要版本 > = 2.0。
pylru: Python LRU缓存程序包。
数据库:需要数据库引擎软件包; 支持两个 leveldb 和 rocksdb

有些数字货币通常需要额外的包装,用于实现其区块哈希功能。 例如,DASH需要x11_hash。

您必须使用以下命令运行比特币守护程序:

txindex=1

在其配置文件中设置。 如果您已经安装了bitcoind,并且之前未进行过设置,则需要使用以下方法重新索引区块链

bitcoind -reindex

这可能需要一些时间。

虽然不需要运行ElectrumX,但它可以与主管软件一起运行,例如Daniel Bernstein的daemontools,Gerrit Pape的runit软件包或systemd。这些使管理安全的Unix服务器变得非常容易,强烈建议您安装其中一台并熟悉它们。下面的说明和示例运行脚本均假定使用daemontools。对于曾经使用过runit的人来说,适应它应该是微不足道的。

从创世块构建数据库时,ElectrumX必须将大量数据刷新到磁盘及其DB。如果数据库目录位于SSD上而不是HDD上,则将有更好的体验。目前,leveldb数据库和其他ElectrumX文件元数据的最终大小达到了比特币区块链的611,600高度,刚好超过46.9GB(43.7 GiB)。 LevelDB在短期内需要更多,并且块链只会越来越长,因此我建议在开始之前至少有70-80GB的可用空间。

二. 数据库引擎

可以从LevelDB和RocksDB中选择将事务信息存储在磁盘上。 时间和数据库大小没有显着差异。 目前在试图支持LMDB,但其历史写入性能要差得多。

需要安装下面的其中一个数据库引擎:

 LevelDB的Plyvel 
 适用于RocksDB的python-rocksdb(pip3安装python-rocksdb)
 pyrocksdb,用于未维护的版本,该版本与RocksDB的最新版本不兼容

三. 安装并且运行

安装完成上面的依赖,从 gitbub 中拉取源码

git clone https://github.com/kyuupichan/electrumx.git
cd electrumx

可以使用:file:setup.py进行安装,或从源代码树或其副本中运行代码。

应该创建一个标准用户帐户来运行服务器。除非偏执狂,否则一个用户就足够了。偏执狂可能还想为daemontools 日志记录过程创建另一个用户帐户。示例脚本和这些说明假定所有内容都在一个我称为lectrumrum 的帐户下。

接下来,创建一个目录,数据库将存储在该目录中,并使其可由电子选举帐户写入。我建议将此目录保存在SSD上:

mkdir /path/to/db_directory
chown electrumx /path/to/db_directory
1.进程限制

必须确保ElectrumX进程具有较大的打开文件限制。在同步期间,打开的文件不应超过1024。服务将为LevelDB使用大约 256 加上传入连接的数量。提供 1000 到 2000个连接并不罕见,因此我建议您将打开文件的限制设置为至少 2500 个。

请注意,在外壳程序中设置限制不会影响ElectrumX,除非您直接从外壳程序调用ElectrumX。如果您使用的是systemd命令,则需要在.file文件中进行设置(请参阅contrib / systemd / electrumx.service)。

2.使用daemontools

接下来创建一个 daemontools 服务目录;这里仅包含符号链接(详细的情况请参阅daemontools文档)。 svscan 程序将通过启动服务器的 supervise服务和其日志记录过程的另一个进程来确保目录中的服务器正在运行。您可以运行命令,如果命令涉及唯一者(服务器和记录器),则在你创建的用户下使用 svscan,否则需要以root用户身份运行,以便用户可以切换到你创建的账户。

假设此目录名为:file:service,则可以执行以下操作中的一个:

mkdir /service       # 使用 root 运行 vscan
mkdir ~/service      # 如果以该a/c身份运行svscan,则作为elecrumx

接下来,创建一个目录,以保存将由svscan生成的:command:supervise进程运行的脚本-svscan进程必须可读该目录。 假设此目录称为:scripts,您可以这样做:

mkdir -p ~/scripts/electrumx

然后从那里的ElectrumX源代码树中复制所有示例脚本:

cp -R /path/to/repo/electrumx/contrib/daemontools ~/scripts/electrumx

上面复制将复制 3 个东西:服务器运行脚本,带有logger 的 log目录和运行脚本的 env 目录。

您需要在环境文件:env/下配置环境变量。 ElectrumX服务器当前不接受任何命令行参数。它的所有配置均取自根据env/目录建立的环境(请参见envdir手册页)。最后,您需要更改: log:/log /run脚本,以使用要通过 multilog 写入日志的目录。若该目录不必存在, multilog 将创建该目录,但是其父目录必须存在。

现在开始svscan命令。由于服务目录仍然为空,所以这不会做太多事情:

svscan ~/service & disown

svscan现在正在等待将服务添加到目录中:

cd ~/service
ln -s ~/scripts/electrumx electrumx

创建符号链接并立即启动服务器进程。 您可以通过以下方式查看其日志:

tail -F /path/to/log/dir/current | tai64nlocal
3.使用systemd

该存储库包含一个样本systemd单位文件,您可以使用该文件来使用systemd设置ElectrumX。 只需将其复制到/ etc/ systemd/system中:

cp contrib/systemd/electrumx.service /etc/systemd/system/

样本单位文件假定存储库位于/ home / electrumx / electrumx。如果您的系统不同,则需要相应地更改单位文件。

您需要在/etc/electrumx.conf文件中设置一些环境变量。

现在,您可以使用systemctl命令启动ElectrumX:

systemctl start electrumx

您可以使用:journalctl命令来检查日志输出:

journalctl -u electrumx -f

配置完成后,您可能需要在启动时启动ElectrumX:

systemctl enable electrumx

警告:systemd在强制关闭进程方面非常积极。根据您的硬件,在初始同步期间,ElectrumX可能需要几分钟才能将缓存的数据刷新到磁盘。您应该在.file:.service`文件中将TimeoutStopSec设置为至少10分钟。

3.在Raspberry Pi 3上安装

要在Raspberry Pi 3上安装,您需要更新到Stretch发行版。请参阅contrib / raspberrypi3 / install_electrumx.sh中的完整过程。

另请参阅contrib/raspberrypi3/run_electrumx.sh,以获取配置和启动lectrumrum的简便方法。

四.同步进程

当然,索引区块链所需的时间取决于您的硬件。由于Python通常是单线程的,因此只有1个内核处于繁忙状态。 ElectrumX使用Python的:mod:asyncio异步预填充未来块的缓存,以使CPU忙于处理链而不会暂停。

因此,如果守护程序位于同一主机上,则性能可能只会得到很小的提升。将守护程序放在单独的计算机上甚至可能是有益的,因此执行索引的计算机仅将其缓存和磁盘I / O调整为该任务。

CACHE_MB环境变量控制ElectrumX使用的总缓存大小。请参阅:ref:此处<CACHE>进行警告。

这是我在2017年初的代码库(当前的代码库速度更快),给定的高度和粗糙的时间的经验。从36.3万到37.8万高空的时期最为缓慢:

  Machine A     Machine B
181,000          25m 00s      5m 30s
283,500                       1h 00m
321,800                       1h 40m
357,000          12h 32m      2h 41m
386,000          21h 56m      4h 25m
414,200       1d 12h 29m      6h 30m
447,168       2d 13h 20m      9h 47m

机器A:低规格2011年1.6GHz AMD E-350双核无风扇CPU,8GB RAM和SSD上的DragonFlyBSD UFS文件系统。它从机器B上的一个比特币通过LAN请求块。DB_CACHE默认为1,200。 LevelDB。

机器B:2012年末推出的iMac,运行Sierra 10.12.2、2.9GHz四核Intel i5 CPU,HDD和24GB RAM。在同一台机器上运行bitcoind。 DB_CACHE设置为1,800。 LevelDB。

对于除比特币-主网以外的其他链,同步应该要快得多。

注意:ElectrumX在完全同步并赶上守护程序之前,将无法提供正常的客户端连接。但是,LocalRPC连接始终处于服务状态。

五.终止ElectrumX

终止服务器进程的首选方法是向其发送stop RPC命令:

electrumx_rpc stop

或者在Unix上,也可以使用INT或TERM信号。对于daemontools监督的进程,可以通过将其关闭来完成,如下所示:

svc -d ~/service/electrumx

ElectrumX将记录日志中的信号接收,并确保在终止之前将块链索引刷新到磁盘。您应该耐心等待,因为将数据刷新到磁盘可能需要花费几分钟。

ElectrumX使用启用了fsync的数据库的事务功能。我这样做的目的是,在一定程度上保证了DB软件,操作系统和硬件的原子性保证,即使ElectrumX进程被强行杀死或断电,数据库也不应受到损坏 。最坏的情况应该是必须从最新的UTXO刷新重新开始索引。

该过程终止后,您可以使用以下方法重新启动它:

svc -u ~/service/electrumx

您可以通过以下方式查看正在运行的服务的状态:

svstat ~/service/electrumx

svscan当然可以从同一服务目录中同时处理多个服务,例如testnet或altcoin服务器。有关更多信息,请参见这些各种命令的手册页。

六.理解日志

您可以这样查看日志:

tail -F /path/to/log/dir/current | tai64nlocal

这是启动时的典型日志输出:

INFO:BlockProcessor:switching current directory to /crucial/server-good
INFO:BlockProcessor:using leveldb for DB backend
INFO:BlockProcessor:created new database
INFO:BlockProcessor:creating metadata diretcory
INFO:BlockProcessor:software version: ElectrumX 0.10.2
INFO:BlockProcessor:DB version: 5
INFO:BlockProcessor:coin: Bitcoin
INFO:BlockProcessor:network: mainnet
INFO:BlockProcessor:height: -1
INFO:BlockProcessor:tip: 0000000000000000000000000000000000000000000000000000000000000000
INFO:BlockProcessor:tx count: 0
INFO:BlockProcessor:sync time so far: 0d 00h 00m 00s
INFO:BlockProcessor:reorg limit is 200 blocks
INFO:Daemon:daemon at 192.168.0.2:8332/
INFO:BlockProcessor:flushing DB cache at 1,200 MB
INFO:Controller:RPC server listening on localhost:8000
INFO:Prefetcher:catching up to daemon height 447,187...
INFO:Prefetcher:verified genesis block with hash 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
INFO:BlockProcessor:our height: 9 daemon: 447,187 UTXOs 0MB hist 0MB
INFO:BlockProcessor:our height: 52,509 daemon: 447,187 UTXOs 9MB hist 14MB
INFO:BlockProcessor:our height: 85,009 daemon: 447,187 UTXOs 12MB hist 31MB
INFO:BlockProcessor:our height: 102,384 daemon: 447,187 UTXOs 15MB hist 47MB
[...]
INFO:BlockProcessor:our height: 133,375 daemon: 447,187 UTXOs 80MB hist 222MB
INFO:BlockProcessor:our height: 134,692 daemon: 447,187 UTXOs 96MB hist 250MB
INFO:BlockProcessor:flushed to FS in 0.7s
INFO:BlockProcessor:flushed history in 16.3s for 1,124,512 addrs
INFO:BlockProcessor:flush #1 took 18.7s.  Height 134,692 txs: 941,963
INFO:BlockProcessor:tx/sec since genesis: 2,399, since last flush: 2,400
INFO:BlockProcessor:sync time: 0d 00h 06m 32s  ETA: 1d 13h 03m 42s

在正常操作下,这些缓存状态每分钟重复一次或两次。 UTXO刷新可能需要几分钟,如下所示:

INFO:BlockProcessor:our height: 378,745 daemon: 447,332 UTXOs 1,013MB hist 184MB
INFO:BlockProcessor:our height: 378,787 daemon: 447,332 UTXOs 1,014MB hist 194MB
INFO:BlockProcessor:flushed to FS in 0.3s
INFO:BlockProcessor:flushed history in 13.4s for 934,933 addrs
INFO:BlockProcessor:flushed 6,403 blocks with 5,879,440 txs, 2,920,524 UTXO adds, 3,646,572 spends in 93.1s, committing...
INFO:BlockProcessor:flush #120 took 226.4s.  Height 378,787 txs: 87,695,588
INFO:BlockProcessor:tx/sec since genesis: 1,280, since last flush: 359
INFO:BlockProcessor:sync t ime: 0d 19h 01m 06s  ETA: 3d 21h 17m 52s
INFO:BlockProcessor:our height: 378,812 daemon: 447,334 UTXOs 10MB hist 10MB

所示的ETA只是一个粗略的指导,短期内可能会非常不稳定。 一开始它似乎有点乐观。 一旦达到280,000的高度,就应该是相当准确的。

七.创建自签名SSL证书

这些说明基于电子服务器文档中的说明。

要运行SSL服务器,您需要使用openssl生成自签名证书。另外,您不能在环境中设置SSL_PORT,也不能通过SSL进行投放,但是不建议这样做。

使用下面的示例代码创建建议有效期为5年的自签名证书。您可以为签名请求提供任何信息以标识您的服务器。除有效日期外,客户端当前未检查它们。当要求输入挑战密码时,请将其保留为空,然后按Enter:

$ openssl genrsa -out server.key 2048
$ openssl req -new -key server.key -out server.csr
...
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:California
Common Name (eg, YOUR name) []: electrum-server.tld
...
A challenge password []:
...
$ openssl x509 -req -days 1825 -in server.csr -signkey server.key -out server.crt

server.crt文件在服务器进程的环境中放入SSL_CERTFILE的envvar和SSL_KEYFILE中的server.key的文件中。

从Electrum 1.9开始,客户端将在第一个请求时为您的服务器学习并本地缓存SSL证书,以防止中间人对所有其他连接的攻击。

如果证书在服务器端丢失或过期,则需要使用其他服务器名称和新证书来运行服务器。因此,最好为证书和密钥创建脱机备份副本,以防您需要还原它们。

八.在特权端口上运行

您可以选择在不同于50001/50002的端口上运行elenetrumx。如果选择特权端口(<1024),则可以使用iptables NAT规则。

将端口110转发到内部端口50002的示例如下:

iptables -t nat -A PREROUTING -p tcp --dport 110 -j DNAT --to-destination 127.0.0.1:50002

然后,您可以按如下所示设置端口,并在特权端口上对外发布服务:

REPORT_SSL_PORT=110

有问题可以加微信资讯
在这里插入图片描述

转载自:http://www.wenwoha.com/blog_detail-69.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值