Skip to content

Commit c8173fd

Browse files
committed
Refactor GlobalConfigCache to integrate listener-based change notifications and enhance validation logic. Remove unused ScopeMonitorServiceEntrypoint.
1 parent f75344d commit c8173fd

File tree

10 files changed

+351
-126
lines changed

10 files changed

+351
-126
lines changed

services/src/main/java/module-info.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
requires java.sql;
3030
requires com.zaxxer.hikari;
3131
requires org.postgresql.jdbc;
32+
requires java.desktop;
3233

3334
uses SqlDataSource.Factory;
3435
provides SqlDataSource.Factory with PostgresDataSourceFactory;

services/src/main/java/systems/glam/services/mints/AssetMetaContext.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,13 @@
77
import systems.glam.sdk.idl.programs.glam.config.gen.types.GlobalConfig;
88
import systems.glam.sdk.idl.programs.glam.config.gen.types.OracleSource;
99

10-
import java.util.Arrays;
11-
1210
public interface AssetMetaContext extends Comparable<AssetMetaContext>, DecimalInteger {
1311

14-
static AssetMetaContext create(final AssetMeta assetMeta) {
12+
static AssetMetaContext create(final int index, final AssetMeta assetMeta) {
1513
final var asset = assetMeta.asset();
1614
final var oracle = assetMeta.oracle();
1715
return new AssetMetaContextRecord(
16+
index,
1817
assetMeta.asset(),
1918
AccountMeta.createRead(asset),
2019
assetMeta.decimals(),
@@ -27,9 +26,16 @@ static AssetMetaContext create(final AssetMeta assetMeta) {
2726
}
2827

2928
static AssetMetaContext[] mapAssetMetas(final GlobalConfig globalConfig) {
30-
return Arrays.stream(globalConfig.assetMetas()).map(AssetMetaContext::create).toArray(AssetMetaContext[]::new);
29+
final var assetMetas = globalConfig.assetMetas();
30+
final var assetMetaContext = new AssetMetaContext[assetMetas.length];
31+
for (int i = 0; i < assetMetas.length; i++) {
32+
assetMetaContext[i] = AssetMetaContext.create(i, assetMetas[i]);
33+
}
34+
return assetMetaContext;
3135
}
3236

37+
int index();
38+
3339
PublicKey asset();
3440

3541
AccountMeta readAssetMint();

services/src/main/java/systems/glam/services/mints/AssetMetaContextRecord.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
import software.sava.core.accounts.meta.AccountMeta;
55
import systems.glam.sdk.idl.programs.glam.config.gen.types.OracleSource;
66

7-
public record AssetMetaContextRecord(PublicKey asset,
7+
public record AssetMetaContextRecord(int index,
8+
PublicKey asset,
89
AccountMeta readAssetMint,
910
int decimals,
1011
PublicKey oracle,
@@ -33,13 +34,15 @@ public int compareTo(final AssetMetaContext o) {
3334
public String toJson() {
3435
return String.format("""
3536
{
37+
"index": %d,
3638
"asset": "%s",
3739
"decimals": %d,
3840
"oracle": "%s",
3941
"oracleSource": "%s",
4042
"priority": %d,
4143
"maxAgeSeconds": %d
4244
}""",
45+
index,
4346
asset.toBase58(),
4447
decimals,
4548
oracle.toBase58(),

services/src/main/java/systems/glam/services/oracles/scope/ScopeMonitorServiceEntrypoint.java

Lines changed: 0 additions & 83 deletions
This file was deleted.

services/src/main/java/systems/glam/services/state/GlobalConfigCache.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ static CompletableFuture<GlobalConfigCache> initCache(final Path globalConfigFil
3939
final var globalConfig = GlobalConfig.read(globalConfigKey, data);
4040
final var assetMetaContexts = AssetMetaContext.mapAssetMetas(globalConfig);
4141
final var assetMetaMap = createMap(assetMetaContexts);
42-
final var globalConfigUpdate = new GlobalConfigCacheImpl.GlobalConfigUpdate(0, assetMetaContexts, data);
42+
final var globalConfigUpdate = new GlobalConfigUpdate(0, assetMetaContexts, data);
4343
final var cache = new GlobalConfigCacheImpl(
4444
globalConfigFilePath,
4545
configProgram, globalConfigKey,
@@ -69,7 +69,7 @@ static CompletableFuture<GlobalConfigCache> initCache(final Path globalConfigFil
6969
final var globalConfig = GlobalConfig.read(accountInfo.pubKey(), data);
7070
final var assetMetaContexts = AssetMetaContext.mapAssetMetas(globalConfig);
7171
final var assetMetaMap = createMapChecked(slot, assetMetaContexts, mintCache);
72-
final var globalConfigUpdate = new GlobalConfigCacheImpl.GlobalConfigUpdate(
72+
final var globalConfigUpdate = new GlobalConfigUpdate(
7373
slot, assetMetaContexts, data
7474
);
7575
persistGlobalConfig(globalConfigFilePath, data);
@@ -122,6 +122,8 @@ private static Map<PublicKey, AssetMetaContext[]> createMap(final AssetMetaConte
122122
return assetMetaMap;
123123
}
124124

125+
GlobalConfigUpdate globalConfig();
126+
125127
AssetMetaContext watchForMint(final PublicKey mint, final PublicKey stateAccount);
126128

127129
/**
@@ -147,4 +149,8 @@ private static Map<PublicKey, AssetMetaContext[]> createMap(final AssetMetaConte
147149
CompletableFuture<Void> initCache();
148150

149151
void subscribe(final SolanaRpcWebsocket websocket);
152+
153+
void subscribe(final GlobalConfigListener listener);
154+
155+
void unsubscribe(final GlobalConfigListener listener);
150156
}

0 commit comments

Comments
 (0)