feat: bridges, PMM, flash workflow, token-aggregation, and deployment docs
- CCIP/trustless bridge contracts, GRU tokens, DEX/PMM tests, reserve vault.
- Token-aggregation service routes, planner, chain config, relay env templates.
- Config snapshots and multi-chain deployment markdown updates.
- gitignore services/btc-intake/dist/ (tsc output); do not track dist.
Run forge build && forge test before deploy (large solc graph).
Made-with: Cursor
2026-04-07 23:40:52 -07:00
|
|
|
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,
|
2026-04-25 23:45:07 -07:00
|
|
|
transaction_hash TEXT,
|
|
|
|
|
block_number BIGINT,
|
|
|
|
|
log_index INTEGER,
|
feat: bridges, PMM, flash workflow, token-aggregation, and deployment docs
- CCIP/trustless bridge contracts, GRU tokens, DEX/PMM tests, reserve vault.
- Token-aggregation service routes, planner, chain config, relay env templates.
- Config snapshots and multi-chain deployment markdown updates.
- gitignore services/btc-intake/dist/ (tsc output); do not track dist.
Run forge build && forge test before deploy (large solc graph).
Made-with: Cursor
2026-04-07 23:40:52 -07:00
|
|
|
token0_address TEXT NOT NULL,
|
|
|
|
|
token1_address TEXT NOT NULL,
|
2026-04-25 23:45:07 -07:00
|
|
|
amount0_in NUMERIC(78, 0) NOT NULL DEFAULT 0,
|
|
|
|
|
amount1_in NUMERIC(78, 0) NOT NULL DEFAULT 0,
|
|
|
|
|
amount0_out NUMERIC(78, 0) NOT NULL DEFAULT 0,
|
|
|
|
|
amount1_out NUMERIC(78, 0) NOT NULL DEFAULT 0,
|
feat: bridges, PMM, flash workflow, token-aggregation, and deployment docs
- CCIP/trustless bridge contracts, GRU tokens, DEX/PMM tests, reserve vault.
- Token-aggregation service routes, planner, chain config, relay env templates.
- Config snapshots and multi-chain deployment markdown updates.
- gitignore services/btc-intake/dist/ (tsc output); do not track dist.
Run forge build && forge test before deploy (large solc graph).
Made-with: Cursor
2026-04-07 23:40:52 -07:00
|
|
|
amount_usd NUMERIC(38, 18) NOT NULL DEFAULT 0,
|
|
|
|
|
price_usd NUMERIC(38, 18),
|
2026-04-25 23:45:07 -07:00
|
|
|
token0_price_usd NUMERIC(38, 18),
|
|
|
|
|
token1_price_usd NUMERIC(38, 18),
|
|
|
|
|
sender TEXT,
|
|
|
|
|
to_address TEXT,
|
feat: bridges, PMM, flash workflow, token-aggregation, and deployment docs
- CCIP/trustless bridge contracts, GRU tokens, DEX/PMM tests, reserve vault.
- Token-aggregation service routes, planner, chain config, relay env templates.
- Config snapshots and multi-chain deployment markdown updates.
- gitignore services/btc-intake/dist/ (tsc output); do not track dist.
Run forge build && forge test before deploy (large solc graph).
Made-with: Cursor
2026-04-07 23:40:52 -07:00
|
|
|
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);
|
2026-04-25 23:45:07 -07:00
|
|
|
DROP INDEX IF EXISTS idx_swap_events_unique_log;
|
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_swap_events_chain_tx_log
|
|
|
|
|
ON swap_events (chain_id, transaction_hash, log_index);
|
feat: bridges, PMM, flash workflow, token-aggregation, and deployment docs
- CCIP/trustless bridge contracts, GRU tokens, DEX/PMM tests, reserve vault.
- Token-aggregation service routes, planner, chain config, relay env templates.
- Config snapshots and multi-chain deployment markdown updates.
- gitignore services/btc-intake/dist/ (tsc output); do not track dist.
Run forge build && forge test before deploy (large solc graph).
Made-with: Cursor
2026-04-07 23:40:52 -07:00
|
|
|
|
|
|
|
|
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;
|