From e227dbf18242efae3850681d3525edb48d78dfa3 Mon Sep 17 00:00:00 2001 From: i-norden Date: Mon, 24 Jan 2022 14:09:25 -0600 Subject: [PATCH] v2 and v3 db models and batches --- statediff/indexer/models/shared/batch.go | 23 +++ statediff/indexer/models/shared/models.go | 23 +++ statediff/indexer/models/v2/batch.go | 134 ++++++++++++++++++ statediff/indexer/models/v2/models.go | 149 ++++++++++++++++++++ statediff/indexer/models/{ => v3}/batch.go | 0 statediff/indexer/models/{ => v3}/models.go | 6 - 6 files changed, 329 insertions(+), 6 deletions(-) create mode 100644 statediff/indexer/models/shared/batch.go create mode 100644 statediff/indexer/models/shared/models.go create mode 100644 statediff/indexer/models/v2/batch.go create mode 100644 statediff/indexer/models/v2/models.go rename statediff/indexer/models/{ => v3}/batch.go (100%) rename statediff/indexer/models/{ => v3}/models.go (97%) diff --git a/statediff/indexer/models/shared/batch.go b/statediff/indexer/models/shared/batch.go new file mode 100644 index 000000000..ba3056753 --- /dev/null +++ b/statediff/indexer/models/shared/batch.go @@ -0,0 +1,23 @@ +// VulcanizeDB +// Copyright © 2021 Vulcanize + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. + +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package models + +// IPLDBatch holds the arguments for a batch insert of IPLD data +type IPLDBatch struct { + Keys []string + Values [][]byte +} diff --git a/statediff/indexer/models/shared/models.go b/statediff/indexer/models/shared/models.go new file mode 100644 index 000000000..0c0b9be40 --- /dev/null +++ b/statediff/indexer/models/shared/models.go @@ -0,0 +1,23 @@ +// VulcanizeDB +// Copyright © 2021 Vulcanize + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. + +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package models + +// IPLDModel is the db model for public.blocks +type IPLDModel struct { + Key string `db:"key"` + Data []byte `db:"data"` +} diff --git a/statediff/indexer/models/v2/batch.go b/statediff/indexer/models/v2/batch.go new file mode 100644 index 000000000..585d59403 --- /dev/null +++ b/statediff/indexer/models/v2/batch.go @@ -0,0 +1,134 @@ +// VulcanizeDB +// Copyright © 2021 Vulcanize + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. + +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package models + +import "github.com/lib/pq" + +// IPLDBatch holds the arguments for a batch insert of IPLD data +type IPLDBatch struct { + Keys []string + Values [][]byte +} + +// UncleBatch is the db model for eth.uncle_cids +type UncleBatch struct { + IDs []int64 + HeaderIDs []int64 + BlockHashes []string + ParentHashes []string + CIDs []string + MhKeys []string + Rewards []string +} + +// TxBatch is the db model for eth.transaction_cids +type TxBatch struct { + IDs []int64 + HeaderIDs []int64 + Indexes []int64 + TxHashes []string + CIDs []string + MhKeys []string + Dsts []string + Srcs []string + Data [][]byte + Types []uint8 +} + +// AccessListElementBatch is the db model for eth.access_list_entry +type AccessListElementBatch struct { + IDs []int64 + Indexes []int64 + TxIDs []int64 + Addresses []string + StorageKeys []pq.StringArray +} + +// ReceiptBatch is the db model for eth.receipt_cids +type ReceiptBatch struct { + IDs []int64 + TxIDs []int64 + LeafCIDs []string + LeafMhKeys []string + PostStatuses []int64 + PostStates []string + Contracts []string + ContractHashes []string + LogRoots []string +} + +// StateNodeBatch is the db model for eth.state_cids +type StateNodeBatch struct { + IDs []int64 + HeaderIDs []int64 + Paths [][]byte + StateKeys []string + NodeTypes []int + CIDs []string + MhKeys []string + Diffs []bool +} + +// StorageNodeBatch is the db model for eth.storage_cids +type StorageNodeBatch struct { + IDs []int64 + StateIDs []int64 + Paths [][]byte + StorageKeys []string + NodeTypes []int + CIDs []string + MhKeys []string + Diffs []bool +} + +// StorageNodeWithStateKeyBatch is a db model for eth.storage_cids + eth.state_cids.state_key +type StorageNodeWithStateKeyBatch struct { + IDs []int64 + StateIDs []int64 + Paths [][]byte + StateKeys []string + StorageKeys []string + NodeTypes []int + CIDs []string + MhKeys []string + Diffs []bool +} + +// StateAccountBatch is a db model for an eth state account (decoded value of state leaf node) +type StateAccountBatch struct { + IDs []int64 + StateIDs []int64 + Balances []string + Nonces []int64 + CodeHashes [][]byte + StorageRoots []string +} + +// LogsBatch is the db model for eth.logs +type LogsBatch struct { + IDs []int64 + LeafCIDs []string + LeafMhKeys []string + ReceiptIDs []int64 + Addresses []string + Indexes []int64 + Data [][]byte + Topic0s []string + Topic1s []string + Topic2s []string + Topic3s []string +} diff --git a/statediff/indexer/models/v2/models.go b/statediff/indexer/models/v2/models.go new file mode 100644 index 000000000..d303826b7 --- /dev/null +++ b/statediff/indexer/models/v2/models.go @@ -0,0 +1,149 @@ +// VulcanizeDB +// Copyright © 2019 Vulcanize + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. + +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package models + +import "github.com/lib/pq" + +// HeaderModel is the db model for eth.header_cids +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"` + MhKey string `db:"mh_key"` + TotalDifficulty string `db:"td"` + NodeID int64 `db:"node_id"` + Reward string `db:"reward"` + StateRoot string `db:"state_root"` + UncleRoot string `db:"uncle_root"` + TxRoot string `db:"tx_root"` + RctRoot string `db:"receipt_root"` + Bloom []byte `db:"bloom"` + Timestamp uint64 `db:"timestamp"` + TimesValidated int64 `db:"times_validated"` + BaseFee *int64 `db:"base_fee"` +} + +// UncleModel is the db model for eth.uncle_cids +type UncleModel struct { + ID int64 `db:"id"` + HeaderID int64 `db:"header_id"` + BlockHash string `db:"block_hash"` + ParentHash string `db:"parent_hash"` + CID string `db:"cid"` + MhKey string `db:"mh_key"` + Reward string `db:"reward"` +} + +// TxModel is the db model for eth.transaction_cids +type TxModel struct { + ID int64 `db:"id"` + HeaderID int64 `db:"header_id"` + Index int64 `db:"index"` + TxHash string `db:"tx_hash"` + CID string `db:"cid"` + MhKey string `db:"mh_key"` + Dst string `db:"dst"` + Src string `db:"src"` + Data []byte `db:"tx_data"` + Type uint8 `db:"tx_type"` +} + +// AccessListElementModel is the db model for eth.access_list_entry +type AccessListElementModel struct { + ID int64 `db:"id"` + Index int64 `db:"index"` + TxID int64 `db:"tx_id"` + Address string `db:"address"` + StorageKeys pq.StringArray `db:"storage_keys"` +} + +// ReceiptModel is the db model for eth.receipt_cids +type ReceiptModel struct { + ID int64 `db:"id"` + TxID int64 `db:"tx_id"` + LeafCID string `db:"leaf_cid"` + LeafMhKey string `db:"leaf_mh_key"` + PostStatus uint64 `db:"post_status"` + PostState string `db:"post_state"` + Contract string `db:"contract"` + ContractHash string `db:"contract_hash"` + LogRoot string `db:"log_root"` +} + +// StateNodeModel is the db model for eth.state_cids +type StateNodeModel struct { + ID int64 `db:"id"` + HeaderID int64 `db:"header_id"` + Path []byte `db:"state_path"` + StateKey string `db:"state_leaf_key"` + NodeType int `db:"node_type"` + CID string `db:"cid"` + MhKey string `db:"mh_key"` + Diff bool `db:"diff"` +} + +// StorageNodeModel is the db model for eth.storage_cids +type StorageNodeModel struct { + ID int64 `db:"id"` + StateID int64 `db:"state_id"` + Path []byte `db:"storage_path"` + StorageKey string `db:"storage_leaf_key"` + NodeType int `db:"node_type"` + CID string `db:"cid"` + MhKey string `db:"mh_key"` + Diff bool `db:"diff"` +} + +// StorageNodeWithStateKeyModel is a db model for eth.storage_cids + eth.state_cids.state_key +type StorageNodeWithStateKeyModel struct { + ID int64 `db:"id"` + StateID int64 `db:"state_id"` + Path []byte `db:"storage_path"` + StateKey string `db:"state_leaf_key"` + StorageKey string `db:"storage_leaf_key"` + NodeType int `db:"node_type"` + CID string `db:"cid"` + MhKey string `db:"mh_key"` + Diff bool `db:"diff"` +} + +// StateAccountModel is a db model for an eth state account (decoded value of state leaf node) +type StateAccountModel struct { + ID int64 `db:"id"` + StateID int64 `db:"state_id"` + Balance string `db:"balance"` + Nonce uint64 `db:"nonce"` + CodeHash []byte `db:"code_hash"` + StorageRoot string `db:"storage_root"` +} + +// LogsModel is the db model for eth.logs +type LogsModel struct { + ID int64 `db:"id"` + LeafCID string `db:"leaf_cid"` + LeafMhKey string `db:"leaf_mh_key"` + ReceiptID int64 `db:"receipt_id"` + Address string `db:"address"` + Index int64 `db:"index"` + Data []byte `db:"log_data"` + Topic0 string `db:"topic0"` + Topic1 string `db:"topic1"` + Topic2 string `db:"topic2"` + Topic3 string `db:"topic3"` +} diff --git a/statediff/indexer/models/batch.go b/statediff/indexer/models/v3/batch.go similarity index 100% rename from statediff/indexer/models/batch.go rename to statediff/indexer/models/v3/batch.go diff --git a/statediff/indexer/models/models.go b/statediff/indexer/models/v3/models.go similarity index 97% rename from statediff/indexer/models/models.go rename to statediff/indexer/models/v3/models.go index 2caed1bcb..4088930e3 100644 --- a/statediff/indexer/models/models.go +++ b/statediff/indexer/models/v3/models.go @@ -18,12 +18,6 @@ package models import "github.com/lib/pq" -// IPLDModel is the db model for public.blocks -type IPLDModel struct { - Key string `db:"key"` - Data []byte `db:"data"` -} - // HeaderModel is the db model for eth.header_cids type HeaderModel struct { BlockNumber string `db:"block_number"`