Files
proxmox/token-aggregation-build/smom-dbis-138/services/token-aggregation/scripts/bootstrap-lightweight-schema.sql
defiQUG dbd517b279 Sync workspace: config, docs, scripts, CI, operator rules, and submodule pointers.
- Update dbis_core, cross-chain-pmm-lps, explorer-monorepo, metamask-integration, pr-workspace/chains
- Omit embedded publish git dirs and empty placeholders from index

Made-with: Cursor
2026-04-12 06:12:20 -07:00

182 lines
5.9 KiB
PL/PgSQL

BEGIN;
CREATE TABLE IF NOT EXISTS tokens (
id BIGSERIAL PRIMARY KEY,
chain_id INTEGER NOT NULL,
address TEXT NOT NULL,
name TEXT,
symbol TEXT,
decimals INTEGER,
total_supply NUMERIC(78, 0),
logo_url TEXT,
website_url TEXT,
description TEXT,
verified BOOLEAN DEFAULT FALSE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
UNIQUE (chain_id, address)
);
CREATE INDEX IF NOT EXISTS idx_tokens_chain_id ON tokens (chain_id);
CREATE INDEX IF NOT EXISTS idx_tokens_chain_symbol ON tokens (chain_id, symbol);
CREATE INDEX IF NOT EXISTS idx_tokens_chain_name ON tokens (chain_id, name);
CREATE TABLE IF NOT EXISTS token_market_data (
chain_id INTEGER NOT NULL,
token_address TEXT NOT NULL,
price_usd NUMERIC(38, 18),
price_change_24h NUMERIC(38, 18),
volume_24h NUMERIC(38, 18) NOT NULL DEFAULT 0,
volume_7d NUMERIC(38, 18) NOT NULL DEFAULT 0,
volume_30d NUMERIC(38, 18) NOT NULL DEFAULT 0,
market_cap_usd NUMERIC(38, 18),
liquidity_usd NUMERIC(38, 18) NOT NULL DEFAULT 0,
holders_count INTEGER NOT NULL DEFAULT 0,
transfers_24h INTEGER NOT NULL DEFAULT 0,
last_updated TIMESTAMPTZ NOT NULL DEFAULT NOW(),
PRIMARY KEY (chain_id, token_address)
);
CREATE INDEX IF NOT EXISTS idx_token_market_data_volume_24h
ON token_market_data (chain_id, volume_24h DESC);
CREATE INDEX IF NOT EXISTS idx_token_market_data_liquidity
ON token_market_data (chain_id, liquidity_usd DESC);
CREATE TABLE IF NOT EXISTS liquidity_pools (
id BIGSERIAL PRIMARY KEY,
chain_id INTEGER NOT NULL,
pool_address TEXT NOT NULL,
token0_address TEXT NOT NULL,
token1_address TEXT NOT NULL,
dex_type TEXT NOT NULL,
factory_address TEXT,
router_address TEXT,
reserve0 NUMERIC(78, 0) NOT NULL DEFAULT 0,
reserve1 NUMERIC(78, 0) NOT NULL DEFAULT 0,
reserve0_usd NUMERIC(38, 18) NOT NULL DEFAULT 0,
reserve1_usd NUMERIC(38, 18) NOT NULL DEFAULT 0,
total_liquidity_usd NUMERIC(38, 18) NOT NULL DEFAULT 0,
volume_24h NUMERIC(38, 18) NOT NULL DEFAULT 0,
fee_tier INTEGER,
created_at_block BIGINT,
created_at_timestamp TIMESTAMPTZ,
last_updated TIMESTAMPTZ NOT NULL DEFAULT NOW(),
UNIQUE (chain_id, pool_address)
);
CREATE INDEX IF NOT EXISTS idx_liquidity_pools_chain_liquidity
ON liquidity_pools (chain_id, total_liquidity_usd DESC);
CREATE INDEX IF NOT EXISTS idx_liquidity_pools_chain_token0
ON liquidity_pools (chain_id, token0_address);
CREATE INDEX IF NOT EXISTS idx_liquidity_pools_chain_token1
ON liquidity_pools (chain_id, token1_address);
CREATE TABLE IF NOT EXISTS pool_reserves_history (
id BIGSERIAL PRIMARY KEY,
chain_id INTEGER NOT NULL,
pool_address TEXT NOT NULL,
reserve0 NUMERIC(78, 0) NOT NULL,
reserve1 NUMERIC(78, 0) NOT NULL,
reserve0_usd NUMERIC(38, 18),
reserve1_usd NUMERIC(38, 18),
total_liquidity_usd NUMERIC(38, 18),
block_number BIGINT NOT NULL,
timestamp TIMESTAMPTZ NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_pool_reserves_history_lookup
ON pool_reserves_history (chain_id, pool_address, timestamp DESC);
CREATE TABLE IF NOT EXISTS swap_events (
id BIGSERIAL PRIMARY KEY,
chain_id INTEGER NOT NULL,
pool_address TEXT NOT NULL,
token0_address TEXT NOT NULL,
token1_address TEXT NOT NULL,
amount_usd NUMERIC(38, 18) NOT NULL DEFAULT 0,
price_usd NUMERIC(38, 18),
transaction_hash TEXT,
log_index INTEGER,
block_number BIGINT,
timestamp TIMESTAMPTZ NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_swap_events_pool_time
ON swap_events (chain_id, pool_address, timestamp DESC);
CREATE INDEX IF NOT EXISTS idx_swap_events_token_time
ON swap_events (chain_id, token0_address, token1_address, timestamp DESC);
CREATE UNIQUE INDEX IF NOT EXISTS idx_swap_events_unique_log
ON swap_events (
chain_id,
pool_address,
COALESCE(transaction_hash, ''),
COALESCE(log_index, -1)
);
CREATE TABLE IF NOT EXISTS token_ohlcv (
id BIGSERIAL PRIMARY KEY,
chain_id INTEGER NOT NULL,
token_address TEXT NOT NULL,
pool_address TEXT NOT NULL DEFAULT '',
interval_type TEXT NOT NULL,
open_price NUMERIC(38, 18) NOT NULL,
high_price NUMERIC(38, 18) NOT NULL,
low_price NUMERIC(38, 18) NOT NULL,
close_price NUMERIC(38, 18) NOT NULL,
volume NUMERIC(38, 18) NOT NULL DEFAULT 0,
volume_usd NUMERIC(38, 18) NOT NULL DEFAULT 0,
timestamp TIMESTAMPTZ NOT NULL,
UNIQUE (chain_id, token_address, pool_address, interval_type, timestamp)
);
CREATE INDEX IF NOT EXISTS idx_token_ohlcv_lookup
ON token_ohlcv (chain_id, token_address, interval_type, timestamp DESC);
CREATE TABLE IF NOT EXISTS provider_health_snapshots (
id BIGSERIAL PRIMARY KEY,
chain_id INTEGER NOT NULL,
provider TEXT NOT NULL,
status TEXT NOT NULL,
supports_execution BOOLEAN NOT NULL DEFAULT FALSE,
supports_quote BOOLEAN NOT NULL DEFAULT FALSE,
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
captured_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_provider_health_snapshots_lookup
ON provider_health_snapshots (chain_id, provider, captured_at DESC);
CREATE TABLE IF NOT EXISTS route_plan_cache (
plan_id TEXT PRIMARY KEY,
request_hash TEXT NOT NULL,
chain_id INTEGER NOT NULL,
destination_chain_id INTEGER NOT NULL,
decision TEXT NOT NULL,
response_json JSONB NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
expires_at TIMESTAMPTZ
);
CREATE INDEX IF NOT EXISTS idx_route_plan_cache_lookup
ON route_plan_cache (request_hash, expires_at DESC);
CREATE TABLE IF NOT EXISTS route_execution_metrics (
id BIGSERIAL PRIMARY KEY,
plan_id TEXT NOT NULL,
chain_id INTEGER NOT NULL,
provider TEXT NOT NULL,
hop_index INTEGER NOT NULL,
token_in_address TEXT NOT NULL,
token_out_address TEXT NOT NULL,
estimated_amount_out NUMERIC(78, 0),
actual_amount_out NUMERIC(78, 0),
status TEXT NOT NULL,
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_route_execution_metrics_lookup
ON route_execution_metrics (plan_id, hop_index, created_at DESC);
COMMIT;