ElectrumX 環境變量

ElectrumX不使用命令行參數,而是由環境變量控制其行爲。 僅要求提供少數幾個,如果未指定,則其餘的將具有合理的默認值。 有關資源使用情況的許多默認設置都是保守的。 我鼓勵您對其進行review。

注意

設置適當的服務以能夠連接到您的服務器。爲了使互聯網上的客戶知道您提供的服務,您必須使用REPORT_SERVICES廣告您的服務。

一. 必要參數

這些環境變量始終是必需的:

這些環境變量始終是必需的:

COIN

必須是lib / coins.py中Coin類之一的名稱。

DB_DIRECTORY

數據庫目錄的路徑。相對路徑應相對於父流程工作目錄。如果使用的話,工作目錄是運行腳本的目錄。

DAEMON_URL

守護程序URL的逗號分隔列表。如果提供了多個選項,則ElectrumX最初將連接到第一個,如果其中一個停止工作,則將故障轉移到後續的輪詢模式。

守護程序URL的通用形式爲:

http://username:password@hostname:port/
前面的http//是可選的,後面的斜槓也是可選的。 :port部分也是可選的,如果省略,它將默認爲COIN和NET的標準RPC端口。

注意:通過以上設置,您的服務器將運行並索引鏈。 要啓用傳入連接,您必須設置“服務”,並且其他人要注意您的服務器,請設置“ REPORT_SERVICES”。

二. 運行腳本參數

如果你需要運行腳本,下面的參數是必須的

ELECTRUMX

lectrumx_server腳本的路徑。相對路徑應相對於運行腳本的目錄。

USERNAME

服務器將以其運行的用戶名。

三. 服務

這兩個環境變量是各個服務的逗號分隔列表。

服務具有以下一般形式:

protocol://host:port

協議不區分大小寫。 公認的協議是:

tcp Plaintext TCP socketsssl
ssl SSL-encrypted TCP socketsws
ws Plaintext websocketswss
wss SSL-encrypted websocketsrpc
rpc Plaintext RPC

在服務列表中,可以使用不同的主機或端口多次指定協議。這對於多宿主主機或同時提供Tor和clearnet服務都可能有用。

host可以是方括號中的主機名,IPv4地址或IPv6地址。

port是1到65535(含)之間的整數。

在有記錄的地方,可以省略協議,主機和端口中的一個或多個,在這種情況下,將採用默認值。

以下是有效服務的一些示例:

tcp://host.domain.tld:50001 # Hostname, lowercase protocol, port
SSL://23.45.67.78:50002 # An IPv4 address, upper-case protocol, port
rpC://localhost # Host as a string, mixed-case protocol, default port
ws://[1234:5678🔡:5601]:8000 # Host as an IPv6 address
wss://h3ubaasdlkheryasd.onion:50001 # Host as a Tor “.onion” address
rpc://:8000 # Default host, port given
host.domain.tld:5151 # Default protocol, hostname, port
rpc:// # RPC protocol, default host and port

注意

ElectrumX在完全趕上您的比特幣守護程序之前,將不提供任何傳入連接。唯一的例外是本地RPC連接,服務器初始化後隨時可以提供服務。

SERVICES

以逗號分隔的服務列表ElectrumX將接受其傳入連接。

此環境變量確定服務器偵聽的接口和端口,因此必須正確設置它才能成功建立與服務器的任何連接。如果未設置或爲空,則ElectrumX將不會監聽任何傳入的連接。

協議可以是任何公認的協議。

主機默認爲計算機的所有接口,除非協議爲rpc,否則默認爲localhost。

只能將rpc默認端口設置爲默認值8000。

在大多數Unix系統上,低於1024的端口要求提升的特權,因此建議選擇更高的端口。例如,在Debian上,可以通過安裝libcap2-bin軟件包來實現:

sudo apt-get update && sudo apt-get -y install libcap2-bin
sudo setcap cap_net_bind_service=+ep /path/to/electrumx_server

如果任何列出的服務具有協議

ssl 或 wss,則必須定義 SSL_CERTFILE 和 SSL_KEYFILE。

onion 地址在SERVICES中無效。

這是SERVICES環境變量的示例值:

tcp://:50001,ssl://:50002,wss://:50004,rpc://

在端口50001、50002 和50004 的所有接口上提供tcp,ssl,wss服務。 rpc在其默認主機localhost和默認端口8000上提供。

REPORT_SERVICES

以逗號分隔的服務列表ElectrumX將通告服務器網絡中的服務器和其他服務器(如果啓用了對等發現),以及任何成功的連接。

必須根據您的網絡,防火牆和路由器設置正確設置此環境變量,以便客戶端和其他服務器查看如何連接到服務器。如果未設置或爲空,則不通告任何服務。

rpc協議,特殊IP地址(如果啓用了對等發現,則包括私有IP地址)和localhost在REPORT_SERVICES中無效。

這是REPORT_SERVICES環境變量的示例值:

tcp://sv.usebsv.com:50001,ssl://sv.usebsv.com:50002,wss://sv.usebsv.com:50004
這將分別在sv.usebsv.com的端口50001、50002和50004上發佈tcp,ssl和wss服務的廣告。

注意: 證書頒發機構簽名的證書無法在Tor上使用,因此,如果您的證書是自簽名的,則應該只在REPORT_SERVICES中擁有Tor服務。

SSL_CERTFILE

SSL證書文件的文件系統路徑。

SSL_KEYFILE

SSL密鑰文件的文件系統路徑。

四. 冗雜環境變量

爲什麼稱之爲冗雜的環境變量呢,因爲這些變量是可選擇的

LOG_FORMAT

要使用的Python日誌記錄格式字符串。 默認爲%(levelname)s:%(name)s:%(message)s。

LOG_LEVEL

默認的Python日誌記錄級別,不區分大小寫的字符串。 有用的值包括調試'',信息’’,警告''和錯誤’’。

ALLOW_ROOT

將此環境變量設置爲任何非空值,以允許以根用戶身份運行ElectrumX。

NET

必須是lib / coins.py中Coin類之一的NET。 默認爲主網。

DB_ENGINE

UTXO和歷史數據庫的數據庫引擎。 缺省值爲leveldb。 另一種選擇是rocksdb。 您將需要爲引擎安裝適當的python軟件包。 該值不區分大小寫。

DONATION_ADDRESS

服務器捐贈地址報告給Electrum客戶端。 默認爲空,Electrum將其解釋爲無。

BANNER_FILE

在Electrum的“控制檯”選項卡中提供給客戶的橫幅文件的路徑。相對文件路徑必須相對於DB_DIRECTORY。將爲每個新客戶端重新讀取標題文件。

您可以在橫幅文件中放置幾個元變量,然後在爲客戶服務之前將其替換。

$ SERVER_VERSION已替換爲您正在運行的ElectrumX版本,例如1.0.10。

$ SERVER_SUBVERSION被替換爲ElectrumX用戶代理字符串。例如,ElectrumX 1.0.10。

$ DAEMON_VERSION被守護程序的版本替換爲點分隔的字符串。例如0.12.1。

$ DAEMON_SUBVERSION已替換爲守護程序的用戶代理字符串。例如/BitcoinUnlimited:0.12.1(EB16; AD4)/。

$ DONATION_ADDRESS將替換爲DONATION_ADDRESS環境變量中的地址。

請參閱此處以獲取腳本,該腳本使用有關費用,最後封鎖時間和高度等的有用統計信息定期更新橫幅文件。

TOR_BANNER_FILE

至於BANNER_FILE(這也是默認值),但顯示給被認爲是您的Tor隱藏服務的傳入連接。

ANON_LOGS

設置爲非空的任何內容,以用諸如xx.xx.xx.xx:xxx之類的編輯文本替換日誌中的IP地址。 默認情況下,IP地址將被寫入日誌。

LOG_SESSIONS

將會話統計信息打印到日誌之間的秒數。 除了遵循ANON_LOGS以外,輸出與會話RPC命令相同。 默認值爲3600。設置爲零可禁止該日誌記錄。

REORG_LIMIT

鏈重組中可以處理的最大塊數。 ElectrumX爲levelDB中的許多塊保留了一些相當緊湊的撤消信息。 默認值是COIN和NET的函數; 對於比特幣主網,它是200。

EVENT_LOOP_POLICY

事件循環策略的名稱,用於替換默認的異步策略(如果有)。 目前僅接受uvloop,在這種情況下,您必須已安裝uvloop Python軟件包。

如果您不確定這意味着什麼,請使其保持不變。

DROP_CLIENT

設置正則表達式以根據客戶端的版本字符串斷開其連接。 例如,將版本從1.0降到1.2,請使用正則表達式1 \。[0-2] \。\ d +。

五. 資源使用限制

以下環境變量都是可選的,有助於限制服務器資源消耗並防止簡單的DoS。

ElectrumX中的地址訂閱非常便宜-每個地址訂閱消耗約160字節的內存並得到有效處理。我認爲以下兩個與訂閱相關的默認值較低,建議您提高它們。

MAX_SESSIONS

傳入連接的最大數量。一旦達到,TCP和SSL偵聽套接字將關閉,直到會話計數自然下降到限制的95%。默認爲1,000。

MAX_SEND

通過導線發送的響應消息的最大大小,以字節爲單位。默認爲1,000,000(AuxPoW幣除外,默認爲10,000,000)。小於350,000的值被視爲350,000,因爲標準的Electrum協議標頭“塊”請求幾乎那麼大。

Electrum協議的一個缺陷在於,必須立即或完全不提供地址歷史記錄,這顯然是濫用的途徑。在改進協議以允許增量歷史記錄請求之前,MAX_SEND是一個權宜之計。每個歷史記錄條目大約爲100個字節,因此默認值等於大約10,000個條目的歷史記錄限制,對於大多數合法用戶而言,這應該足夠了。如果您使用更高的默認值,請記住一個客戶端可以請求多個地址的歷史記錄。還要注意,由於每個原始字節在網絡上變爲2個十六進制ASCII字符,因此您可以爲客戶提供的最大原始交易量不到MAX_SEND的一半。比特幣主網上很少有超過500KB的交易。

COST_SOFT_LIMIT

COST_HARD_LIMIT

REQUEST_SLEEP

INITIAL_CONCURRENT

所有值都是整數。 COST_SOFT_LIMIT的默認值爲1,000,COST_HARD_LIMIT的默認值爲10,000,REQUEST_SLEEP的默認值爲2,500毫秒,INITIAL_CONCURRENT的默認值爲10。

服務器根據對它的處理所需資源的估計來爲每個請求定價。影響因素包括請求是否使用比特幣,使用多少帶寬以及對數據庫的打擊程度。

爲了設置單位的基礎,對具有2個或更少交易歷史的地址的blockchain.scripthash.subscribe()訂閱在考慮消耗的帶寬之前的成本爲1.0。 server.ping()的成本爲0.1。

當會話的總成本超過軟限制時,它的請求開始以兩種方式受到限制。首先,減少了服務器將同時處理的對該會話的請求數量。第二,每個請求在開始處理之前都會開始休眠。

在限制開始之前,服務器將同時處理多達INITIAL_CONCURRENT個請求,而不會休眠。隨着會話費用從COST_SOFT_LIMIT到COST_HARD_LIMIT的變化,併發性線性下降到零,每個請求的睡眠時間線性增加,直到REQUEST_SLEEP毫秒。達到硬限制後,會話將斷開連接。

爲了繼續提供非辱罵性會話,會話的成本會隨着時間的流逝逐漸降低。訂閱的服務成本是不斷增加的,因此,隨着訂閱數量的增加,衰減會更慢。

如果會話斷開連接,則ElectrumX繼續將其成本與其IP地址相關聯,因此,如果它立即重新連接,它將重新獲取其先前的成本分配。

服務器操作員應根據服務器負載嘗試不同的值。例如,不一定是真的。具有較低的軟限制,減少併發性和增加睡眠將有助於處理繁重的負載,因爲這還將增加服務器必須在內存中管理的請求的積壓。對於真正的連接,這也將帶來更糟糕的體驗。

BANDWIDTH_UNIT_COST

會話發送和接收的字節數,其成本爲1.0。

默認值爲5,000字節,這意味着分配給100KB響應的帶寬成本爲20。如果您的帶寬很便宜,則應提高此帶寬。

REQUEST_TIMEOUT

整數秒,默認爲30。如果由於請求限制或請求昂貴而導致請求花費比該響應更長的時間,則服務器將拒絕它,並向客戶端返回超時錯誤,指示服務器正忙。

這可以幫助避免在未處理的請求下積壓的大量積壓。

SESSION_TIMEOU

整數秒,默認爲600。未發送請求的時間超過此時間的會話將斷開連接。正常運行的客戶端應該在自上一個請求以來經過大約450秒後發送一個server.ping()請求,以避免斷開連接。

六. 節點發現

爲了響應server.peers.subscribe()RPC調用,ElectrumX將僅返回其最近已連接並驗證了基本功能的對等服務器。

如果您沒有運行Tor代理,則ElectrumX將無法連接到onion服務器對等端,在這種情況下,與其返回任何onion等端,不如將其退回到硬編碼列表中。

要爲傳入的客戶端提供全方位的onion服務器,您將需要運行Tor代理以供ElectrumX使用。

ElectrumX將默認執行對等發現,並向其他對等點進行通告。如果您的服務器是私有的,您可能希望禁用其中的一些功能。

TPEER_DISCOVERY

此環境變量不區分大小寫,默認爲on。

如果啓用,則ElectrumX偶爾會連接到並驗證其對等服務器網絡。

如果禁用,將禁用對等發現,並且將讀取並提供服務器的硬編碼默認列表。如果設置爲self,則禁用對等設備發現,並且服務器將僅在對等設備列表中返回自身。

PEER_ANNOUNCE

將此環境變量設置爲空可禁用自身通告。如果未定義或爲非空,ElectrumX將向對等方宣佈自己。

如果禁用了對等設備發現,則此環境變量無效,因爲ElectrumX僅在進行對等設備發現時發現對等設備的返回列表中不存在該對象時才向對等設備進行通告。

FORCE_PROXY

默認情況下,對等點發現是通過乾淨的Internet進行的。將此設置爲非空可強制通過代理完成對等方發現。如果您專門運行Tor服務並希望保持IP地址私有,這可能會很有用。

TOR_PROXY_HOST

Tor代理運行所在的主機。默認爲localhost。

如果您沒有運行Tor代理,則只需將此環境變量保留爲未定義狀態即可。

TOR_PROXY_PORT

Tor代理運行所在的端口。如果未設置,則ElectrumX將自動檢測在常規端口9050(Tor),9150(Tor瀏覽器捆綁包)和1080(Socks)上運行的任何代理。

BLACKLIST_URL

檢索列入黑名單的對等方列表的URL。如果未設置,則使用特定於Coin的默認值。

七. 緩存

如果從Genesis塊進行同步,則可以通過調整緩存大小來更改性能。僅大約每分鐘檢查一次高速緩存大小,因此高速緩存可能會超出指定的大小。而且,由於Python的開銷以及在刷新時leveldb佔用了大量內存,Python進程通常比緩存大小要胖得多。因此,我建議您不要將其設置爲超過可用物理RAM的60%:

CACHE_MB

要使用的緩存量(以MB爲單位)。默認值爲1200。

緩存的一部分保留用於未刷新的歷史記錄,該歷史記錄經常被寫出。批量用於緩存UTXO。

較大的緩存可能會稍微提高性能,因爲在索引期間會大量搜索UTXO緩存。但是,我在測試中沒有看到太大的好處將其推高,實際上性能開始下降,這可能是因爲LevelDB已經緩存,還有Python GC。

我不建議將其提高到2000以上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章