diff --git a/tools/internal/testnet-manager/migrations/02_performance_contract.sql b/tools/internal/testnet-manager/migrations/02_performance_contract.sql index ad8d53b2c5..8ded793130 100644 --- a/tools/internal/testnet-manager/migrations/02_performance_contract.sql +++ b/tools/internal/testnet-manager/migrations/02_performance_contract.sql @@ -3,48 +3,110 @@ * SPDX-License-Identifier: GPL-3.0-only */ +-- 1. Rename old table to preserve data +ALTER TABLE network + RENAME TO network_old; -CREATE TABLE network_old +-- 2. Insert placeholder account (so that old networks would have _some_ value for performance contract) +INSERT INTO account (address, mnemonic) +VALUES ('n1tq2kggc6y44yqmnafh98vexxav8666cfkgvygf', + 'opinion scene salon slice noise easy security drift brown custom verb express old matrix mammal choose attract trash general staff manual elite destroy strategy'); + +-- 3. Insert placeholder contract and record its id +INSERT INTO contract (name, address, admin_address) +VALUES ('placeholder', 'n14gl07zh58rydd4k9tyw320zvqd79vrwnjj4x9g', 'n1tq2kggc6y44yqmnafh98vexxav8666cfkgvygf'); + +CREATE TEMP TABLE tmp_placeholder ( - id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL, - - mixnet_contract_id INTEGER NOT NULL REFERENCES contract (id), - vesting_contract_id INTEGER NOT NULL REFERENCES contract (id), - ecash_contract_id INTEGER NOT NULL REFERENCES contract (id), - cw3_multisig_contract_id INTEGER NOT NULL REFERENCES contract (id), - cw4_group_contract_id INTEGER NOT NULL REFERENCES contract (id), - dkg_contract_id INTEGER NOT NULL REFERENCES contract (id), - - rewarder_address TEXT NOT NULL REFERENCES account (address), - ecash_holding_account_address TEXT NOT NULL REFERENCES account (address) + id INTEGER NOT NULL ); +INSERT INTO tmp_placeholder +VALUES (last_insert_rowid()); -INSERT INTO network_old -SELECT * -from network; - -DROP TABLE network; +-- 4. Create the new network table with the new column CREATE TABLE network ( - id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL, - created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL, + id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + name TEXT NOT NULL, + created_at TIMESTAMP WITHOUT TIME ZONE NOT NULL, - mixnet_contract_id INTEGER NOT NULL REFERENCES contract (id), - vesting_contract_id INTEGER NOT NULL REFERENCES contract (id), - ecash_contract_id INTEGER NOT NULL REFERENCES contract (id), - cw3_multisig_contract_id INTEGER NOT NULL REFERENCES contract (id), - cw4_group_contract_id INTEGER NOT NULL REFERENCES contract (id), - dkg_contract_id INTEGER NOT NULL REFERENCES contract (id), - performance_contract_id INTEGER NOT NULL REFERENCES contract (id), + mixnet_contract_id INTEGER NOT NULL REFERENCES contract (id), + vesting_contract_id INTEGER NOT NULL REFERENCES contract (id), + ecash_contract_id INTEGER NOT NULL REFERENCES contract (id), + cw3_multisig_contract_id INTEGER NOT NULL REFERENCES contract (id), + cw4_group_contract_id INTEGER NOT NULL REFERENCES contract (id), + dkg_contract_id INTEGER NOT NULL REFERENCES contract (id), + performance_contract_id INTEGER NOT NULL REFERENCES contract (id), - rewarder_address TEXT NOT NULL REFERENCES account (address), - ecash_holding_account_address TEXT NOT NULL REFERENCES account (address) + rewarder_address TEXT NOT NULL REFERENCES account (address), + ecash_holding_account_address TEXT NOT NULL REFERENCES account (address) ); +-- 5. Copy existing data into the new table +INSERT INTO network(id, name, created_at, + mixnet_contract_id, vesting_contract_id, ecash_contract_id, + cw3_multisig_contract_id, cw4_group_contract_id, dkg_contract_id, + performance_contract_id, + rewarder_address, ecash_holding_account_address) +SELECT n.id, + n.name, + n.created_at, + n.mixnet_contract_id, + n.vesting_contract_id, + n.ecash_contract_id, + n.cw3_multisig_contract_id, + n.cw4_group_contract_id, + n.dkg_contract_id, + t.id, -- use the placeholder contract id + n.rewarder_address, + n.ecash_holding_account_address +FROM network_old AS n + CROSS JOIN tmp_placeholder AS t; + +-- 6. recreate metadata table due to change in FK +ALTER TABLE metadata + RENAME TO metadata_old; + +CREATE TABLE metadata +( + id INTEGER PRIMARY KEY CHECK (id = 0), + latest_network_id INTEGER REFERENCES network (id), + + master_mnemonic TEXT NOT NULL, + rpc_endpoint TEXT NOT NULL +); + +INSERT INTO metadata +SELECT * +FROM metadata_old; + +-- 7. recreate node table due to change in FK +ALTER Table node + RENAME TO node_old; + +CREATE TABLE node +( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + identity_key TEXT NOT NULL, + network_id INTEGER NOT NULL REFERENCES network (id), + + -- i.e. mixnode or gateway + bonded_type TEXT NOT NULL, + owner_address TEXT NOT NULL REFERENCES account (address) +); + +INSERT INTO node +SELECT * +FROM node_old; + +-- 8. Clean up +DROP TABLE tmp_placeholder; +DROP TABLE metadata_old; +DROP TABLE node_old; +DROP TABLE network_old; + + CREATE TABLE authorised_network_monitor ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,