Files
nym/common/gateway-storage/migrations/20240624120000_ecash_changes.sql
Bogdan-Ștefan Neacşu bd94dd3055 Persist wireguard peers (#4732)
* Store wireguard peers in db

* Add update to nym-node

* Move gateway-requests and gateway-storage to common

* Carry storage to PeerController field

* Double kernel modifications with storage ones

* Take storage peers at boot

* Link storage query for registration flow

* Move authenticator peer comms in peer manager

* Modify template too

* Remove unused

* Fix clippy

* Fix clippy non-linux

* Keep storage data up-to-date on every check

* Check for staleness in storage timestamps

* Remove potential for panic in unwrap

* Fix clippy

* Fmt

* Clippy after rebase

* Remove in memory test structure
2024-07-30 18:26:40 +02:00

93 lines
3.2 KiB
SQL

/*
* Copyright 2024 - Nym Technologies SA <contact@nymtech.net>
* SPDX-License-Identifier: GPL-3.0-only
*/
ALTER TABLE available_bandwidth
RENAME COLUMN freepass_expiration TO expiration;
DROP TABLE spent_credential;
-- we need the id field to prevent data duplication
CREATE TABLE shared_keys_tmp (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
client_address_bs58 TEXT NOT NULL UNIQUE,
derived_aes128_ctr_blake3_hmac_keys_bs58 TEXT NOT NULL
);
INSERT INTO shared_keys_tmp (client_address_bs58, derived_aes128_ctr_blake3_hmac_keys_bs58)
SELECT * FROM shared_keys;
-- ideally this table would be called "clients" but I don't want to cause too many breaking changes
DROP TABLE shared_keys;
ALTER TABLE shared_keys_tmp RENAME TO shared_keys;
CREATE TABLE available_bandwidth_tmp (
client_id INTEGER NOT NULL PRIMARY KEY REFERENCES shared_keys(id),
available INTEGER NOT NULL,
expiration TIMESTAMP WITHOUT TIME ZONE
);
INSERT INTO available_bandwidth_tmp (client_id, available, expiration)
SELECT t1.id as client_id, t2.available, t2.expiration
FROM shared_keys as t1
JOIN available_bandwidth as t2
ON t1.client_address_bs58 = t2.client_address_bs58;
DROP TABLE available_bandwidth;
ALTER TABLE available_bandwidth_tmp RENAME TO available_bandwidth;
CREATE TABLE ecash_signer (
epoch_id INTEGER NOT NULL,
-- unique id assigned by the DKG contract. it does not change between epochs
signer_id INTEGER NOT NULL
);
CREATE TABLE received_ticket (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
client_id INTEGER NOT NULL REFERENCES shared_keys(id),
received_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
rejected BOOLEAN
);
CREATE INDEX received_ticket_index ON received_ticket (received_at);
-- received tickets that are in the process of verifying
CREATE TABLE ticket_data (
ticket_id INTEGER NOT NULL PRIMARY KEY REFERENCES received_ticket(id),
-- serial_number, alongside the entire row, will get purged after redemption is complete
serial_number BLOB NOT NULL UNIQUE,
-- data will get purged after 80% of signers verifies it
data BLOB
);
-- result of a verification from a single signer (API)
CREATE TABLE ticket_verification (
ticket_id INTEGER NOT NULL REFERENCES received_ticket(id),
signer_id INTEGER NOT NULL,
verified_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
accepted BOOLEAN NOT NULL,
PRIMARY KEY (ticket_id, signer_id)
);
CREATE INDEX ticket_verification_index ON ticket_verification (ticket_id);
-- verified tickets that are yet to be redeemed
CREATE TABLE verified_tickets (
ticket_id INTEGER NOT NULL PRIMARY KEY REFERENCES received_ticket(id),
proposal_id INTEGER REFERENCES redemption_proposals(proposal_id)
);
CREATE INDEX verified_tickets_index ON verified_tickets (proposal_id);
CREATE TABLE redemption_proposals (
proposal_id INTEGER NOT NULL PRIMARY KEY,
created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL,
resolved_at TIMESTAMP WITHOUT TIME ZONE, -- either got executed or got rejected
rejected BOOLEAN
);