@@ -149,6 +149,58 @@ export class grpcDriftClientAccountSubscriberV2 extends WebSocketDriftClientAcco
149149 ) ;
150150 }
151151
152+ override async setPerpOracleMap ( ) {
153+ const perpMarketsMap = this . perpMarketsSubscriber ?. getAccountDataMap ( ) ;
154+ const perpMarkets = Array . from ( perpMarketsMap . values ( ) ) ;
155+ const addOraclePromises = [ ] ;
156+ for ( const perpMarket of perpMarkets ) {
157+ if ( ! perpMarket || ! perpMarket . data ) {
158+ continue ;
159+ }
160+ const perpMarketAccount = perpMarket . data ;
161+ const perpMarketIndex = perpMarketAccount . marketIndex ;
162+ const oracle = perpMarketAccount . amm . oracle ;
163+ const oracleId = getOracleId ( oracle , perpMarket . data . amm . oracleSource ) ;
164+ if ( ! this . oracleSubscribers . has ( oracleId ) ) {
165+ addOraclePromises . push (
166+ this . addOracle ( {
167+ publicKey : oracle ,
168+ source : perpMarket . data . amm . oracleSource ,
169+ } )
170+ ) ;
171+ }
172+ this . perpOracleMap . set ( perpMarketIndex , oracle ) ;
173+ this . perpOracleStringMap . set ( perpMarketIndex , oracleId ) ;
174+ }
175+ await Promise . all ( addOraclePromises ) ;
176+ }
177+
178+ override async setSpotOracleMap ( ) {
179+ const spotMarketsMap = this . spotMarketsSubscriber ?. getAccountDataMap ( ) ;
180+ const spotMarkets = Array . from ( spotMarketsMap . values ( ) ) ;
181+ const addOraclePromises = [ ] ;
182+ for ( const spotMarket of spotMarkets ) {
183+ if ( ! spotMarket || ! spotMarket . data ) {
184+ continue ;
185+ }
186+ const spotMarketAccount = spotMarket . data ;
187+ const spotMarketIndex = spotMarketAccount . marketIndex ;
188+ const oracle = spotMarketAccount . oracle ;
189+ const oracleId = getOracleId ( oracle , spotMarketAccount . oracleSource ) ;
190+ if ( ! this . oracleSubscribers . has ( oracleId ) ) {
191+ addOraclePromises . push (
192+ this . addOracle ( {
193+ publicKey : oracle ,
194+ source : spotMarketAccount . oracleSource ,
195+ } )
196+ ) ;
197+ }
198+ this . spotOracleMap . set ( spotMarketIndex , oracle ) ;
199+ this . spotOracleStringMap . set ( spotMarketIndex , oracleId ) ;
200+ }
201+ await Promise . all ( addOraclePromises ) ;
202+ }
203+
152204 override async subscribeToPerpMarketAccounts ( ) : Promise < boolean > {
153205 const perpMarketIndexToAccountPubkeys : Array < [ number , PublicKey ] > =
154206 await Promise . all (
0 commit comments