SHA256
67 lines
3.8 KiB
Java
67 lines
3.8 KiB
Java
package server.archive;
|
|
|
|
import utils.config.AppConfig;
|
|
|
|
import java.nio.file.Path;
|
|
|
|
/** Configuration of the new per-user-block ANS-104 Arweave transport. */
|
|
public record ArweaveBlocksConfig(
|
|
boolean publishEnabled,
|
|
int publishIntervalMinutes,
|
|
int publishMaxItems,
|
|
long publishMaxBundleBytes,
|
|
String publishGateway,
|
|
Path walletJwkPath,
|
|
int minConfirmations,
|
|
int confirmPollSeconds,
|
|
int confirmTimeoutMinutes,
|
|
boolean syncEnabled,
|
|
int syncIntervalMinutes,
|
|
int syncPageSize,
|
|
int syncQueueBatchSize,
|
|
long syncStartBlockHeight,
|
|
long syncMaxRootBundleBytes,
|
|
String syncGateway
|
|
) {
|
|
public static final String TEST_TAG_NAME = "App";
|
|
public static final String TEST_TAG_VALUE = "test5590";
|
|
public static final String CHANNEL_TAG_NAME = "c";
|
|
|
|
public static ArweaveBlocksConfig load() {
|
|
AppConfig c = AppConfig.getInstance();
|
|
return new ArweaveBlocksConfig(
|
|
c.getBoolean("arweave.blocks.publish.enabled", false),
|
|
positive(c.getInt("arweave.blocks.publish.intervalMinutes", 15), "publish.intervalMinutes"),
|
|
positive(c.getInt("arweave.blocks.publish.maxItems", 10_000), "publish.maxItems"),
|
|
positiveLong(parseLong(c.getParam("arweave.blocks.publish.maxBundleBytes"), 128L * 1024 * 1024), "publish.maxBundleBytes"),
|
|
orDefault(c.getParam("arweave.blocks.publish.gateway"), "https://arweave.net"),
|
|
optionalPath(c.getParam("arweave.blocks.publish.walletJwkPath")),
|
|
nonNegative(c.getInt("arweave.blocks.publish.minConfirmations", 0), "publish.minConfirmations"),
|
|
positive(c.getInt("arweave.blocks.publish.confirmPollSeconds", 30), "publish.confirmPollSeconds"),
|
|
positive(c.getInt("arweave.blocks.publish.confirmTimeoutMinutes", 180), "publish.confirmTimeoutMinutes"),
|
|
c.getBoolean("arweave.blocks.sync.enabled", false),
|
|
positive(c.getInt("arweave.blocks.sync.intervalMinutes", 15), "sync.intervalMinutes"),
|
|
clamp(c.getInt("arweave.blocks.sync.pageSize", 100), 1, 100),
|
|
positive(c.getInt("arweave.blocks.sync.queueBatchSize", 10_000), "sync.queueBatchSize"),
|
|
nonNegativeLong(parseLong(c.getParam("arweave.blocks.sync.startBlockHeight"), 0L), "sync.startBlockHeight"),
|
|
positiveLong(parseLong(c.getParam("arweave.blocks.sync.maxRootBundleBytes"), 256L * 1024 * 1024), "sync.maxRootBundleBytes"),
|
|
orDefault(c.getParam("arweave.blocks.sync.gateway"), "https://turbo-gateway.com")
|
|
);
|
|
}
|
|
|
|
public void validatePublisher() {
|
|
if (publishEnabled && walletJwkPath == null) {
|
|
throw new IllegalArgumentException("arweave.blocks.publish.walletJwkPath is required when publisher is enabled");
|
|
}
|
|
}
|
|
|
|
private static String orDefault(String v, String d) { return v == null || v.isBlank() ? d : v.trim(); }
|
|
private static Path optionalPath(String v) { return v == null || v.isBlank() ? null : Path.of(v.trim()); }
|
|
private static long parseLong(String v, long d) { return v == null || v.isBlank() ? d : Long.parseLong(v.trim()); }
|
|
private static int positive(int v,String n){if(v<=0)throw new IllegalArgumentException(n+" must be >0");return v;}
|
|
private static int nonNegative(int v,String n){if(v<0)throw new IllegalArgumentException(n+" must be >=0");return v;}
|
|
private static long positiveLong(long v,String n){if(v<=0)throw new IllegalArgumentException(n+" must be >0");return v;}
|
|
private static long nonNegativeLong(long v,String n){if(v<0)throw new IllegalArgumentException(n+" must be >=0");return v;}
|
|
private static int clamp(int v,int min,int max){return Math.max(min,Math.min(max,v));}
|
|
}
|