From 50327c69d6d7acae7d3fc45a3c966aed3edfe8b0 Mon Sep 17 00:00:00 2001 From: Ali Behjati Date: Tue, 13 Dec 2022 11:50:14 +0000 Subject: [PATCH 1/3] [price-service] Make gap metrics more accurate --- third_party/pyth/price-service/src/listen.ts | 80 ++++++++++---------- 1 file changed, 39 insertions(+), 41 deletions(-) diff --git a/third_party/pyth/price-service/src/listen.ts b/third_party/pyth/price-service/src/listen.ts index 781302a267..ba487b72e2 100644 --- a/third_party/pyth/price-service/src/listen.ts +++ b/third_party/pyth/price-service/src/listen.ts @@ -155,6 +155,28 @@ export class Listener implements PriceStore { } } + isNewPriceInfo( + cachedInfo: PriceInfo | undefined, + observedInfo: PriceInfo + ): boolean { + if (cachedInfo == undefined) { + return true; + } + + if (cachedInfo.attestationTime < observedInfo.attestationTime) { + return true; + } + + if ( + cachedInfo.attestationTime == observedInfo.attestationTime && + cachedInfo.seqNum < observedInfo.seqNum + ) { + return true; + } + + return false; + } + async processVaa(vaa: Buffer) { const { parse_vaa } = await importCoreWasm(); @@ -184,55 +206,31 @@ export class Listener implements PriceStore { return; } - const isAnyPriceNew = batchAttestation.priceAttestations.some( - (priceAttestation) => { - const key = priceAttestation.priceId; - const lastAttestationTime = - this.priceFeedVaaMap.get(key)?.attestationTime; - return ( - lastAttestationTime === undefined || - lastAttestationTime < priceAttestation.attestationTime - ); - } - ); - - if (!isAnyPriceNew) { - return; - } - for (const priceAttestation of batchAttestation.priceAttestations) { const key = priceAttestation.priceId; - const lastAttestationTime = - this.priceFeedVaaMap.get(key)?.attestationTime; - - if ( - lastAttestationTime === undefined || - lastAttestationTime < priceAttestation.attestationTime - ) { - const priceFeed = priceAttestationToPriceFeed(priceAttestation); - const priceInfo = { - seqNum: parsedVaa.sequence, - vaa, - publishTime: priceAttestation.publishTime, - attestationTime: priceAttestation.attestationTime, - priceFeed, - emitterChainId: parsedVaa.emitter_chain, - priceServiceReceiveTime: Math.floor(new Date().getTime() / 1000), - }; + const priceFeed = priceAttestationToPriceFeed(priceAttestation); + const priceInfo = { + seqNum: parsedVaa.sequence, + vaa, + publishTime: priceAttestation.publishTime, + attestationTime: priceAttestation.attestationTime, + priceFeed, + emitterChainId: parsedVaa.emitter_chain, + priceServiceReceiveTime: Math.floor(new Date().getTime() / 1000), + }; + + const cachedPriceInfo = this.priceFeedVaaMap.get(key); + + if (this.isNewPriceInfo(cachedPriceInfo, priceInfo)) { this.priceFeedVaaMap.set(key, priceInfo); - if (lastAttestationTime !== undefined) { + if (cachedPriceInfo !== undefined) { this.promClient?.addPriceUpdatesAttestationTimeGap( - priceAttestation.attestationTime - lastAttestationTime + priceAttestation.attestationTime - cachedPriceInfo.attestationTime ); - } - - const lastPublishTime = this.priceFeedVaaMap.get(key)?.publishTime; - - if (lastPublishTime !== undefined) { this.promClient?.addPriceUpdatesPublishTimeGap( - priceAttestation.publishTime - lastPublishTime + priceAttestation.publishTime - cachedPriceInfo.publishTime ); } From d24ef2ebbd5d3b4abcc31791abb7d733103ca656 Mon Sep 17 00:00:00 2001 From: Ali Behjati Date: Tue, 13 Dec 2022 11:51:28 +0000 Subject: [PATCH 2/3] Bug fix --- third_party/pyth/price-service/src/listen.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/third_party/pyth/price-service/src/listen.ts b/third_party/pyth/price-service/src/listen.ts index ba487b72e2..85ba3fc12f 100644 --- a/third_party/pyth/price-service/src/listen.ts +++ b/third_party/pyth/price-service/src/listen.ts @@ -159,7 +159,7 @@ export class Listener implements PriceStore { cachedInfo: PriceInfo | undefined, observedInfo: PriceInfo ): boolean { - if (cachedInfo == undefined) { + if (cachedInfo === undefined) { return true; } @@ -168,7 +168,7 @@ export class Listener implements PriceStore { } if ( - cachedInfo.attestationTime == observedInfo.attestationTime && + cachedInfo.attestationTime === observedInfo.attestationTime && cachedInfo.seqNum < observedInfo.seqNum ) { return true; From ca33ce97538d8d510e8f58f2634819c78caee207 Mon Sep 17 00:00:00 2001 From: Ali Behjati Date: Tue, 13 Dec 2022 11:51:44 +0000 Subject: [PATCH 3/3] Bump version to 2.2.3 --- third_party/pyth/price-service/package-lock.json | 4 ++-- third_party/pyth/price-service/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/third_party/pyth/price-service/package-lock.json b/third_party/pyth/price-service/package-lock.json index f1c40d9c14..af0a70c76c 100644 --- a/third_party/pyth/price-service/package-lock.json +++ b/third_party/pyth/price-service/package-lock.json @@ -1,12 +1,12 @@ { "name": "@pythnetwork/pyth-price-service", - "version": "2.2.2", + "version": "2.2.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@pythnetwork/pyth-price-service", - "version": "2.2.2", + "version": "2.2.3", "license": "Apache-2.0", "dependencies": { "@certusone/wormhole-sdk": "^0.1.4", diff --git a/third_party/pyth/price-service/package.json b/third_party/pyth/price-service/package.json index bc3164d4e6..bd1ed15750 100644 --- a/third_party/pyth/price-service/package.json +++ b/third_party/pyth/price-service/package.json @@ -1,6 +1,6 @@ { "name": "@pythnetwork/pyth-price-service", - "version": "2.2.2", + "version": "2.2.3", "description": "Pyth Price Service", "main": "index.js", "scripts": {