rmi-backend/supabase/token_deployments.sql

52 lines
1.8 KiB
SQL

-- Token Deployments table for Darkroom
-- Stores all token deployment records across chains
CREATE TABLE IF NOT EXISTS token_deployments (
deployment_id TEXT PRIMARY KEY,
chain TEXT NOT NULL,
name TEXT NOT NULL,
symbol TEXT NOT NULL,
decimals INTEGER NOT NULL DEFAULT 18,
total_supply TEXT NOT NULL,
contract_address TEXT,
deployer_address TEXT NOT NULL,
tx_hash TEXT,
block_number INTEGER,
status TEXT NOT NULL DEFAULT 'deployed',
owner_address TEXT,
mintable BOOLEAN DEFAULT TRUE,
burnable BOOLEAN DEFAULT TRUE,
pausable BOOLEAN DEFAULT FALSE,
blacklist_enabled BOOLEAN DEFAULT TRUE,
max_wallet_limit TEXT,
max_tx_limit TEXT,
trading_enabled BOOLEAN DEFAULT TRUE,
anti_bot_delay INTEGER DEFAULT 0,
max_supply TEXT,
metadata_uri TEXT,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW(),
extra JSONB DEFAULT '{}'
);
-- Indexes for fast lookups
CREATE INDEX IF NOT EXISTS idx_token_deployments_chain ON token_deployments(chain);
CREATE INDEX IF NOT EXISTS idx_token_deployments_status ON token_deployments(status);
CREATE INDEX IF NOT EXISTS idx_token_deployments_contract ON token_deployments(contract_address);
CREATE INDEX IF NOT EXISTS idx_token_deployments_symbol ON token_deployments(symbol);
-- Enable RLS (admin only)
ALTER TABLE token_deployments ENABLE ROW LEVEL SECURITY;
-- Admin can do everything
CREATE POLICY token_deployments_admin_all ON token_deployments
FOR ALL
TO authenticated
USING (auth.jwt() ->> 'role' = 'admin')
WITH CHECK (auth.jwt() ->> 'role' = 'admin');
-- Public can read deployed tokens (for verification)
CREATE POLICY token_deployments_public_read ON token_deployments
FOR SELECT
TO anon, authenticated
USING (status = 'deployed');