- Backend REST/gateway/track routes, analytics, Blockscout proxy paths. - Frontend wallet and liquidity surfaces; MetaMask token list alignment. - Deployment docs, verification scripts, address inventory updates. Check: go build ./... under backend/ (pass). Made-with: Cursor
61 lines
2.4 KiB
SQL
61 lines
2.4 KiB
SQL
-- Migration: Track auth/operator tables for shared Blockscout database
|
|
-- Description: Creates only the explorer-owned auth/operator tables that do not
|
|
-- conflict with Blockscout's existing addresses/token_transfers schema.
|
|
|
|
CREATE TABLE IF NOT EXISTS operator_events (
|
|
id SERIAL PRIMARY KEY,
|
|
event_type VARCHAR(100) NOT NULL,
|
|
chain_id INTEGER,
|
|
operator_address VARCHAR(42) NOT NULL,
|
|
target_resource VARCHAR(200),
|
|
action VARCHAR(100) NOT NULL,
|
|
details JSONB,
|
|
ip_address INET,
|
|
user_agent TEXT,
|
|
timestamp TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_operator_events_type ON operator_events(event_type);
|
|
CREATE INDEX IF NOT EXISTS idx_operator_events_operator ON operator_events(operator_address);
|
|
CREATE INDEX IF NOT EXISTS idx_operator_events_timestamp ON operator_events(timestamp);
|
|
CREATE INDEX IF NOT EXISTS idx_operator_events_chain ON operator_events(chain_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS operator_ip_whitelist (
|
|
id SERIAL PRIMARY KEY,
|
|
operator_address VARCHAR(42) NOT NULL,
|
|
ip_address INET NOT NULL,
|
|
description TEXT,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
UNIQUE(operator_address, ip_address)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_operator_whitelist_operator ON operator_ip_whitelist(operator_address);
|
|
CREATE INDEX IF NOT EXISTS idx_operator_whitelist_ip ON operator_ip_whitelist(ip_address);
|
|
|
|
CREATE TABLE IF NOT EXISTS operator_roles (
|
|
id SERIAL PRIMARY KEY,
|
|
address VARCHAR(42) NOT NULL UNIQUE,
|
|
track_level INTEGER NOT NULL DEFAULT 4,
|
|
roles TEXT[],
|
|
approved BOOLEAN DEFAULT FALSE,
|
|
approved_by VARCHAR(42),
|
|
approved_at TIMESTAMP WITH TIME ZONE,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_operator_roles_address ON operator_roles(address);
|
|
CREATE INDEX IF NOT EXISTS idx_operator_roles_approved ON operator_roles(approved);
|
|
|
|
CREATE TABLE IF NOT EXISTS wallet_nonces (
|
|
id SERIAL PRIMARY KEY,
|
|
address VARCHAR(42) NOT NULL UNIQUE,
|
|
nonce VARCHAR(64) NOT NULL,
|
|
expires_at TIMESTAMP WITH TIME ZONE NOT NULL,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_wallet_nonces_address ON wallet_nonces(address);
|
|
CREATE INDEX IF NOT EXISTS idx_wallet_nonces_expires ON wallet_nonces(expires_at);
|