nice-bill commited on
Commit
b062daf
·
1 Parent(s): 6954d6e

Add SQL schema for Supabase

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