def from_address(cls, currency, address, port): """ Factory method to get a node from a given address :param str currency: The node currency. None if we don't know\ the currency it should have, for example if its the first one we add :param str address: The node address :param int port: The node port :return: A new node :rtype: sakia.core.net.Node """ peer_data = yield from bma.network.Peering(ConnectionHandler(address, port)).get() peer = Peer.from_signed_raw("{0}{1}\n".format(peer_data['raw'], peer_data['signature'])) if currency is not None: if peer.currency != currency: raise InvalidNodeCurrency(peer.currency, currency) node = cls(peer.currency, [Endpoint.from_inline(e.inline()) for e in peer.endpoints], "", peer.pubkey, None, Node.ONLINE, time.time(), {'root': "", 'leaves': []}, "", "", 0) logging.debug("Node from address : {:}".format(str(node))) return node
def from_json(cls, currency, data): endpoints = [] uid = "" pubkey = "" software = "" version = "" fork_window = 0 block = None last_change = time.time() state = Node.OFFLINE logging.debug(data) for endpoint_data in data['endpoints']: endpoints.append(Endpoint.from_inline(endpoint_data)) if currency in data: currency = data['currency'] if 'uid' in data: uid = data['uid'] if 'pubkey' in data: pubkey = data['pubkey'] if 'last_change' in data: last_change = data['last_change'] if 'block' in data: block = data['block'] if 'state' in data: state = data['state'] if 'software' in data: software = data['software'] if 'version' in data: version = data['version'] if 'fork_window' in data: fork_window = data['fork_window'] node = cls(currency, endpoints, uid, pubkey, block, state, last_change, {'root': "", 'leaves': []}, software, version, fork_window) logging.debug("Node from json : {:}".format(str(node))) return node
def from_json(cls, currency, data): endpoints = [] uid = "" pubkey = "" block = 0 last_change = time.time() state = Node.ONLINE software = '' version = '' logging.debug(data) for endpoint_data in data['endpoints']: endpoints.append(Endpoint.from_inline(endpoint_data)) if currency in data: currency = data['currency'] if 'uid' in data: uid = data['uid'] if 'pubkey' in data: pubkey = data['pubkey'] if 'last_change' in data: last_change = data['last_change'] if 'block' in data: block = data['block'] if 'state' in data: state = data['state'] else: logging.debug("Error : no state in node") if 'software' in data: software = data['software'] else: logging.debug("Error : no software in node") if 'version' in data: version = data['version'] else: logging.debug("Error : no version in node") node = cls(currency, endpoints, uid, pubkey, block, state, last_change, software, version) logging.debug("Node from json : {:}".format(str(node))) return node
def from_json(cls, currency, data, file_version): """ Loads a node from json data :param str currency: the currency of the community :param dict data: the json data of the node :param NormalizedVersion file_version: the version of the file :return: A new node :rtype: Node """ endpoints = [] uid = "" pubkey = "" software = "" version = "" fork_window = 0 block = None last_change = time.time() state = Node.OFFLINE if 'uid' in data: uid = data['uid'] if 'pubkey' in data: pubkey = data['pubkey'] if 'last_change' in data: last_change = data['last_change'] if 'block' in data: block = data['block'] if 'state' in data: state = data['state'] if 'software' in data: software = data['software'] if 'version' in data: version = data['version'] if 'fork_window' in data: fork_window = data['fork_window'] if parse_version("0.11") <= file_version < parse_version("0.12dev1") : for endpoint_data in data['endpoints']: endpoints.append(Endpoint.from_inline(endpoint_data)) if currency in data: currency = data['currency'] peer = Peer("1", currency, pubkey, BlockId(0, Block.Empty_Hash), endpoints, "SOMEFAKESIGNATURE") else: peer = Peer.from_signed_raw(data['peer']) node = cls(peer, uid, pubkey, block, state, last_change, {'root': "", 'leaves': []}, software, version, fork_window) logging.debug("Node from json : {:}".format(str(node))) return node