feat: explorer API, wallet, CCIP scripts, and config refresh
- 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
This commit is contained in:
60
backend/database/migrations/0010_track_schema.auth_only.sql
Normal file
60
backend/database/migrations/0010_track_schema.auth_only.sql
Normal file
@@ -0,0 +1,60 @@
|
||||
-- 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);
|
||||
Reference in New Issue
Block a user