CREATE TABLE blocks ( id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, hash BYTEA NOT NULL, height BIGINT NOT NULL, version INT NOT NULL, size INT NOT NULL, previous_block_id BIGINT, merkle_root_hash BYTEA NOT NULL, timestamp TIMESTAMP NOT NULL, bits INT NOT NULL, nonce INT NOT NULL, difficulty BIGINT NOT NULL, CONSTRAINT fk_previous_block_id FOREIGN KEY(previous_block_id) REFERENCES blocks(id) ); CREATE UNIQUE INDEX block_hash_index ON blocks (hash); CREATE INDEX block_height ON blocks (height); CREATE TABLE transactions ( id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, hash BYTEA NOT NULL, block_id BIGINT, version INT NOT NULL, lock_time INT NOT NULL, weight BIGINT NOT NULL, coinbase BOOLEAN NOT NULL, replace_by_fee BOOLEAN NOT NULL, CONSTRAINT fk_block_id FOREIGN KEY(block_id) REFERENCES blocks(id) ); CREATE UNIQUE INDEX transactions_hash_index ON transactions (hash); CREATE INDEX transactions_block_id ON transactions (block_id); CREATE TABLE transaction_outputs ( id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, transaction_id BIGINT NOT NULL, index BIGINT NOT NULL, value BIGINT NOT NULL, script BYTEA NOT NULL, unspendable BOOLEAN NOT NULL, address VARCHAR, CONSTRAINT fk_transaction_id FOREIGN KEY(transaction_id) REFERENCES transactions(id) ); CREATE INDEX transaction_outputs_address ON transaction_outputs (address); CREATE INDEX transaction_outputs_txid ON transaction_outputs (transaction_id); CREATE UNIQUE INDEX transaction_outputs_txid_index ON transaction_outputs (transaction_id, index); CREATE TABLE transaction_inputs ( id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, transaction_id BIGINT NOT NULL, index BIGINT NOT NULL, sequence BIGINT NOT NULL, witness BYTEA[] NOT NULL, previous_output_transaction BYTEA, previous_output_index BIGINT, script BYTEA NOT NULL, CONSTRAINT fk_transaction_id FOREIGN KEY(transaction_id) REFERENCES transactions ); CREATE INDEX transaction_inputs_txid ON transaction_inputs (transaction_id); CREATE UNIQUE INDEX transaction_inputs_txid_index ON transaction_inputs (transaction_id, index);