use types/models exported from vdb geth
This commit is contained in:
parent
fb5a95d874
commit
f83ab82424
@ -17,23 +17,13 @@ package types
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// node for holding trie node information
|
// NodeType for explicitly setting type of node
|
||||||
type Node struct {
|
type NodeType int
|
||||||
NodeType nodeType
|
|
||||||
Path []byte
|
|
||||||
Key common.Hash
|
|
||||||
Value []byte
|
|
||||||
}
|
|
||||||
|
|
||||||
// nodeType for explicitly setting type of node
|
|
||||||
type nodeType int
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
Branch nodeType = iota
|
Branch NodeType = iota
|
||||||
Extension
|
Extension
|
||||||
Leaf
|
Leaf
|
||||||
Removed
|
Removed
|
||||||
@ -41,7 +31,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// CheckKeyType checks what type of key we have
|
// CheckKeyType checks what type of key we have
|
||||||
func CheckKeyType(elements []interface{}) (nodeType, error) {
|
func CheckKeyType(elements []interface{}) (NodeType, error) {
|
||||||
if len(elements) > 2 {
|
if len(elements) > 2 {
|
||||||
return Branch, nil
|
return Branch, nil
|
||||||
}
|
}
|
||||||
|
@ -3,15 +3,19 @@ package types
|
|||||||
import (
|
import (
|
||||||
"math/big"
|
"math/big"
|
||||||
|
|
||||||
|
"github.com/ethereum/go-ethereum/statediff/indexer/models"
|
||||||
|
"github.com/ipfs/go-cid"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/core/types"
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Publisher interface {
|
type Publisher interface {
|
||||||
PublishHeader(header *types.Header) error
|
PublishHeader(header *types.Header) error
|
||||||
PublishStateNode(node *Node, headerID string, height *big.Int, tx Tx) error
|
PublishStateLeafNode(node *models.StateNodeModel, tx Tx) error
|
||||||
PublishStorageNode(node *Node, headerID string, height *big.Int, statePath []byte, tx Tx) error
|
PublishStorageLeafNode(node *models.StorageNodeModel, tx Tx) error
|
||||||
PublishCode(height *big.Int, codeHash common.Hash, codeBytes []byte, tx Tx) error
|
PublishCode(height *big.Int, codeHash common.Hash, codeBytes []byte, tx Tx) error
|
||||||
|
PublishIPLD(c cid.Cid, raw []byte, height *big.Int, tx Tx) (string, error)
|
||||||
BeginTx() (Tx, error)
|
BeginTx() (Tx, error)
|
||||||
PrepareTxForBatch(tx Tx, batchSize uint) (Tx, error)
|
PrepareTxForBatch(tx Tx, batchSize uint) (Tx, error)
|
||||||
}
|
}
|
||||||
|
@ -1,76 +0,0 @@
|
|||||||
package types
|
|
||||||
|
|
||||||
var TableIPLDBlock = Table{
|
|
||||||
`public.blocks`,
|
|
||||||
[]column{
|
|
||||||
{"block_number", bigint},
|
|
||||||
{"key", text},
|
|
||||||
{"data", bytea},
|
|
||||||
},
|
|
||||||
"ON CONFLICT (key, block_number) DO NOTHING",
|
|
||||||
}
|
|
||||||
|
|
||||||
var TableNodeInfo = Table{
|
|
||||||
Name: `public.nodes`,
|
|
||||||
Columns: []column{
|
|
||||||
{"genesis_block", varchar},
|
|
||||||
{"network_id", varchar},
|
|
||||||
{"node_id", varchar},
|
|
||||||
{"client_name", varchar},
|
|
||||||
{"chain_id", integer},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
var TableHeader = Table{
|
|
||||||
"eth.header_cids",
|
|
||||||
[]column{
|
|
||||||
{"block_number", bigint},
|
|
||||||
{"block_hash", varchar},
|
|
||||||
{"parent_hash", varchar},
|
|
||||||
{"cid", text},
|
|
||||||
{"td", numeric},
|
|
||||||
{"node_id", varchar},
|
|
||||||
{"reward", numeric},
|
|
||||||
{"state_root", varchar},
|
|
||||||
{"tx_root", varchar},
|
|
||||||
{"receipt_root", varchar},
|
|
||||||
{"uncles_hash", varchar},
|
|
||||||
{"bloom", bytea},
|
|
||||||
{"timestamp", numeric},
|
|
||||||
{"mh_key", text},
|
|
||||||
{"times_validated", integer},
|
|
||||||
{"coinbase", varchar},
|
|
||||||
},
|
|
||||||
"ON CONFLICT (block_hash, block_number) DO UPDATE SET (parent_hash, cid, td, node_id, reward, state_root, tx_root, receipt_root, uncles_hash, bloom, timestamp, mh_key, times_validated, coinbase) = (EXCLUDED.parent_hash, EXCLUDED.cid, EXCLUDED.td, EXCLUDED.node_id, EXCLUDED.reward, EXCLUDED.state_root, EXCLUDED.tx_root, EXCLUDED.receipt_root, EXCLUDED.uncles_hash, EXCLUDED.bloom, EXCLUDED.timestamp, EXCLUDED.mh_key, eth.header_cids.times_validated + 1, EXCLUDED.coinbase)",
|
|
||||||
}
|
|
||||||
|
|
||||||
var TableStateNode = Table{
|
|
||||||
"eth.state_cids",
|
|
||||||
[]column{
|
|
||||||
{"block_number", bigint},
|
|
||||||
{"header_id", varchar},
|
|
||||||
{"state_leaf_key", varchar},
|
|
||||||
{"cid", text},
|
|
||||||
{"state_path", bytea},
|
|
||||||
{"node_type", integer},
|
|
||||||
{"diff", boolean},
|
|
||||||
{"mh_key", text},
|
|
||||||
},
|
|
||||||
"ON CONFLICT (header_id, state_path, block_number) DO UPDATE SET (state_leaf_key, cid, node_type, diff, mh_key) = (EXCLUDED.state_leaf_key, EXCLUDED.cid, EXCLUDED.node_type, EXCLUDED.diff, EXCLUDED.mh_key)",
|
|
||||||
}
|
|
||||||
|
|
||||||
var TableStorageNode = Table{
|
|
||||||
"eth.storage_cids",
|
|
||||||
[]column{
|
|
||||||
{"block_number", bigint},
|
|
||||||
{"header_id", varchar},
|
|
||||||
{"state_path", bytea},
|
|
||||||
{"storage_leaf_key", varchar},
|
|
||||||
{"cid", text},
|
|
||||||
{"storage_path", bytea},
|
|
||||||
{"node_type", integer},
|
|
||||||
{"diff", boolean},
|
|
||||||
{"mh_key", text},
|
|
||||||
},
|
|
||||||
"ON CONFLICT (header_id, state_path, storage_path, block_number) DO UPDATE SET (storage_leaf_key, cid, node_type, diff, mh_key) = (EXCLUDED.storage_leaf_key, EXCLUDED.cid, EXCLUDED.node_type, EXCLUDED.diff, EXCLUDED.mh_key)",
|
|
||||||
}
|
|
@ -1,79 +0,0 @@
|
|||||||
package types
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
type colType int
|
|
||||||
|
|
||||||
const (
|
|
||||||
integer colType = iota
|
|
||||||
boolean
|
|
||||||
bigint
|
|
||||||
numeric
|
|
||||||
bytea
|
|
||||||
varchar
|
|
||||||
text
|
|
||||||
)
|
|
||||||
|
|
||||||
type column struct {
|
|
||||||
name string
|
|
||||||
typ colType
|
|
||||||
}
|
|
||||||
type Table struct {
|
|
||||||
Name string
|
|
||||||
Columns []column
|
|
||||||
ConflictClause string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (tbl *Table) ToCsvRow(args ...interface{}) []string {
|
|
||||||
var row []string
|
|
||||||
for i, col := range tbl.Columns {
|
|
||||||
row = append(row, col.typ.formatter()(args[i]))
|
|
||||||
}
|
|
||||||
return row
|
|
||||||
}
|
|
||||||
|
|
||||||
func (tbl *Table) ToInsertStatement() string {
|
|
||||||
var colnames, placeholders []string
|
|
||||||
for i, col := range tbl.Columns {
|
|
||||||
colnames = append(colnames, col.name)
|
|
||||||
placeholders = append(placeholders, fmt.Sprintf("$%d", i+1))
|
|
||||||
}
|
|
||||||
return fmt.Sprintf(
|
|
||||||
"INSERT INTO %s (%s) VALUES (%s) %s",
|
|
||||||
tbl.Name, strings.Join(colnames, ", "), strings.Join(placeholders, ", "), tbl.ConflictClause,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
type colfmt = func(interface{}) string
|
|
||||||
|
|
||||||
func sprintf(f string) colfmt {
|
|
||||||
return func(x interface{}) string { return fmt.Sprintf(f, x) }
|
|
||||||
}
|
|
||||||
|
|
||||||
func (typ colType) formatter() colfmt {
|
|
||||||
switch typ {
|
|
||||||
case integer:
|
|
||||||
return sprintf("%d")
|
|
||||||
case boolean:
|
|
||||||
return func(x interface{}) string {
|
|
||||||
if x.(bool) {
|
|
||||||
return "t"
|
|
||||||
}
|
|
||||||
return "f"
|
|
||||||
}
|
|
||||||
case bigint:
|
|
||||||
return sprintf("%s")
|
|
||||||
case numeric:
|
|
||||||
return sprintf("%d")
|
|
||||||
case bytea:
|
|
||||||
return sprintf(`\x%x`)
|
|
||||||
case varchar:
|
|
||||||
return sprintf("%s")
|
|
||||||
case text:
|
|
||||||
return sprintf("%s")
|
|
||||||
}
|
|
||||||
panic("unreachable")
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user