-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Expand file tree
/
Copy path20260128095635_remove_tenants.sql
More file actions
110 lines (90 loc) · 4.61 KB
/
20260128095635_remove_tenants.sql
File metadata and controls
110 lines (90 loc) · 4.61 KB
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
BEGIN;
-- Create the keys table.
ALTER TABLE tenants RENAME TO keys;
-- Enforce that keys (or what we called tenants) has zero or one row.
DO $$
BEGIN
IF (SELECT COUNT(*) FROM keys) > 1 THEN
RAISE EXCEPTION 'Expected zero or one row in keys table, but found %', (SELECT COUNT(*) FROM keys);
END IF;
END $$;
ALTER TABLE keys DROP COLUMN tenant_api_key;
ALTER TABLE keys DROP COLUMN is_admin;
ALTER TABLE keys DROP COLUMN sns_sk;
ALTER TABLE keys DROP COLUMN verifying_contract_address;;
-- key_id contains the key ID from the server key metadata (that is used in ciphertext metadata).
ALTER TABLE keys ALTER COLUMN key_id SET NOT NULL;
-- The current key_id for the existing key is empty.
UPDATE keys SET key_id = ''::BYTEA;
ALTER TABLE keys ADD CONSTRAINT unique_key_id UNIQUE (key_id);
--key_id_gw contains the key ID from the GW event (that could be different from key_id).
ALTER TABLE keys ADD column key_id_gw BYTEA NOT NULL;
ALTER TABLE keys ADD CONSTRAINT unique_key_id_gw UNIQUE (key_id_gw);
ALTER TABLE keys ADD COLUMN created_at TIMESTAMPTZ NOT NULL DEFAULT NOW();
-- Split CRS from keys.
CREATE TABLE crs (
-- The sequence number to identify the latest CRS.
sequence_number BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
crs_id BYTEA NOT NULL,
crs BYTEA NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
CONSTRAINT unique_crs_id UNIQUE (crs_id)
);
-- Move CRS from keys to crs.
INSERT INTO crs (crs_id, crs)
SELECT ''::BYTEA, public_params FROM keys;
ALTER TABLE keys DROP COLUMN public_params;
-- Host chains.
CREATE TABLE host_chains (
chain_id BIGINT PRIMARY KEY NOT NULL CHECK (chain_id > 0),
name TEXT NOT NULL,
acl_contract_address TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- Move ACL contract address.
INSERT INTO host_chains (chain_id, name, acl_contract_address)
SELECT chain_id, 'ethereum', acl_contract_address FROM keys;
ALTER TABLE keys DROP COLUMN acl_contract_address;
-- allowed_handles.tenant_id no longer needed.
ALTER TABLE allowed_handles DROP COLUMN tenant_id;
ALTER TABLE allowed_handles ADD PRIMARY KEY (handle, account_address);
-- input_blobs.tenant_id no longer needed.
ALTER TABLE input_blobs DROP CONSTRAINT input_blobs_pkey;
ALTER TABLE input_blobs DROP COLUMN tenant_id;
ALTER TABLE input_blobs ADD PRIMARY KEY (blob_hash);
-- ciphertext_digest.tenant_id no longer needed. Instead, put the host_chain_id there directly.
ALTER TABLE ciphertext_digest ADD COLUMN host_chain_id BIGINT DEFAULT NULL;
UPDATE ciphertext_digest SET host_chain_id = (SELECT chain_id FROM keys WHERE tenant_id = ciphertext_digest.tenant_id);
ALTER TABLE ciphertext_digest ALTER COLUMN host_chain_id SET NOT NULL;
ALTER TABLE ciphertext_digest ADD CONSTRAINT ciphertext_digest_host_chain_id_positive CHECK (host_chain_id > 0);
ALTER TABLE ciphertext_digest DROP COLUMN tenant_id;
ALTER TABLE ciphertext_digest ADD PRIMARY KEY (handle);
ALTER TABLE ciphertext_digest ADD COLUMN key_id BYTEA NOT NULL; -- TODO for the future is to make this an index
-- ciphertexts.tenant_id no longer needed.
ALTER TABLE ciphertexts DROP CONSTRAINT ciphertexts_pkey;
ALTER TABLE ciphertexts DROP COLUMN tenant_id;
ALTER TABLE ciphertexts ADD PRIMARY KEY (handle, ciphertext_version);
-- ciphertexts128.tenant_id no longer needed.
ALTER TABLE ciphertexts128 DROP CONSTRAINT ciphertexts128_pkey;
ALTER TABLE ciphertexts128 DROP COLUMN tenant_id;
ALTER TABLE ciphertexts128 ADD PRIMARY KEY (handle);
DROP INDEX IF EXISTS idx_ciphertexts128_handle;
-- computations.tenant_id no longer needed.
ALTER TABLE computations DROP CONSTRAINT computations_pkey;
DROP INDEX IF EXISTS idx_computations_pk;
ALTER TABLE computations DROP COLUMN tenant_id;
ALTER TABLE computations ADD PRIMARY KEY (output_handle, transaction_id);
-- pbs_computations.tenant_id no longer needed.
ALTER TABLE pbs_computations ADD COLUMN host_chain_id BIGINT DEFAULT NULL;
UPDATE pbs_computations SET host_chain_id = (SELECT chain_id FROM keys WHERE tenant_id = pbs_computations.tenant_id);
ALTER TABLE pbs_computations ALTER COLUMN host_chain_id SET NOT NULL;
ALTER TABLE pbs_computations ADD CONSTRAINT pbs_computations_host_chain_id_positive CHECK (host_chain_id > 0);
ALTER TABLE pbs_computations DROP CONSTRAINT pbs_computations_pkey;
ALTER TABLE pbs_computations DROP COLUMN tenant_id;
ALTER TABLE pbs_computations ADD PRIMARY KEY (handle);
-- We can now safely drop tenant_id and chain_id from keys.
ALTER TABLE keys DROP COLUMN tenant_id;
ALTER TABLE keys DROP COLUMN chain_id;
-- The sequence_number can be used to identify the latest key.
ALTER TABLE keys ADD COLUMN sequence_number BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY;
COMMIT;