unrip/deploy/k8s/base/unrip.yaml
philipp d151db1e91
Some checks failed
deploy / deploy (push) Failing after 31s
Let history writer catch up through stale backlog
Proof: npm test (140 passing); npm run operator-dashboard:build; git diff --cached --check.

Assumptions: Events older than HISTORY_WRITER_DERIVED_REFRESH_MAX_EVENT_AGE_MS are replay/backfill work; writing them remains required, but expensive derived portfolio/outcome refreshes can wait until the writer reaches fresh events.

Still fake: This does not move or migrate BTC assets; it only improves durable catch-up so fresh inventory can reach request preflight.
2026-05-07 16:13:21 +02:00

577 lines
15 KiB
YAML

apiVersion: v1
kind: ConfigMap
metadata:
name: unrip-config
namespace: unrip
data:
PROJECT_NAME: unrip
PROJECT_NAMESPACE: unrip
NEAR_INTENTS_WS_URL: wss://solver-relay-v2.chaindefuser.com/ws
NEAR_INTENTS_RPC_URL: https://solver-relay-v2.chaindefuser.com/rpc
NEAR_INTENTS_BRIDGE_RPC_URL: https://bridge.chaindefuser.com/rpc
NEAR_INTENTS_VERIFIER_CONTRACT: intents.near
NEAR_RPC_URL: https://near.lava.build
NEAR_INTENTS_PAIR_FILTER: nep141:nbtc.bridge.near->nep141:gnosis-0x420ca0f9b9b604ce0fd9c18ef134c705e5fa3430.omft.near
NEAR_INTENTS_STATUS_POLL_MS: "60000"
NEAR_INTENTS_ACCOUNT_ID: unrip-dev.near
TRADING_BTC_ASSET_ID: nep141:nbtc.bridge.near
TRADING_BTC_TRACKED_ASSET_IDS: nep141:nbtc.bridge.near,nep141:btc.omft.near
TRADING_BTC_SYMBOL: BTC
TRADING_BTC_LABEL: BTC / nBTC reserve
TRADING_BTC_DECIMALS: "8"
TRADING_BTC_CHAIN: btc:mainnet
TRADING_BTC_WITHDRAW_ADDRESS: ""
TRADING_EURE_ASSET_ID: nep141:gnosis-0x420ca0f9b9b604ce0fd9c18ef134c705e5fa3430.omft.near
TRADING_EURE_SYMBOL: EURe
TRADING_EURE_DECIMALS: "18"
TRADING_EURE_CHAIN: "eth:100"
TRADING_EURE_WITHDRAW_ADDRESS: "0x6C40267e03A97B2132e7a7d3159C88534eBEfdFb"
NEAR_INTENTS_CONTROL_API_ENABLED: "true"
NEAR_INTENTS_CONTROL_HOST: 0.0.0.0
NEAR_INTENTS_CONTROL_PORT: "8081"
MARKET_REFERENCE_CONTROL_HOST: 0.0.0.0
MARKET_REFERENCE_CONTROL_PORT: "8082"
INVENTORY_SYNC_CONTROL_HOST: 0.0.0.0
INVENTORY_SYNC_CONTROL_PORT: "8083"
LIQUIDITY_MANAGER_CONTROL_HOST: 0.0.0.0
LIQUIDITY_MANAGER_CONTROL_PORT: "8084"
HISTORY_WRITER_CONTROL_HOST: 0.0.0.0
HISTORY_WRITER_CONTROL_PORT: "8085"
STRATEGY_ENGINE_CONTROL_HOST: 0.0.0.0
STRATEGY_ENGINE_CONTROL_PORT: "8086"
TRADE_EXECUTOR_CONTROL_HOST: 0.0.0.0
TRADE_EXECUTOR_CONTROL_PORT: "8087"
OPS_SENTINEL_CONTROL_HOST: 0.0.0.0
OPS_SENTINEL_CONTROL_PORT: "8088"
OPERATOR_DASHBOARD_CONTROL_HOST: 0.0.0.0
OPERATOR_DASHBOARD_CONTROL_PORT: "8090"
NEAR_INTENTS_CONTROL_BASE_URL: http://near-intents-ingest.unrip.svc.cluster.local:8081
MARKET_REFERENCE_CONTROL_BASE_URL: http://market-reference-ingest.unrip.svc.cluster.local:8082
INVENTORY_SYNC_CONTROL_BASE_URL: http://inventory-sync.unrip.svc.cluster.local:8083
LIQUIDITY_MANAGER_CONTROL_BASE_URL: http://liquidity-manager.unrip.svc.cluster.local:8084
HISTORY_WRITER_CONTROL_BASE_URL: http://history-writer.unrip.svc.cluster.local:8085
STRATEGY_ENGINE_CONTROL_BASE_URL: http://strategy-engine.unrip.svc.cluster.local:8086
TRADE_EXECUTOR_CONTROL_BASE_URL: http://trade-executor.unrip.svc.cluster.local:8087
OPS_SENTINEL_CONTROL_BASE_URL: http://ops-sentinel.unrip.svc.cluster.local:8088
NOTIFICATION_NTFY_BASE_URL: http://ntfy.utility.svc.cluster.local
NOTIFICATION_NTFY_TOPIC: unrip
NOTIFICATION_NTFY_TIMEOUT_MS: "5000"
KAFKA_BROKERS: redpanda.unrip.svc.cluster.local:9092
KAFKA_CLIENT_ID: unrip
KAFKA_TOPIC_RAW_NEAR_INTENTS_QUOTE: raw.near_intents.quote
KAFKA_TOPIC_NORM_SWAP_DEMAND: norm.swap_demand
KAFKA_TOPIC_REF_MARKET_PRICE: ref.market_price
KAFKA_TOPIC_STATE_INTENT_INVENTORY: state.intent_inventory
KAFKA_TOPIC_OPS_LIQUIDITY_ACTION: ops.liquidity_action
KAFKA_TOPIC_OPS_FUNDING_OBSERVATION: ops.funding_observation
KAFKA_TOPIC_OPS_ALERT: ops.alert
KAFKA_TOPIC_OPS_ENVIRONMENT_STATUS: ops.environment_status
KAFKA_TOPIC_DECISION_TRADE_DECISION: decision.trade_decision
KAFKA_TOPIC_CMD_EXECUTE_TRADE: cmd.execute_trade
KAFKA_TOPIC_EXEC_TRADE_RESULT: exec.trade_result
KAFKA_CONSUMER_GROUP_HISTORY: history-writer-v1
KAFKA_CONSUMER_GROUP_INVENTORY: inventory-sync-v1
KAFKA_CONSUMER_GROUP_STRATEGY: strategy-engine-v1
KAFKA_CONSUMER_GROUP_EXECUTOR: trade-executor-v1
KAFKA_CONSUMER_GROUP_OPS_SENTINEL: ops-sentinel-v1
KAFKA_CONSUMER_GROUP_OPERATOR_DASHBOARD: operator-dashboard-v1
HISTORY_WRITER_DERIVED_REFRESH_MAX_EVENT_AGE_MS: "300000"
STRATEGY_STATE_DIR: /var/lib/unrip/strategy-state
EXECUTOR_STATE_DIR: /var/lib/unrip/executor-state
LIQUIDITY_STATE_DIR: /var/lib/unrip/liquidity-state
MARKET_REFERENCE_REFRESH_MS: "5000"
MARKET_REFERENCE_COINGECKO_REFRESH_MS: "15000"
MARKET_REFERENCE_MAX_AGE_MS: "30000"
MARKET_REFERENCE_KRAKEN_TICKER_URL: https://api.kraken.com/0/public/Ticker?pair=XBTEUR
MARKET_REFERENCE_COINGECKO_URL: https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=eur
INVENTORY_SYNC_REFRESH_MS: "15000"
LIQUIDITY_REFRESH_MS: "30000"
STRATEGY_GROSS_THRESHOLD_PCT: "0.49"
STRATEGY_INITIAL_ARMED: "false"
STRATEGY_MAX_NOTIONAL_EURE: "150"
STRATEGY_PRICE_MAX_AGE_MS: "30000"
STRATEGY_INVENTORY_MAX_AGE_MS: "30000"
EXECUTOR_INITIAL_ARMED: "false"
EXECUTOR_RESPONSE_TIMEOUT_MS: "10000"
INTENT_REQUEST_DEFAULT_AMOUNT_EURE: "5"
INTENT_REQUEST_MAX_AMOUNT_EURE: "5"
INTENT_REQUEST_DEFAULT_SLIPPAGE_BPS: "200"
INTENT_REQUEST_MAX_SLIPPAGE_BPS: "200"
INTENT_REQUEST_MIN_DEADLINE_MS: "60000"
INTENT_REQUEST_QUOTE_TIMEOUT_MS: "10000"
INTENT_REQUEST_PUBLISH_TIMEOUT_MS: "10000"
INTENT_REQUEST_STATUS_TIMEOUT_MS: "10000"
INTENT_REQUEST_INVENTORY_MAX_AGE_MS: "30000"
INTENT_REQUEST_PRICE_MAX_AGE_MS: "30000"
LIQUIDITY_WITHDRAWALS_FROZEN: "true"
BTC_FUNDING_OBSERVER_ENABLED: "true"
BTC_FUNDING_OBSERVER_BASE_URL: https://mempool.space/api
FUNDING_OBSERVATION_STUCK_MS: "3600000"
OPS_SENTINEL_EVALUATION_MS: "5000"
OPS_SENTINEL_PRICE_STALE_MS: "30000"
OPS_SENTINEL_INVENTORY_STALE_MS: "30000"
OPS_SENTINEL_FUNDING_CREDIT_PENDING_MS: "300000"
OPS_SENTINEL_FUNDING_STUCK_MS: "3600000"
OPERATOR_DASHBOARD_AUTH_MODE: stub
OPERATOR_DASHBOARD_QUOTE_LIMIT: "10"
OPERATOR_DASHBOARD_TRADE_PAGE_SIZE: "20"
OPERATOR_DASHBOARD_UPSTREAM_TIMEOUT_MS: "3000"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: strategy-state
namespace: unrip
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: executor-state
namespace: unrip
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: liquidity-state
namespace: unrip
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: Service
metadata:
name: near-intents-ingest
namespace: unrip
spec:
selector:
app: near-intents-ingest
ports:
- name: control-api
port: 8081
targetPort: 8081
---
apiVersion: v1
kind: Service
metadata:
name: market-reference-ingest
namespace: unrip
spec:
selector:
app: market-reference-ingest
ports:
- name: control-api
port: 8082
targetPort: 8082
---
apiVersion: v1
kind: Service
metadata:
name: inventory-sync
namespace: unrip
spec:
selector:
app: inventory-sync
ports:
- name: control-api
port: 8083
targetPort: 8083
---
apiVersion: v1
kind: Service
metadata:
name: liquidity-manager
namespace: unrip
spec:
selector:
app: liquidity-manager
ports:
- name: control-api
port: 8084
targetPort: 8084
---
apiVersion: v1
kind: Service
metadata:
name: history-writer
namespace: unrip
spec:
selector:
app: history-writer
ports:
- name: control-api
port: 8085
targetPort: 8085
---
apiVersion: v1
kind: Service
metadata:
name: strategy-engine
namespace: unrip
spec:
selector:
app: strategy-engine
ports:
- name: control-api
port: 8086
targetPort: 8086
---
apiVersion: v1
kind: Service
metadata:
name: trade-executor
namespace: unrip
spec:
selector:
app: trade-executor
ports:
- name: control-api
port: 8087
targetPort: 8087
---
apiVersion: v1
kind: Service
metadata:
name: ops-sentinel
namespace: unrip
spec:
selector:
app: ops-sentinel
ports:
- name: control-api
port: 8088
targetPort: 8088
---
apiVersion: v1
kind: Service
metadata:
name: operator-dashboard
namespace: unrip
spec:
selector:
app: operator-dashboard
ports:
- name: http
port: 8090
targetPort: 8090
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: near-intents-ingest
namespace: unrip
spec:
replicas: 1
selector:
matchLabels:
app: near-intents-ingest
template:
metadata:
labels:
app: near-intents-ingest
app.kubernetes.io/part-of: unrip
spec:
imagePullSecrets:
- name: unrip-registry-creds
containers:
- name: app
image: ghcr.io/example/unrip:bootstrap
imagePullPolicy: IfNotPresent
command: ["node", "src/apps/near-intents-ingest.mjs"]
ports:
- name: control-api
containerPort: 8081
envFrom:
- configMapRef:
name: unrip-config
- secretRef:
name: unrip-secrets
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: market-reference-ingest
namespace: unrip
spec:
replicas: 1
selector:
matchLabels:
app: market-reference-ingest
template:
metadata:
labels:
app: market-reference-ingest
app.kubernetes.io/part-of: unrip
spec:
imagePullSecrets:
- name: unrip-registry-creds
containers:
- name: app
image: ghcr.io/example/unrip:bootstrap
imagePullPolicy: IfNotPresent
command: ["node", "src/apps/market-reference-ingest.mjs"]
ports:
- name: control-api
containerPort: 8082
envFrom:
- configMapRef:
name: unrip-config
- secretRef:
name: unrip-secrets
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: liquidity-manager
namespace: unrip
spec:
replicas: 1
selector:
matchLabels:
app: liquidity-manager
template:
metadata:
labels:
app: liquidity-manager
app.kubernetes.io/part-of: unrip
spec:
imagePullSecrets:
- name: unrip-registry-creds
containers:
- name: app
image: ghcr.io/example/unrip:bootstrap
imagePullPolicy: IfNotPresent
command: ["node", "src/apps/liquidity-manager.mjs"]
ports:
- name: control-api
containerPort: 8084
envFrom:
- configMapRef:
name: unrip-config
- secretRef:
name: unrip-secrets
volumeMounts:
- name: liquidity-state
mountPath: /var/lib/unrip/liquidity-state
volumes:
- name: liquidity-state
persistentVolumeClaim:
claimName: liquidity-state
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: inventory-sync
namespace: unrip
spec:
replicas: 1
selector:
matchLabels:
app: inventory-sync
template:
metadata:
labels:
app: inventory-sync
app.kubernetes.io/part-of: unrip
spec:
imagePullSecrets:
- name: unrip-registry-creds
containers:
- name: app
image: ghcr.io/example/unrip:bootstrap
imagePullPolicy: IfNotPresent
command: ["node", "src/apps/inventory-sync.mjs"]
ports:
- name: control-api
containerPort: 8083
envFrom:
- configMapRef:
name: unrip-config
- secretRef:
name: unrip-secrets
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: history-writer
namespace: unrip
spec:
replicas: 1
selector:
matchLabels:
app: history-writer
template:
metadata:
labels:
app: history-writer
app.kubernetes.io/part-of: unrip
spec:
imagePullSecrets:
- name: unrip-registry-creds
containers:
- name: app
image: ghcr.io/example/unrip:bootstrap
imagePullPolicy: IfNotPresent
command: ["node", "src/apps/history-writer.mjs"]
ports:
- name: control-api
containerPort: 8085
envFrom:
- configMapRef:
name: unrip-config
- secretRef:
name: unrip-secrets
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: ops-sentinel
namespace: unrip
spec:
replicas: 1
selector:
matchLabels:
app: ops-sentinel
template:
metadata:
labels:
app: ops-sentinel
app.kubernetes.io/part-of: unrip
spec:
imagePullSecrets:
- name: unrip-registry-creds
containers:
- name: app
image: ghcr.io/example/unrip:bootstrap
imagePullPolicy: IfNotPresent
command: ["node", "src/apps/ops-sentinel.mjs"]
ports:
- name: control-api
containerPort: 8088
envFrom:
- configMapRef:
name: unrip-config
- secretRef:
name: unrip-secrets
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: strategy-engine
namespace: unrip
spec:
replicas: 1
selector:
matchLabels:
app: strategy-engine
template:
metadata:
labels:
app: strategy-engine
app.kubernetes.io/part-of: unrip
spec:
imagePullSecrets:
- name: unrip-registry-creds
containers:
- name: app
image: ghcr.io/example/unrip:bootstrap
imagePullPolicy: IfNotPresent
command: ["node", "src/apps/strategy-engine.mjs"]
ports:
- name: control-api
containerPort: 8086
envFrom:
- configMapRef:
name: unrip-config
- secretRef:
name: unrip-secrets
volumeMounts:
- name: strategy-state
mountPath: /var/lib/unrip/strategy-state
volumes:
- name: strategy-state
persistentVolumeClaim:
claimName: strategy-state
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: trade-executor
namespace: unrip
spec:
replicas: 1
selector:
matchLabels:
app: trade-executor
template:
metadata:
labels:
app: trade-executor
app.kubernetes.io/part-of: unrip
spec:
imagePullSecrets:
- name: unrip-registry-creds
containers:
- name: app
image: ghcr.io/example/unrip:bootstrap
imagePullPolicy: IfNotPresent
command: ["node", "src/apps/trade-executor.mjs"]
ports:
- name: control-api
containerPort: 8087
envFrom:
- configMapRef:
name: unrip-config
- secretRef:
name: unrip-secrets
volumeMounts:
- name: executor-state
mountPath: /var/lib/unrip/executor-state
volumes:
- name: executor-state
persistentVolumeClaim:
claimName: executor-state
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: operator-dashboard
namespace: unrip
spec:
replicas: 1
selector:
matchLabels:
app: operator-dashboard
template:
metadata:
labels:
app: operator-dashboard
app.kubernetes.io/part-of: unrip
spec:
imagePullSecrets:
- name: unrip-registry-creds
containers:
- name: app
image: ghcr.io/example/unrip:bootstrap
imagePullPolicy: IfNotPresent
command: ["node", "src/apps/operator-dashboard.mjs"]
ports:
- name: http
containerPort: 8090
envFrom:
- configMapRef:
name: unrip-config
- secretRef:
name: unrip-secrets