UNPKG

@neo-one/node-protocol

Version:

NEO•ONE NEO node and consensus protocol.

66 lines (64 loc) 9.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const client_common_1 = require("@neo-one/client-common"); const node_core_1 = require("@neo-one/node-core"); const ip_address_1 = require("ip-address"); const BYTE_LENGTH = 16; class NetworkAddress { constructor({ host, port, timestamp, services }) { this.serializeWire = client_common_1.createSerializeWire(this.serializeWireBase.bind(this)); this.host = host; this.port = port; this.timestamp = timestamp; this.services = services; } static deserializeWireBase({ reader }) { const timestamp = reader.readUInt32LE(); const services = reader.readUInt64LE(); const address = ip_address_1.Address6.fromByteArray([...reader.readBytes(16)]); const port = reader.readUInt16BE(); const canonical = address == undefined ? '' : address.canonicalForm(); return new this({ timestamp, services, host: canonical == undefined ? '' : canonical, port, }); } static deserializeWire(options) { return this.deserializeWireBase({ context: options.context, reader: new node_core_1.BinaryReader(options.buffer), }); } static isValid(host) { const address = this.getAddress6(host); if (address == undefined) { return false; } try { address.toByteArray(); return true; } catch (_a) { return false; } } static getAddress6(host) { const parts = host.split('.'); return parts.length === 4 ? ip_address_1.Address6.fromAddress4(host) : new ip_address_1.Address6(host); } serializeWireBase(writer) { const address = NetworkAddress.getAddress6(this.host); if (address == undefined) { throw new client_common_1.InvalidFormatError('Network IP address undefined'); } writer.writeUInt32LE(this.timestamp); writer.writeUInt64LE(this.services); const addressSerialized = Buffer.from(address.toByteArray()); writer.writeBytes(Buffer.concat([Buffer.alloc(BYTE_LENGTH - addressSerialized.length, 0), addressSerialized])); writer.writeUInt16BE(this.port); } } exports.NetworkAddress = NetworkAddress; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk5ldHdvcmtBZGRyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMERBTWdDO0FBQ2hDLGtEQUFzRztBQUV0RywyQ0FBc0M7QUFTdEMsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBRXZCLE1BQWEsY0FBYztJQW1EekIsWUFBbUIsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQXFCO1FBRnpELGtCQUFhLEdBQWtCLG1DQUFtQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUdwRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBdkRNLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLE1BQU0sRUFBOEI7UUFDdEUsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN2QyxNQUFNLE9BQU8sR0FBRyxxQkFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFnQyxDQUFDO1FBQ2pHLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVuQyxNQUFNLFNBQVMsR0FBRyxPQUFPLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQWdDLENBQUM7UUFFckcsT0FBTyxJQUFJLElBQUksQ0FBQztZQUNkLFNBQVM7WUFDVCxRQUFRO1lBQ1IsSUFBSSxFQUFFLFNBQVMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUM3QyxJQUFJO1NBQ0wsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE1BQU0sQ0FBQyxlQUFlLENBQUMsT0FBK0I7UUFDM0QsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDOUIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLE1BQU0sRUFBRSxJQUFJLHdCQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztTQUN6QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFZO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSxPQUFPLElBQUksU0FBUyxFQUFFO1lBQ3hCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJO1lBQ0YsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBRXRCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFBQyxXQUFNO1lBQ04sT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFFTSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQVk7UUFDcEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU5QixPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxxQkFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxxQkFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFlTSxpQkFBaUIsQ0FBQyxNQUFvQjtRQUMzQyxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RCxJQUFJLE9BQU8sSUFBSSxTQUFTLEVBQUU7WUFDeEIsTUFBTSxJQUFJLGtDQUFrQixDQUFDLDhCQUE4QixDQUFDLENBQUM7U0FDOUQ7UUFDRCxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDN0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9HLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7Q0FDRjtBQXJFRCx3Q0FxRUMiLCJmaWxlIjoibmVvLW9uZS1ub2RlLXByb3RvY29sL3NyYy9wYXlsb2FkL05ldHdvcmtBZGRyZXNzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQmluYXJ5V3JpdGVyLFxuICBjcmVhdGVTZXJpYWxpemVXaXJlLFxuICBJbnZhbGlkRm9ybWF0RXJyb3IsXG4gIFNlcmlhbGl6YWJsZVdpcmUsXG4gIFNlcmlhbGl6ZVdpcmUsXG59IGZyb20gJ0BuZW8tb25lL2NsaWVudC1jb21tb24nO1xuaW1wb3J0IHsgQmluYXJ5UmVhZGVyLCBEZXNlcmlhbGl6ZVdpcmVCYXNlT3B0aW9ucywgRGVzZXJpYWxpemVXaXJlT3B0aW9ucyB9IGZyb20gJ0BuZW8tb25lL25vZGUtY29yZSc7XG5pbXBvcnQgeyBCTiB9IGZyb20gJ2JuLmpzJztcbmltcG9ydCB7IEFkZHJlc3M2IH0gZnJvbSAnaXAtYWRkcmVzcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya0FkZHJlc3NBZGQge1xuICByZWFkb25seSBob3N0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgdGltZXN0YW1wOiBudW1iZXI7XG4gIHJlYWRvbmx5IHNlcnZpY2VzOiBCTjtcbn1cblxuY29uc3QgQllURV9MRU5HVEggPSAxNjtcblxuZXhwb3J0IGNsYXNzIE5ldHdvcmtBZGRyZXNzIGltcGxlbWVudHMgU2VyaWFsaXphYmxlV2lyZTxOZXR3b3JrQWRkcmVzcz4ge1xuICBwdWJsaWMgc3RhdGljIGRlc2VyaWFsaXplV2lyZUJhc2UoeyByZWFkZXIgfTogRGVzZXJpYWxpemVXaXJlQmFzZU9wdGlvbnMpOiBOZXR3b3JrQWRkcmVzcyB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gcmVhZGVyLnJlYWRVSW50MzJMRSgpO1xuICAgIGNvbnN0IHNlcnZpY2VzID0gcmVhZGVyLnJlYWRVSW50NjRMRSgpO1xuICAgIGNvbnN0IGFkZHJlc3MgPSBBZGRyZXNzNi5mcm9tQnl0ZUFycmF5KFsuLi5yZWFkZXIucmVhZEJ5dGVzKDE2KV0pIGFzIEFkZHJlc3M2IHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgICBjb25zdCBwb3J0ID0gcmVhZGVyLnJlYWRVSW50MTZCRSgpO1xuXG4gICAgY29uc3QgY2Fub25pY2FsID0gYWRkcmVzcyA9PSB1bmRlZmluZWQgPyAnJyA6IChhZGRyZXNzLmNhbm9uaWNhbEZvcm0oKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTtcblxuICAgIHJldHVybiBuZXcgdGhpcyh7XG4gICAgICB0aW1lc3RhbXAsXG4gICAgICBzZXJ2aWNlcyxcbiAgICAgIGhvc3Q6IGNhbm9uaWNhbCA9PSB1bmRlZmluZWQgPyAnJyA6IGNhbm9uaWNhbCxcbiAgICAgIHBvcnQsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGRlc2VyaWFsaXplV2lyZShvcHRpb25zOiBEZXNlcmlhbGl6ZVdpcmVPcHRpb25zKTogTmV0d29ya0FkZHJlc3Mge1xuICAgIHJldHVybiB0aGlzLmRlc2VyaWFsaXplV2lyZUJhc2Uoe1xuICAgICAgY29udGV4dDogb3B0aW9ucy5jb250ZXh0LFxuICAgICAgcmVhZGVyOiBuZXcgQmluYXJ5UmVhZGVyKG9wdGlvbnMuYnVmZmVyKSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNWYWxpZChob3N0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBhZGRyZXNzID0gdGhpcy5nZXRBZGRyZXNzNihob3N0KTtcbiAgICBpZiAoYWRkcmVzcyA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYWRkcmVzcy50b0J5dGVBcnJheSgpO1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldEFkZHJlc3M2KGhvc3Q6IHN0cmluZyk6IEFkZHJlc3M2IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcGFydHMgPSBob3N0LnNwbGl0KCcuJyk7XG5cbiAgICByZXR1cm4gcGFydHMubGVuZ3RoID09PSA0ID8gQWRkcmVzczYuZnJvbUFkZHJlc3M0KGhvc3QpIDogbmV3IEFkZHJlc3M2KGhvc3QpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGhvc3Q6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgcHVibGljIHJlYWRvbmx5IHRpbWVzdGFtcDogbnVtYmVyO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZXM6IEJOO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VyaWFsaXplV2lyZTogU2VyaWFsaXplV2lyZSA9IGNyZWF0ZVNlcmlhbGl6ZVdpcmUodGhpcy5zZXJpYWxpemVXaXJlQmFzZS5iaW5kKHRoaXMpKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoeyBob3N0LCBwb3J0LCB0aW1lc3RhbXAsIHNlcnZpY2VzIH06IE5ldHdvcmtBZGRyZXNzQWRkKSB7XG4gICAgdGhpcy5ob3N0ID0gaG9zdDtcbiAgICB0aGlzLnBvcnQgPSBwb3J0O1xuICAgIHRoaXMudGltZXN0YW1wID0gdGltZXN0YW1wO1xuICAgIHRoaXMuc2VydmljZXMgPSBzZXJ2aWNlcztcbiAgfVxuXG4gIHB1YmxpYyBzZXJpYWxpemVXaXJlQmFzZSh3cml0ZXI6IEJpbmFyeVdyaXRlcik6IHZvaWQge1xuICAgIGNvbnN0IGFkZHJlc3MgPSBOZXR3b3JrQWRkcmVzcy5nZXRBZGRyZXNzNih0aGlzLmhvc3QpO1xuICAgIGlmIChhZGRyZXNzID09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRGb3JtYXRFcnJvcignTmV0d29yayBJUCBhZGRyZXNzIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICB3cml0ZXIud3JpdGVVSW50MzJMRSh0aGlzLnRpbWVzdGFtcCk7XG4gICAgd3JpdGVyLndyaXRlVUludDY0TEUodGhpcy5zZXJ2aWNlcyk7XG4gICAgY29uc3QgYWRkcmVzc1NlcmlhbGl6ZWQgPSBCdWZmZXIuZnJvbShhZGRyZXNzLnRvQnl0ZUFycmF5KCkpO1xuICAgIHdyaXRlci53cml0ZUJ5dGVzKEJ1ZmZlci5jb25jYXQoW0J1ZmZlci5hbGxvYyhCWVRFX0xFTkdUSCAtIGFkZHJlc3NTZXJpYWxpemVkLmxlbmd0aCwgMCksIGFkZHJlc3NTZXJpYWxpemVkXSkpO1xuICAgIHdyaXRlci53cml0ZVVJbnQxNkJFKHRoaXMucG9ydCk7XG4gIH1cbn1cbiJdfQ==