feat: add brc20 migrations

This commit is contained in:
Gaze
2024-05-15 16:15:38 +07:00
parent 9febf40e81
commit 2befd8b124
2 changed files with 138 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
BEGIN;
DROP TABLE IF EXISTS "brc20_indexer_stats";
DROP TABLE IF EXISTS "brc20_indexer_state";
DROP TABLE IF EXISTS "brc20_indexed_blocks";
DROP TABLE IF EXISTS "brc20_tickers";
DROP TABLE IF EXISTS "brc20_ticker_states";
DROP TABLE IF EXISTS "brc20_deploy_events";
DROP TABLE IF EXISTS "brc20_mint_events";
DROP TABLE IF EXISTS "brc20_transfer_events";
DROP TABLE IF EXISTS "brc20_balances";
DROP TABLE IF EXISTS "brc20_inscriptions";
COMMIT;

View File

@@ -0,0 +1,124 @@
BEGIN;
-- Indexer Client Information
CREATE TABLE IF NOT EXISTS "brc20_indexer_stats" (
"id" BIGSERIAL PRIMARY KEY,
"client_version" TEXT NOT NULL,
"network" TEXT NOT NULL,
"created_at" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS "brc20_indexer_state" (
"id" BIGSERIAL PRIMARY KEY,
"db_version" INT NOT NULL,
"event_hash_version" INT NOT NULL,
"created_at" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS brc20_indexer_state_created_at_idx ON "brc20_indexer_state" USING BTREE ("created_at" DESC);
-- BRC20 data
CREATE TABLE IF NOT EXISTS "brc20_indexed_blocks" (
"height" INT NOT NULL PRIMARY KEY,
"hash" TEXT NOT NULL,
"prev_hash" TEXT NOT NULL,
"event_hash" TEXT NOT NULL,
"cumulative_event_hash" TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS "brc20_tickers" (
"tick" TEXT NOT NULL PRIMARY KEY, -- lowercase of original_tick
"original_tick" TEXT NOT NULL,
"total_supply" DECIMAL NOT NULL,
"decimals" SMALLINT NOT NULL,
"limit_per_mint" DECIMAL NOT NULL,
"is_self_mint" BOOLEAN NOT NULL,
"deploy_inscription_id" TEXT NOT NULL,
"created_at" TIMESTAMP NOT NULL
"created_at_height" INT NOT NULL
);
CREATE TABLE IF NOT EXISTS "brc20_ticker_states" (
"tick" TEXT NOT NULL,
"block_height" INT NOT NULL,
"minted_amount" DECIMAL NOT NULL,
"burned_amount" DECIMAL NOT NULL,
"completed_at" TIMESTAMP,
"completed_at_height" INT,
PRIMARY KEY ("tick", "block_height")
);
CREATE TABLE IF NOT EXISTS "brc20_deploy_events" (
"id" BIGSERIAL PRIMARY KEY,
"inscription_id" TEXT NOT NULL,
"tick" TEXT NOT NULL, -- lowercase of original_tick
"original_tick" TEXT NOT NULL,
"tx_hash" TEXT NOT NULL,
"block_height" INT NOT NULL,
"tx_index" INT NOT NULL,
"timestamp" TIMESTAMP NOT NULL,
"pkscript" TEXT NOT NULL,
"total_supply" DECIMAL NOT NULL,
"decimals" SMALLINT NOT NULL,
"limit_per_mint" DECIMAL NOT NULL,
"is_self_mint" BOOLEAN NOT NULL
);
CREATE INDEX IF NOT EXISTS brc20_deploy_events_block_height_idx ON "brc20_deploy_events" USING BTREE ("block_height");
CREATE TABLE IF NOT EXISTS "brc20_mint_events" (
"id" BIGSERIAL PRIMARY KEY,
"inscription_id" TEXT NOT NULL,,
"tick" TEXT NOT NULL, -- lowercase of original_tick
"original_tick" TEXT NOT NULL,
"tx_hash" TEXT NOT NULL,
"block_height" INT NOT NULL,
"tx_index" INT NOT NULL,
"timestamp" TIMESTAMP NOT NULL,
"pkscript" TEXT NOT NULL,
"amount" DECIMAL NOT NULL,
"parent_id" TEXT, -- requires parent deploy inscription id if minting a self-mint ticker
);
CREATE INDEX IF NOT EXISTS brc20_mint_events_block_height_idx ON "brc20_mint_events" USING BTREE ("block_height");
CREATE TABLE IF NOT EXISTS "brc20_transfer_events" (
"id" BIGSERIAL PRIMARY KEY,
"inscription_id" TEXT NOT NULL,,
"tick" TEXT NOT NULL, -- lowercase of original_tick
"original_tick" TEXT NOT NULL,
"tx_hash" TEXT NOT NULL,
"block_height" INT NOT NULL,
"tx_index" INT NOT NULL,
"timestamp" TIMESTAMP NOT NULL,
"from_pkscript" TEXT, -- if null, it's inscribe transfer. Otherwise, it's transfer transfer
"to_pkscript" TEXT NOT NULL,
"amount" DECIMAL NOT NULL,
);
CREATE INDEX IF NOT EXISTS brc20_transfer_events_block_height_idx ON "brc20_transfer_events" USING BTREE ("block_height");
CREATE TABLE IF NOT EXISTS "brc20_balances" (
"pkscript" TEXT NOT NULL,
"block_height" INT NOT NULL,
"ticker" TEXT NOT NULL,
"overall_balance" DECIMAL NOT NULL,
"available_balance" DECIMAL NOT NULL,
PRIMARY KEY ("pkscript", "ticker", "block_height")
);
CREATE TABLE IF NOT EXISTS "brc20_inscriptions" (
"id" TEXT NOT NULL PRIMARY KEY,
"number" BIGINT NOT NULL,
"sequence_number" BIGINT NOT NULL,
"delegate" TEXT, -- delegate inscription id
"metadata" BYTEA,
"metaprotocol" TEXT,
"parent_ids" TEXT[] NOT NULL DEFAULT '{}', -- parent inscription ids
"pointer" BIGINT,
"content" JSONB NOT NULL, -- can use jsonb because we only track brc20 inscriptions
"content_type" TEXT NOT NULL,
);
COMMIT;