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"`