52 lines
1.8 KiB
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');
|