From 5094b975fc65ed283319c659f3c4cd034bcfe956 Mon Sep 17 00:00:00 2001 From: Ian Norden Date: Fri, 31 Jan 2020 14:08:51 -0600 Subject: [PATCH] postgres schema and tables for btc --- db/migrations/00040_create_btc_schema.sql | 5 + .../00041_create_btc_header_cids_table.sql | 15 + ...0042_create_btc_transaction_cids_table.sql | 14 + .../00043_create_btc_tx_inputs_table.sql | 15 + .../00044_create_btc_tx_outputs_table.sql | 12 + db/schema.sql | 256 ++++++++++++++++++ pkg/super_node/btc/models.go | 29 +- 7 files changed, 343 insertions(+), 3 deletions(-) create mode 100644 db/migrations/00040_create_btc_schema.sql create mode 100644 db/migrations/00041_create_btc_header_cids_table.sql create mode 100644 db/migrations/00042_create_btc_transaction_cids_table.sql create mode 100644 db/migrations/00043_create_btc_tx_inputs_table.sql create mode 100644 db/migrations/00044_create_btc_tx_outputs_table.sql diff --git a/db/migrations/00040_create_btc_schema.sql b/db/migrations/00040_create_btc_schema.sql new file mode 100644 index 00000000..e95dd926 --- /dev/null +++ b/db/migrations/00040_create_btc_schema.sql @@ -0,0 +1,5 @@ +-- +goose Up +CREATE SCHEMA btc; + +-- +goose Down +DROP SCHEMA btc; \ No newline at end of file diff --git a/db/migrations/00041_create_btc_header_cids_table.sql b/db/migrations/00041_create_btc_header_cids_table.sql new file mode 100644 index 00000000..1021ebcd --- /dev/null +++ b/db/migrations/00041_create_btc_header_cids_table.sql @@ -0,0 +1,15 @@ +-- +goose Up +CREATE TABLE btc.header_cids ( + id SERIAL PRIMARY KEY, + block_number BIGINT NOT NULL, + block_hash VARCHAR(66) NOT NULL, + parent_hash VARCHAR(66) NOT NULL, + cid TEXT NOT NULL, + version INTEGER NOT NULL, + timestamp INTEGER NOT NULL, + bits INTEGER NOT NULL, + UNIQUE (block_number, block_hash) +); + +-- +goose Down +DROP TABLE btc.header_cids; \ No newline at end of file diff --git a/db/migrations/00042_create_btc_transaction_cids_table.sql b/db/migrations/00042_create_btc_transaction_cids_table.sql new file mode 100644 index 00000000..95411a2b --- /dev/null +++ b/db/migrations/00042_create_btc_transaction_cids_table.sql @@ -0,0 +1,14 @@ +-- +goose Up +CREATE TABLE btc.transaction_cids ( + id SERIAL PRIMARY KEY, + header_id INTEGER NOT NULL REFERENCES btc.header_cids (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, + index INTEGER NOT NULL, + tx_hash VARCHAR(66) NOT NULL, + cid TEXT NOT NULL, + has_witness BOOL NOT NULL, + witness_hash VARCHAR(66), + UNIQUE (header_id, tx_hash) +); + +-- +goose Down +DROP TABLE btc.transaction_cids; \ No newline at end of file diff --git a/db/migrations/00043_create_btc_tx_inputs_table.sql b/db/migrations/00043_create_btc_tx_inputs_table.sql new file mode 100644 index 00000000..9e7b0600 --- /dev/null +++ b/db/migrations/00043_create_btc_tx_inputs_table.sql @@ -0,0 +1,15 @@ +-- +goose Up +CREATE TABLE btc.tx_inputs ( + id SERIAL PRIMARY KEY, + tx_id INTEGER NOT NULL REFERENCES btc.transaction_cids (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, + index INTEGER NOT NULL, + tx_witness BYTEA[], + sequence INTEGER NOT NULL, + script BYTEA NOT NULL, + outpoint_hash VARCHAR(66) NOT NULL, + outpoint_index INTEGER NOT NULL, + UNIQUE (tx_id, index) +); + +-- +goose Down +DROP TABLE btc.tx_inputs; \ No newline at end of file diff --git a/db/migrations/00044_create_btc_tx_outputs_table.sql b/db/migrations/00044_create_btc_tx_outputs_table.sql new file mode 100644 index 00000000..db40a3d9 --- /dev/null +++ b/db/migrations/00044_create_btc_tx_outputs_table.sql @@ -0,0 +1,12 @@ +-- +goose Up +CREATE TABLE btc.tx_outputs ( + id SERIAL PRIMARY KEY, + tx_id INTEGER NOT NULL REFERENCES btc.transaction_cids (id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED, + index INTEGER NOT NULL, + value INTEGER NOT NULL, + script BYTEA NOT NULL, + UNIQUE (tx_id, index) +); + +-- +goose Down +DROP TABLE btc.tx_outputs; \ No newline at end of file diff --git a/db/schema.sql b/db/schema.sql index 92400f32..bd167767 100644 --- a/db/schema.sql +++ b/db/schema.sql @@ -32,6 +32,146 @@ CREATE SCHEMA eth; SET default_tablespace = ''; +-- +-- Name: header_cids; Type: TABLE; Schema: btc; Owner: - +-- + +CREATE TABLE btc.header_cids ( + id integer NOT NULL, + block_number bigint NOT NULL, + block_hash character varying(66) NOT NULL, + parent_hash character varying(66) NOT NULL, + cid text NOT NULL, + version integer NOT NULL, + "timestamp" integer NOT NULL, + bits integer NOT NULL +); + + +-- +-- Name: header_cids_id_seq; Type: SEQUENCE; Schema: btc; Owner: - +-- + +CREATE SEQUENCE btc.header_cids_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: header_cids_id_seq; Type: SEQUENCE OWNED BY; Schema: btc; Owner: - +-- + +ALTER SEQUENCE btc.header_cids_id_seq OWNED BY btc.header_cids.id; + + +-- +-- Name: transaction_cids; Type: TABLE; Schema: btc; Owner: - +-- + +CREATE TABLE btc.transaction_cids ( + id integer NOT NULL, + header_id integer NOT NULL, + index integer NOT NULL, + tx_hash character varying(66) NOT NULL, + cid text NOT NULL, + has_witness boolean NOT NULL, + witness_hash character varying(66) +); + + +-- +-- Name: transaction_cids_id_seq; Type: SEQUENCE; Schema: btc; Owner: - +-- + +CREATE SEQUENCE btc.transaction_cids_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: transaction_cids_id_seq; Type: SEQUENCE OWNED BY; Schema: btc; Owner: - +-- + +ALTER SEQUENCE btc.transaction_cids_id_seq OWNED BY btc.transaction_cids.id; + + +-- +-- Name: tx_inputs; Type: TABLE; Schema: btc; Owner: - +-- + +CREATE TABLE btc.tx_inputs ( + id integer NOT NULL, + tx_id integer NOT NULL, + index integer NOT NULL, + tx_witness bytea[], + sequence integer NOT NULL, + script bytea NOT NULL, + outpoint_hash character varying(66) NOT NULL, + outpoint_index integer NOT NULL +); + + +-- +-- Name: tx_inputs_id_seq; Type: SEQUENCE; Schema: btc; Owner: - +-- + +CREATE SEQUENCE btc.tx_inputs_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: tx_inputs_id_seq; Type: SEQUENCE OWNED BY; Schema: btc; Owner: - +-- + +ALTER SEQUENCE btc.tx_inputs_id_seq OWNED BY btc.tx_inputs.id; + + +-- +-- Name: tx_outputs; Type: TABLE; Schema: btc; Owner: - +-- + +CREATE TABLE btc.tx_outputs ( + id integer NOT NULL, + tx_id integer NOT NULL, + index integer NOT NULL, + value integer NOT NULL, + script bytea NOT NULL +); + + +-- +-- Name: tx_outputs_id_seq; Type: SEQUENCE; Schema: btc; Owner: - +-- + +CREATE SEQUENCE btc.tx_outputs_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- Name: tx_outputs_id_seq; Type: SEQUENCE OWNED BY; Schema: btc; Owner: - +-- + +ALTER SEQUENCE btc.tx_outputs_id_seq OWNED BY btc.tx_outputs.id; + + -- -- Name: header_cids; Type: TABLE; Schema: eth; Owner: - -- @@ -923,6 +1063,34 @@ CREATE SEQUENCE public.watched_logs_id_seq ALTER SEQUENCE public.watched_logs_id_seq OWNED BY public.watched_logs.id; +-- +-- Name: header_cids id; Type: DEFAULT; Schema: btc; Owner: - +-- + +ALTER TABLE ONLY btc.header_cids ALTER COLUMN id SET DEFAULT nextval('btc.header_cids_id_seq'::regclass); + + +-- +-- Name: transaction_cids id; Type: DEFAULT; Schema: btc; Owner: - +-- + +ALTER TABLE ONLY btc.transaction_cids ALTER COLUMN id SET DEFAULT nextval('btc.transaction_cids_id_seq'::regclass); + + +-- +-- Name: tx_inputs id; Type: DEFAULT; Schema: btc; Owner: - +-- + +ALTER TABLE ONLY btc.tx_inputs ALTER COLUMN id SET DEFAULT nextval('btc.tx_inputs_id_seq'::regclass); + + +-- +-- Name: tx_outputs id; Type: DEFAULT; Schema: btc; Owner: - +-- + +ALTER TABLE ONLY btc.tx_outputs ALTER COLUMN id SET DEFAULT nextval('btc.tx_outputs_id_seq'::regclass); + + -- -- Name: header_cids id; Type: DEFAULT; Schema: eth; Owner: - -- @@ -1091,6 +1259,70 @@ ALTER TABLE ONLY public.watched_contracts ALTER COLUMN contract_id SET DEFAULT n ALTER TABLE ONLY public.watched_logs ALTER COLUMN id SET DEFAULT nextval('public.watched_logs_id_seq'::regclass); +-- +-- Name: header_cids header_cids_block_number_block_hash_key; Type: CONSTRAINT; Schema: btc; Owner: - +-- + +ALTER TABLE ONLY btc.header_cids + ADD CONSTRAINT header_cids_block_number_block_hash_key UNIQUE (block_number, block_hash); + + +-- +-- Name: header_cids header_cids_pkey; Type: CONSTRAINT; Schema: btc; Owner: - +-- + +ALTER TABLE ONLY btc.header_cids + ADD CONSTRAINT header_cids_pkey PRIMARY KEY (id); + + +-- +-- Name: transaction_cids transaction_cids_header_id_tx_hash_key; Type: CONSTRAINT; Schema: btc; Owner: - +-- + +ALTER TABLE ONLY btc.transaction_cids + ADD CONSTRAINT transaction_cids_header_id_tx_hash_key UNIQUE (header_id, tx_hash); + + +-- +-- Name: transaction_cids transaction_cids_pkey; Type: CONSTRAINT; Schema: btc; Owner: - +-- + +ALTER TABLE ONLY btc.transaction_cids + ADD CONSTRAINT transaction_cids_pkey PRIMARY KEY (id); + + +-- +-- Name: tx_inputs tx_inputs_pkey; Type: CONSTRAINT; Schema: btc; Owner: - +-- + +ALTER TABLE ONLY btc.tx_inputs + ADD CONSTRAINT tx_inputs_pkey PRIMARY KEY (id); + + +-- +-- Name: tx_inputs tx_inputs_tx_id_index_key; Type: CONSTRAINT; Schema: btc; Owner: - +-- + +ALTER TABLE ONLY btc.tx_inputs + ADD CONSTRAINT tx_inputs_tx_id_index_key UNIQUE (tx_id, index); + + +-- +-- Name: tx_outputs tx_outputs_pkey; Type: CONSTRAINT; Schema: btc; Owner: - +-- + +ALTER TABLE ONLY btc.tx_outputs + ADD CONSTRAINT tx_outputs_pkey PRIMARY KEY (id); + + +-- +-- Name: tx_outputs tx_outputs_tx_id_index_key; Type: CONSTRAINT; Schema: btc; Owner: - +-- + +ALTER TABLE ONLY btc.tx_outputs + ADD CONSTRAINT tx_outputs_tx_id_index_key UNIQUE (tx_id, index); + + -- -- Name: header_cids header_cids_block_number_block_hash_key; Type: CONSTRAINT; Schema: eth; Owner: - -- @@ -1504,6 +1736,30 @@ CREATE INDEX tx_from_index ON public.full_sync_transactions USING btree (tx_from CREATE INDEX tx_to_index ON public.full_sync_transactions USING btree (tx_to); +-- +-- Name: transaction_cids transaction_cids_header_id_fkey; Type: FK CONSTRAINT; Schema: btc; Owner: - +-- + +ALTER TABLE ONLY btc.transaction_cids + ADD CONSTRAINT transaction_cids_header_id_fkey FOREIGN KEY (header_id) REFERENCES btc.header_cids(id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; + + +-- +-- Name: tx_inputs tx_inputs_tx_id_fkey; Type: FK CONSTRAINT; Schema: btc; Owner: - +-- + +ALTER TABLE ONLY btc.tx_inputs + ADD CONSTRAINT tx_inputs_tx_id_fkey FOREIGN KEY (tx_id) REFERENCES btc.transaction_cids(id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; + + +-- +-- Name: tx_outputs tx_outputs_tx_id_fkey; Type: FK CONSTRAINT; Schema: btc; Owner: - +-- + +ALTER TABLE ONLY btc.tx_outputs + ADD CONSTRAINT tx_outputs_tx_id_fkey FOREIGN KEY (tx_id) REFERENCES btc.transaction_cids(id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED; + + -- -- Name: receipt_cids receipt_cids_tx_id_fkey; Type: FK CONSTRAINT; Schema: eth; Owner: - -- diff --git a/pkg/super_node/btc/models.go b/pkg/super_node/btc/models.go index 42ef9678..ff41908f 100644 --- a/pkg/super_node/btc/models.go +++ b/pkg/super_node/btc/models.go @@ -16,15 +16,19 @@ package btc +// HeaderModel is the db model for btc.header_cids table type HeaderModel struct { ID int64 `db:"id"` BlockNumber string `db:"block_number"` BlockHash string `db:"block_hash"` ParentHash string `db:"parent_hash"` CID string `db:"cid"` - // TotalDifficulty string `db:"td"` Not sure we can support this unless we modify btcd + Version int64 `db:"version"` + Timestamp int64 `db:"timestamp"` + Bits int64 `db:"bits"` } +// TxModel is the db model for btc.transaction_cids table type TxModel struct { ID int64 `db:"id"` HeaderID int64 `db:"header_id"` @@ -33,6 +37,25 @@ type TxModel struct { CID string `db:"cid"` HasWitness bool `db:"has_witness"` WitnessHash string `db:"witness_hash"` - //Dst string `db:"dst"` - //Src string `db:"src"` +} + +// TxInput is the db model for btc.tx_inputs table +type TxInput struct { + ID int64 `db:"id"` + TxID int64 `db:"tx_id"` + Index int64 `db:"index"` + TxWitness [][]byte `db:"tx_witness"` + Sequence int64 `db:"sequence"` + SignatureScript []byte `db:"script"` + PreviousOutPointHash []byte `db:"outpoint_hash"` + PreviousOutPointIndex int64 `db:"outpoint_index"` +} + +// TxOutput is the db model for btc.tx_outputs table +type TxOutput struct { + ID int64 `db:"id"` + TxID int64 `db:"tx_id"` + Index int64 `db:"index"` + Value int64 `db:"value"` + PkScript []byte `db:"script"` }