Spaces:
Running
Running
File size: 5,279 Bytes
b062daf | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | -- Supabase Schema for DeFi Agents Simulation
-- Run this in your Supabase SQL Editor
-- Enable UUID extension
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- ============================================
-- TABLE: runs
-- ============================================
CREATE TABLE IF NOT EXISTS runs (
id SERIAL PRIMARY KEY,
run_number INT NOT NULL UNIQUE,
start_time TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
end_time TIMESTAMP WITH TIME ZONE,
status TEXT DEFAULT 'running',
mechanics TEXT[] DEFAULT '{}',
config JSONB DEFAULT '{}',
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Index for faster queries
CREATE INDEX IF NOT EXISTS idx_runs_run_number ON runs(run_number);
CREATE INDEX IF NOT EXISTS idx_runs_status ON runs(status);
-- ============================================
-- TABLE: agent_states
-- ============================================
CREATE TABLE IF NOT EXISTS agent_states (
id SERIAL PRIMARY KEY,
run_id INT REFERENCES runs(id) ON DELETE CASCADE,
turn INT NOT NULL,
agent_name TEXT NOT NULL,
token_a_balance FLOAT DEFAULT 0,
token_b_balance FLOAT DEFAULT 0,
profit FLOAT DEFAULT 0,
strategy TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Indexes for agent state queries
CREATE INDEX IF NOT EXISTS idx_agent_states_run_id ON agent_states(run_id);
CREATE INDEX IF NOT EXISTS idx_agent_states_turn ON agent_states(run_id, turn);
CREATE INDEX IF NOT EXISTS idx_agent_states_agent ON agent_states(agent_name);
-- ============================================
-- TABLE: pool_states
-- ============================================
CREATE TABLE IF NOT EXISTS pool_states (
id SERIAL PRIMARY KEY,
run_id INT REFERENCES runs(id) ON DELETE CASCADE,
turn INT NOT NULL,
reserve_a FLOAT DEFAULT 0,
reserve_b FLOAT DEFAULT 0,
price_ab FLOAT DEFAULT 0,
total_liquidity FLOAT DEFAULT 0,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Indexes for pool state queries
CREATE INDEX IF NOT EXISTS idx_pool_states_run_id ON pool_states(run_id);
CREATE INDEX IF NOT EXISTS idx_pool_states_turn ON pool_states(run_id, turn);
-- ============================================
-- TABLE: actions
-- ============================================
CREATE TABLE IF NOT EXISTS actions (
id SERIAL PRIMARY KEY,
run_id INT REFERENCES runs(id) ON DELETE CASCADE,
turn INT NOT NULL,
agent_name TEXT NOT NULL,
action_type TEXT NOT NULL,
payload JSONB DEFAULT '{}',
reasoning_trace TEXT,
thinking_trace TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Indexes for action queries
CREATE INDEX IF NOT EXISTS idx_actions_run_id ON actions(run_id);
CREATE INDEX IF NOT EXISTS idx_actions_turn ON actions(run_id, turn);
CREATE INDEX IF NOT EXISTS idx_actions_agent ON actions(agent_name);
CREATE INDEX IF NOT EXISTS idx_actions_type ON actions(action_type);
-- ============================================
-- TABLE: run_metrics
-- ============================================
CREATE TABLE IF NOT EXISTS run_metrics (
id SERIAL PRIMARY KEY,
run_id INT REFERENCES runs(id) ON DELETE CASCADE,
gini_coefficient FLOAT,
cooperation_rate FLOAT,
betrayal_count INT DEFAULT 0,
avg_agent_profit FLOAT,
pool_stability FLOAT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Indexes for metrics queries
CREATE INDEX IF NOT EXISTS idx_run_metrics_run_id ON run_metrics(run_id);
-- ============================================
-- TABLE: agent_learning (optional - for persistence)
-- ============================================
CREATE TABLE IF NOT EXISTS agent_learning (
id SERIAL PRIMARY KEY,
agent_name TEXT NOT NULL,
run_number INT NOT NULL,
learning_summary TEXT,
strategy_tendency TEXT,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);
-- Index for agent learning queries
CREATE INDEX IF NOT EXISTS idx_agent_learning_agent ON agent_learning(agent_name);
CREATE INDEX IF NOT EXISTS idx_agent_learning_run ON agent_learning(run_number);
-- ============================================
-- FUNCTIONS (optional utilities)
-- ============================================
-- Function to get the latest run number
CREATE OR REPLACE FUNCTION get_next_run_number()
RETURNS INT AS $$
BEGIN
RETURN COALESCE((SELECT MAX(run_number) FROM runs), 0) + 1;
END;
$$ LANGUAGE plpgsql;
-- Function to update run end time
CREATE OR REPLACE FUNCTION complete_run(p_run_id INT)
RETURNS VOID AS $$
BEGIN
UPDATE runs
SET end_time = NOW(), status = 'completed'
WHERE id = p_run_id;
END;
$$ LANGUAGE plpgsql;
-- ============================================
-- SAMPLE DATA (for testing)
-- ============================================
-- Insert a sample run
INSERT INTO runs (run_number, status, config)
VALUES (1, 'completed', '{"num_agents": 5, "turns_per_run": 10}'::jsonb)
ON CONFLICT (run_number) DO NOTHING;
-- ============================================
-- VERIFICATION QUERY
-- ============================================
-- Check all tables exist
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name IN ('runs', 'agent_states', 'pool_states', 'actions', 'run_metrics', 'agent_learning')
ORDER BY table_name;
|