From 0f299842e15fd36bb76fad77e50876875306ef8a Mon Sep 17 00:00:00 2001 From: kdeme Date: Tue, 5 Nov 2019 13:47:47 +0100 Subject: [PATCH] Add switching between Status beta and staging fleet --- wrappers/libnimbus.h | 2 +- wrappers/libnimbus.nim | 37 +++++++++++++++++++---------- wrappers/wrapper_example.c | 2 +- wrappers/wrapper_example.go | 2 +- wrappers/wrapper_whisper_example.go | 2 +- 5 files changed, 28 insertions(+), 17 deletions(-) diff --git a/wrappers/libnimbus.h b/wrappers/libnimbus.h index 350323ad5..3d8428c90 100644 --- a/wrappers/libnimbus.h +++ b/wrappers/libnimbus.h @@ -62,7 +62,7 @@ void NimMain(); * When privkey is null, a new keypair will be generated. */ bool nimbus_start(uint16_t port, bool startListening, bool enableDiscovery, - double minPow, uint8_t* privkey); + double minPow, uint8_t* privkey, bool staging); /** Add peers to connect to - must be called after nimbus_start */ bool nimbus_add_peer(const char* nodeId); diff --git a/wrappers/libnimbus.nim b/wrappers/libnimbus.nim index fa16b2b29..90585fa7c 100644 --- a/wrappers/libnimbus.nim +++ b/wrappers/libnimbus.nim @@ -109,8 +109,24 @@ proc subscribeChannel( # except: # notice "no luck parsing", message=getCurrentExceptionMsg() +proc setBootNodes(nodes: openArray[string]): seq[ENode] = + var bootnode: ENode + result = newSeqOfCap[ENode](nodes.len) + for nodeId in nodes: + # For now we can just do assert as we only pass our own const arrays. + doAssert(initENode(nodeId, bootnode) == ENodeStatus.Success) + result.add(bootnode) + +proc connectToNodes(nodes: openArray[string]) = + for nodeId in nodes: + var whisperENode: ENode + # For now we can just do assert as we only pass our own const arrays. + doAssert(initENode(nodeId, whisperENode) == ENodeStatus.Success) + + traceAsyncErrors node.peerPool.connectToNode(newNode(whisperENode)) + proc nimbus_start(port: uint16, startListening: bool, enableDiscovery: bool, - minPow: float64, privateKey: ptr byte): bool {.exportc.} = + minPow: float64, privateKey: ptr byte, staging: bool): bool {.exportc.} = # TODO: any async calls can still create `Exception`, why? let address = Address( udpPort: port.Port, tcpPort: port.Port, ip: parseIpAddress("0.0.0.0")) @@ -134,20 +150,15 @@ proc nimbus_start(port: uint16, startListening: bool, enableDiscovery: bool, # var bloom: Bloom # node.protocolState(Whisper).config.bloom = bloom - var bootnodes: seq[ENode] = @[] - for nodeId in MainnetBootnodes: - var bootnode: ENode - discard initENode(nodeId, bootnode) - bootnodes.add(bootnode) + let bootnodes = if staging: setBootNodes(StatusBootNodesStaging) + else: setBootNodes(StatusBootNodes) - traceAsyncErrors node.connectToNetwork(bootnodes, startListening, enableDiscovery) - # main network has mostly non SHH nodes, so we connect directly to SHH nodes - for nodeId in WhisperNodes: - var whisperENode: ENode - discard initENode(nodeId, whisperENode) - var whisperNode = newNode(whisperENode) + traceAsyncErrors node.connectToNetwork(bootnodes, startListening, + enableDiscovery) - traceAsyncErrors node.peerPool.connectToNode(whisperNode) + # Connect to known Status Whisper fleet directly + if staging: connectToNodes(WhisperNodesStaging) + else: connectToNodes(WhisperNodes) result = true diff --git a/wrappers/wrapper_example.c b/wrappers/wrapper_example.c index ac2b79b06..74fcf9e22 100644 --- a/wrappers/wrapper_example.c +++ b/wrappers/wrapper_example.c @@ -22,7 +22,7 @@ int main(int argc, char* argv[]) { time_t lastmsg; NimMain(); - nimbus_start(30303, true, false, 0.002, NULL); + nimbus_start(30303, true, false, 0.002, NULL, false); nimbus_join_public_chat(channel, print_msg); diff --git a/wrappers/wrapper_example.go b/wrappers/wrapper_example.go index 1c6d854e5..cd64cbec5 100644 --- a/wrappers/wrapper_example.go +++ b/wrappers/wrapper_example.go @@ -39,7 +39,7 @@ func receiveHandler(msg *C.received_message) { func Start() { C.NimMain() fmt.Println("[nim-status] Start Nimbus") - C.nimbus_start(30306, true, false, 0.002, nil) + C.nimbus_start(30306, true, false, 0.002, nil, false) peer1 := "enode://2d3e27d7846564f9b964308038dfadd4076e4373ac938e020708ad8819fd4fd90e5eb8314140768f782db704cb313b60707b968f8b61108a6fecd705b041746d@192.168.0.33:30303" peer2 := "enode://4ea35352702027984a13274f241a56a47854a7fd4b3ba674a596cff917d3c825506431cf149f9f2312a293bb7c2b1cca55db742027090916d01529fe0729643b@206.189.243.178:443" diff --git a/wrappers/wrapper_whisper_example.go b/wrappers/wrapper_whisper_example.go index cb5975750..aeb90e9f1 100644 --- a/wrappers/wrapper_whisper_example.go +++ b/wrappers/wrapper_whisper_example.go @@ -58,7 +58,7 @@ func Start() { privKey := (*C.uint8_t)(C.CBytes(data)) defer C.free(unsafe.Pointer(privKey)) - if C.nimbus_start(30306, true, false, 0.002, privKey) == false { + if C.nimbus_start(30306, true, false, 0.002, privKey, false) == false { panic("Can't start nimbus") } }