From 865c176c66c4dd19e0a3e589ff425bbda0df04fc Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Sat, 5 Oct 2024 21:12:22 -0400 Subject: [PATCH 1/2] chore: update sdk --- dig.crt | 19 ---------- dig.key | 28 --------------- src/blockchain/FullNodePeer.ts | 65 ++++++++++++++++++++++++++++++++-- src/utils/PeerRanker.ts | 3 -- 4 files changed, 62 insertions(+), 53 deletions(-) delete mode 100644 dig.crt delete mode 100644 dig.key diff --git a/dig.crt b/dig.crt deleted file mode 100644 index 73a2f53..0000000 --- a/dig.crt +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDLDCCAhSgAwIBAgIUP/RkfZQ+VLvSfQ2qOf7peUnDd/gwDQYJKoZIhvcNAQEL -BQAwRDENMAsGA1UECgwEQ2hpYTEQMA4GA1UEAwwHQ2hpYSBDQTEhMB8GA1UECwwY -T3JnYW5pYyBGYXJtaW5nIERpdmlzaW9uMCAXDTI0MTAwNDE4MzQzNVoYDzIxMDAw -ODAyMDAwMDAwWjBBMQ0wCwYDVQQDDARDaGlhMQ0wCwYDVQQKDARDaGlhMSEwHwYD -VQQLDBhPcmdhbmljIEZhcm1pbmcgRGl2aXNpb24wggEiMA0GCSqGSIb3DQEBAQUA -A4IBDwAwggEKAoIBAQCqvzy6I/4sgmPLLA78WVnmbO63PYS/E0EMNFP/OBi3/4ci -XnsYzmXnLUgmvi/C5OJiJz8OKKC4sh3GJ1hZxqDDjwr8l2w4mL94IqzA9cvRLSuj -KlJSlLBk3W9DBat/MGIgFp2bGyIn7EeRC/kg6AChuvWhuQ5LgIB9zjIkIaeIH5Pb -meQEsNHGtnECO/RwXJ/Md//AlEmX70pwdfXaD83aXjacX/iSsIzzfZ3T6Y0DyncT -oC+b/HpFsWCq5l72AKgRsn0zuh9gKYw1EjremRRhex/vEGoidncuVyS2Q7gaU+Zs -6mXKUTYN10C/ffLyaY0j5HtrTAnRu+Sr2SxPqjErAgMBAAGjFzAVMBMGA1UdEQQM -MAqCCGNoaWEubmV0MA0GCSqGSIb3DQEBCwUAA4IBAQAQ+8jR1tx1lTOpT6dkH8cD -gLU/I/r2kMehkAVYPCZA2cASlNN1wW/TTfI+lmXDl93XqhLPVuwDXPUcDK/1gIEq -NtJxBHBgCY4obdiYYWugV9XjwDoUCkqFNLiHBenUsFab6CHTQBh2EwI85bnstyl0 -vyEpeC6bLcCWkhGMX6pVUEGQ1vM6FsxkS/ViGPvLDXTHNRfllHyqvFx/tOwP19cL -1gmuFFBQ1YEKusJ72eqWgmOL/GB/Zwgk1WeTtzhe7uK/HQdzL8s4Bdh/vcs+c8pH -pMU+AuxVxBuyhj5XXZpzXt8hoSI0VWL6NNK/AUx7d7hbEsAVB7do7LlqUyWm4GUl ------END CERTIFICATE----- diff --git a/dig.key b/dig.key deleted file mode 100644 index 0e91a50..0000000 --- a/dig.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCqvzy6I/4sgmPL -LA78WVnmbO63PYS/E0EMNFP/OBi3/4ciXnsYzmXnLUgmvi/C5OJiJz8OKKC4sh3G -J1hZxqDDjwr8l2w4mL94IqzA9cvRLSujKlJSlLBk3W9DBat/MGIgFp2bGyIn7EeR -C/kg6AChuvWhuQ5LgIB9zjIkIaeIH5PbmeQEsNHGtnECO/RwXJ/Md//AlEmX70pw -dfXaD83aXjacX/iSsIzzfZ3T6Y0DyncToC+b/HpFsWCq5l72AKgRsn0zuh9gKYw1 -EjremRRhex/vEGoidncuVyS2Q7gaU+Zs6mXKUTYN10C/ffLyaY0j5HtrTAnRu+Sr -2SxPqjErAgMBAAECggEAThMZ4od4vsN0fD+OLqdwqyOeWB2CKJjWQo1e5zGwY9os -4XNQWDxwbi/PcR+/2R8twPHvLDs5mpqfcK8nAA4KDsHGpU9cBdkanAVG9withN1h -ub8tW2Nv8P8r0/qwu3zVMZUFxhm3GYg6BUHzTa+oMku565QhzDZbCquRU+Irp9sA -rZ64MVlqG3rfRz8FdTM3TSNXhX1hcwuXFSWxP9LKnm7CNubKnNHYGtQHsvIrnY3s -C3M/T8tGBKnuVew+jKBjDDz518Bdmtwmh1ccX7WHX0aYVYNoXvZaGlUTEyVLCZX3 -D/hoTf8FzCSFOy0qH0nPgT9lNopho+eOp+QEVZTDWQKBgQDjn5kY4hCu2WNk2TxA -E6QIan6ih2EnYdMyrzNHrOX/sTi9iufvOA6yi/P6Ph7mALBdDhfJqFCEZnSqBiN+ -xTkPqqySyq1uy+gToE/tbpqSWZPUXMyNoc6E85jaRX15vngxVNiTOzJlEoykxn/n -1Ng0pscqKBwvC2o9nf2O9gt9HQKBgQDACHp+rV8SM4dbUOqddQ208jIMTuHMf56d -tzmE6R6/S2HmDy3siMAjRKgSft9hfDUo7x07UsF/jkUEWXpNHIiwfwLJ0ElkMCd0 -gIQLpsVfmveFa/qQ0cEp7kacuOOT6CE9XBMEIQtkVXCuV5L3Xo+5bC8Fx4jMyayw -CYm9PCe85wKBgQC50QOt6H4t/pDBNwWUWXRC2ozeKR4KhDVg3t1B2cc4YHgtY0PL -aTu2TcGxuxyGLnHKxUJuANUaAHmkgrZfOqlGPNH8UzAZjqO5wdj9vpi4eB/R8J+b -z0dECYfyR2ATDoYX32edaWnOUMI3kUPBAWQuNyfHJk87qFnmSx8+oWTnkQKBgQCf -VemdtmjOB2dmQ2uIHpmy68rPH5yHO9T2dBMLzwouG3Qtmaa3Pnh+SvdR8WeT0aWi -Q1Tz5iSbnAZ0J3ItDWH1YE2F+ocK1FHIfuIRcN0QCNscH44WH5SxH/4DB/38uXzr -FrzIjkqPg70tS4isLBABAFy75OYDVcstfZyGIaWvPQKBgQCTgp5CX8cGiFD5nJ3k -2qdWSOB/160MdV7EH/FUrzpx/S3mrB+JvlK0J9ei6NH+SUvB7pLHcjzBCHso8h62 -nTzhHyYTo7mFbIOEFhU+Y386EMfIQSplM36a+ZxXC6r+Xz2QyWO4Yh6eI+eS050n -gK+RBgUP/CyZFqG4I5ucWATdFQ== ------END PRIVATE KEY----- diff --git a/src/blockchain/FullNodePeer.ts b/src/blockchain/FullNodePeer.ts index f1212fb..299f2a8 100644 --- a/src/blockchain/FullNodePeer.ts +++ b/src/blockchain/FullNodePeer.ts @@ -87,7 +87,7 @@ export class FullNodePeer { if (this.peer) return; // Already initialized try { - const bestPeer = await FullNodePeer.getBestPeer(); + const bestPeer = await this.getBestPeer(); this.peer = bestPeer; FullNodePeer.instance = this; // Assign the initialized instance } catch (error: any) { @@ -335,7 +335,7 @@ export class FullNodePeer { * Connects to the best available peer based on weighted selection and reliability. * @returns {Promise} The connected Peer instance. */ - private static async getBestPeer(): Promise { + private async getBestPeer(): Promise { const now = Date.now(); // Refresh cachedPeer if expired @@ -405,13 +405,72 @@ export class FullNodePeer { // Initialize rate limiter for this peer FullNodePeer.peerLimiters.set(selectedPeerIP, limiter); + const proxiedPeer = this.createPeerProxy(peer, selectedPeerIP); // Cache the peer FullNodePeer.cachedPeer = { peer: peer, timestamp: now }; console.log(`Using Fullnode Peer: ${selectedPeerIP}`); - return peer; + return proxiedPeer; + } + + private createPeerProxy(peer: Peer, peerIP: string): Peer { + return new Proxy(peer, { + get: (target, prop) => { + const originalMethod = (target as any)[prop]; + + if (typeof originalMethod === "function") { + return async (...args: any[]) => { + let timeoutId: NodeJS.Timeout | undefined; + + // Start the timeout to forget the peer after 1 minute + const timeoutPromise = new Promise((_, reject) => { + timeoutId = setTimeout(() => { + FullNodePeer.cachedPeer = null; + reject( + new Error("Operation timed out. Reconnecting to a new peer.") + ); + }, 60000); // 1 minute + }); + + try { + // Run the original method and race it against the timeout + const result = await Promise.race([ + originalMethod.apply(target, args), + timeoutPromise, + ]); + + // Clear the timeout if the operation succeeded + if (timeoutId) { + clearTimeout(timeoutId); + } + + return result; + } catch (error: any) { + // If the error is WebSocket-related or timeout, reset the peer + if ( + error.message.includes("WebSocket") || + error.message.includes("Operation timed out") + ) { + FullNodePeer.cachedPeer = null; + // @ts-ignore + FullNodePeer.memoizedFetchNewPeerIPs.cache.clear(); + + console.info( + `Fullnode Peer error, reconnecting to a new peer...` + ); + this.handlePeerDisconnection(peerIP); + const newPeer = await this.getBestPeer(); + return (newPeer as any)[prop](...args); + } + throw error; + } + }; + } + return originalMethod; + }, + }); } /** diff --git a/src/utils/PeerRanker.ts b/src/utils/PeerRanker.ts index 4c0ae01..fe6b50b 100644 --- a/src/utils/PeerRanker.ts +++ b/src/utils/PeerRanker.ts @@ -4,9 +4,6 @@ import https from 'https'; import { getOrCreateSSLCerts } from './ssl'; import { asyncPool } from './promiseUtils'; -/** - * Interface representing the metrics of a peer. - */ export interface PeerMetrics { ip: string; latency: number; // in milliseconds From 0b7ad42a353e91214ce3a5192e24b5880f4aed60 Mon Sep 17 00:00:00 2001 From: Michael Taylor Date: Sat, 5 Oct 2024 21:12:46 -0400 Subject: [PATCH 2/2] chore(release): 0.0.1-alpha.148 --- CHANGELOG.md | 2 ++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 05d21b0..f0cfee7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [0.0.1-alpha.148](https://github.com/DIG-Network/dig-chia-sdk/compare/v0.0.1-alpha.147...v0.0.1-alpha.148) (2024-10-06) + ### [0.0.1-alpha.147](https://github.com/DIG-Network/dig-chia-sdk/compare/v0.0.1-alpha.146...v0.0.1-alpha.147) (2024-10-06) ### [0.0.1-alpha.146](https://github.com/DIG-Network/dig-chia-sdk/compare/v0.0.1-alpha.145...v0.0.1-alpha.146) (2024-10-06) diff --git a/package-lock.json b/package-lock.json index 75dea4d..5e0704d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@dignetwork/dig-sdk", - "version": "0.0.1-alpha.147", + "version": "0.0.1-alpha.148", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@dignetwork/dig-sdk", - "version": "0.0.1-alpha.147", + "version": "0.0.1-alpha.148", "license": "ISC", "dependencies": { "@dignetwork/datalayer-driver": "^0.1.29", diff --git a/package.json b/package.json index 339aa1d..9d29fb0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@dignetwork/dig-sdk", - "version": "0.0.1-alpha.147", + "version": "0.0.1-alpha.148", "description": "", "type": "commonjs", "main": "./dist/index.js",