--- Gales Bitcoin Wallet: node (online component) schema --- J. Welsh, December 2019 --- Dialect: SQLite (3.7.0 for WAL) PRAGMA journal_mode=WAL; BEGIN; CREATE TABLE tx ( tx_id INTEGER PRIMARY KEY, hash BLOB NOT NULL, block_hash BLOB NOT NULL, block_height INTEGER NOT NULL, n INTEGER NOT NULL, -- position in block comment TEXT, size INTEGER NOT NULL, fee INTEGER ); CREATE UNIQUE INDEX i_tx_hash ON tx(hash); CREATE UNIQUE INDEX i_tx_height_n ON tx(block_height, n); CREATE TABLE output ( output_id INTEGER PRIMARY KEY, tx_id INTEGER NOT NULL REFERENCES tx, n INTEGER NOT NULL, -- position in output vector address_id INTEGER NOT NULL REFERENCES address, value INTEGER NOT NULL, spent INTEGER REFERENCES input(input_id), flags TEXT ); CREATE UNIQUE INDEX i_output_txid_n ON output(tx_id, n); CREATE INDEX i_output_addrid ON output(address_id); CREATE UNIQUE INDEX i_output_spent ON output(spent); CREATE TABLE input ( input_id INTEGER PRIMARY KEY, tx_id INTEGER NOT NULL REFERENCES tx, n INTEGER NOT NULL -- position in input vector ); CREATE UNIQUE INDEX i_input_txid_n ON input(tx_id, n); CREATE TABLE address ( address_id INTEGER PRIMARY KEY, address BLOB NOT NULL ); CREATE UNIQUE INDEX i_address_address ON address(address); CREATE TABLE tag ( tag_id INTEGER PRIMARY KEY, name TEXT NOT NULL ); CREATE UNIQUE INDEX i_tag_name ON tag(name); CREATE TABLE address_tag ( address_id INTEGER NOT NULL REFERENCES address, tag_id INTEGER NOT NULL REFERENCES tag, PRIMARY KEY (address_id, tag_id) ); CREATE INDEX i_addrtag_tag ON address_tag(tag_id); CREATE TABLE state ( scan_height INTEGER NOT NULL DEFAULT(-1) ); INSERT INTO state DEFAULT VALUES; COMMIT;