From 4e26e0fe964d673a7d67c1c0fb4fa3cd371b470d Mon Sep 17 00:00:00 2001 From: Neil Booth Date: Sat, 26 Nov 2016 14:51:31 +0900 Subject: [PATCH] Bump default value of MAX_SEND to 1m bytes. Otherwise historic large txs could not be served to clients. --- RELEASE-NOTES | 8 ++++++++ docs/ENV-NOTES | 16 +++++++++------- server/env.py | 2 +- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index b1ff9c0..91d8b57 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -1,3 +1,11 @@ +version 0.7.11 +-------------- + +- increased MAX_SEND default value to 1 million bytes so as to be able + to serve large historical transactions of up to 500K in size. The + MAX_SEND floor remains at 350,000 bytes so you can reduct it if you + wish. + version 0.7.10 -------------- diff --git a/docs/ENV-NOTES b/docs/ENV-NOTES index e6c2926..85616d0 100644 --- a/docs/ENV-NOTES +++ b/docs/ENV-NOTES @@ -45,20 +45,22 @@ each and are processed efficiently. I feel the defaults are low and encourage you to raise them. MAX_SEND - maximum size of a response message to send over the wire, - in bytes. Defaults to 350,000 and will treat smaller - values as the same because standard Electrum protocol - header chunk requests are nearly that large. + in bytes. Defaults to 1,000,000 and will treat values + smaller than 350,000 as 350,000 because standard Electrum + protocol header chunk requests are almost that large. The Electrum protocol has a flaw in that address histories must be served all at once or not at all, an obvious avenue for abuse. MAX_SEND is a stop-gap until the protocol is improved to admit incremental history requests. Each history entry is appoximately 100 bytes so the default is - equivalent to a history limit of around 3,500 + equivalent to a history limit of around 10,000 entries, which should be ample for most legitimate - users. Increasing by a single-digit factor is - likely fine but bear in mind one client can request - history for multiple addresses. + users. If you increase this bear in mind one client + can request history for multiple addresses. Also, + the largest raw transaction you will be able to serve + to a client is just under half of MAX_SEND, as each raw + byte becomes 2 hexadecimal ASCII characters on the wire. MAX_SUBS - maximum number of address subscriptions across all sessions. Defaults to 250,000. MAX_SESSION_SUBS - maximum number of address subscriptions permitted to a diff --git a/server/env.py b/server/env.py index 4c6716e..6160cde 100644 --- a/server/env.py +++ b/server/env.py @@ -45,7 +45,7 @@ class Env(LoggedClass): self.donation_address = self.default('DONATION_ADDRESS', '') self.db_engine = self.default('DB_ENGINE', 'leveldb') # Server limits to help prevent DoS - self.max_send = self.integer('MAX_SEND', 250000) + self.max_send = self.integer('MAX_SEND', 1000000) self.max_subs = self.integer('MAX_SUBS', 250000) self.max_session_subs = self.integer('MAX_SESSION_SUBS', 50000) # IRC