diff --git a/server.py b/server.py index 53c4f95a2c562507b4c78dad179957363f546372..f5325b629c7db67039cdedcbacdb631f132d038b 100644 --- a/server.py +++ b/server.py @@ -49,12 +49,13 @@ PUBLIC_PORT = BIND_PORT ID_SALT = "" ID_PASSWORD = "" BMA_HOSTS = ["g1.duniter.fr 443", "g1.duniter.org 443", "g1.presles.fr 443", "g1.cgeek.fr 443", "ts.g1.librelois.fr 443"] -MIX_INTERVAL = 60 +MIX_INTERVAL = 120 MIX_MIN_TXS = 5 # minimum amount of txs to mix MIX_REQ_AGE_MAX = 604800 # maximum mix request age before return to sender -PEER_INFO_INTERVAL = 60 # interval for renewing my peer document -PEER_SIG_AGE_MAX = 600 # max age of a peer document signature +PEER_INFO_INTERVAL = 600 # interval for renewing my peer document +PEER_SIG_AGE_MAX = 604800 # max age of a peer document signature PEER_DETECT_INTERVAL = 120 # interval for fetching peer list +CURRENCY = "g1" def send_response(client, code, resp, dataformat="ubjson"): if dataformat == "ubjson": @@ -179,6 +180,7 @@ def read_config(cdir, conf_overwrite={}): utils.logprint("Config: bad JSON => abort", utils.LOG_ERROR) exit(1) + conf.setdefault("currency", CURRENCY) conf.setdefault("server", {}) conf["server"].setdefault("bind_host", BIND_HOST) conf["server"].setdefault("bind_port", BIND_PORT) @@ -495,7 +497,7 @@ class ServerThread(Thread): if "new" in url: try: - new_peer = utils.Peer(content) + new_peer = utils.Peer(self.conf, content) except Exception as e: # TODO more specific exceptions send_response(client, "400 Bad Request", {"error": "bad_peer"}, resp_format) utils.logprint("Peer: bad peer: "+str(e), utils.LOG_ERROR) @@ -580,7 +582,7 @@ class ClientThread(Thread): continue try: - new_peer = utils.Peer(data["info"]) + new_peer = utils.Peer(self.conf, data["info"]) except Exception as e: print("Peer detection: info: "+str(e)) new_peers.setdefault(new_peer.hash, []) @@ -588,7 +590,7 @@ class ClientThread(Thread): for raw in data["peers"]: try: - new_peer = utils.Peer(raw) + new_peer = utils.Peer(self.conf, raw) except Exception as e: utils.logprint("Peer detection: "+str(e), utils.LOG_WARN) if new_peer.hash == self.local_peer.hash: @@ -829,7 +831,7 @@ def main(): # Load peers peers = {} db_peers = plyvel.DB(DIR+"/db_peers", create_if_missing=True) - utils.load_peers(db_peers, peers) + utils.load_peers(conf, db_peers, peers) # Load txs pool = [] @@ -933,12 +935,12 @@ if __name__ == "__main__": # Load peers peers = {} db_peers = plyvel.DB(DIR+"/db_peers", create_if_missing=True) - utils.load_peers(db_peers, peers) + utils.load_peers(conf, db_peers, peers) # Import peers for raw in new_peers: try: - new_peer = utils.Peer(raw) + new_peer = utils.Peer(conf, raw) except Exception as e: # TODO more specific exceptions print("Error: invalid peer data: "+str(e)) continue diff --git a/utils.py b/utils.py index a28a6e09cd0b5ddb569abbd8cc5fed2d32a5da11..0ee0ca18b42c5296f03f242204b9802182194a5f 100644 --- a/utils.py +++ b/utils.py @@ -126,7 +126,7 @@ def getargv(arg:str, default:str="", n:int=1, args:list=sys.argv) -> str: class Peer: VERSION = "1" - def __init__(self, raw:bytes): + def __init__(self, conf:dict, raw:bytes): self.rectime = time.time() self.raw = raw data = ubjson.loadb(raw) @@ -136,6 +136,7 @@ class Peer: # TODO try except # TODO tests + assert data["currency"] == conf["currency"] , "Not the same currency" self.doctype = data["doctype"] self.docver = data["docver"] @@ -156,6 +157,7 @@ class Peer: data = { "doctype": "peer", "docver": Peer.VERSION, + "currency": conf["currency"], "pubkey": keys.pubkey, "sigtime": time.time(), "host": [conf["server"]["public_host"], conf["server"]["public_port"]], @@ -168,11 +170,11 @@ class Peer: "raw": raw } raw = ubjson.dumpb(data) - return Peer(raw) + return Peer(conf, raw) -def load_peers(db_peers:plyvel.DB, peers:dict): +def load_peers(conf:dict, db_peers:plyvel.DB, peers:dict): for _, data in db_peers: - peer = Peer(data) + peer = Peer(conf, data) peers[peer.hash] = peer def save_peers(db_peers:plyvel.DB, peers:dict):