enclavedb

package
v0.24.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 4, 2024 License: AGPL-3.0 Imports: 21 Imported by: 0

README

This package contains the logic to access the relational database.

Currently, it is at the first version which is a little rough.

Historical reasoning for the current design:

  1. Geth is implemented on top of levelDB, and so makes heavy use of the k/v mechanism.
  2. Ten uses EdglessDb in production, and sqlite in testing.
  3. Ten started out by implementing the k/v primitives on top of sql.
  4. Then we decided to use the SQL features to simplify some business logic, which required exposing the sql primitives.
  5. Eventually, we ended up using SQL for everything, except the evm functionality.

The current abstractions are reflecting the first 4 steps.

Note: This package also mixes the EnclaveDB and TransactionDB implementations

SQL implementation

The implementation to read/write data to the db is also quite crude.

It mixes the SQL logic with the implementations for the EnclaveDB and DBTransaction. The reason it has to do that is because they depend on the SQL k/v logic.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func BatchWasExecuted

func BatchWasExecuted(ctx context.Context, db *sql.DB, hash common.L2BatchHash) (bool, error)

func CountTransactionsPerAddress added in v0.24.1

func CountTransactionsPerAddress(ctx context.Context, db *sql.DB, address *gethcommon.Address) (uint64, error)

func DebugGetLogs

func DebugGetLogs(ctx context.Context, db *sql.DB, txHash common.TxHash) ([]*tracers.DebugLogs, error)

func Delete

func Delete(ctx context.Context, db *sql.DB, key []byte) error

func DeleteKeys

func DeleteKeys(ctx context.Context, db *sql.Tx, keys [][]byte) error

func FetchAttKey

func FetchAttKey(ctx context.Context, db *sql.DB, party common.Address) ([]byte, error)

func FetchBlock

func FetchBlock(ctx context.Context, db *sql.DB, hash common.L1BlockHash) (*types.Block, error)

todo - remove this. For now creates a "block" but without a body.

func FetchBlockHeaderByHeight

func FetchBlockHeaderByHeight(ctx context.Context, db *sql.DB, height *big.Int) (*types.Header, error)

func FetchConfig

func FetchConfig(ctx context.Context, db *sql.DB, key string) ([]byte, error)

func FetchConvertedBatchHash added in v0.21.0

func FetchConvertedBatchHash(ctx context.Context, db *sql.DB, seqNo uint64) (gethcommon.Hash, error)

func FetchHeadBlock

func FetchHeadBlock(ctx context.Context, db *sql.DB) (*types.Block, error)

func FetchL1Messages

func FetchL1Messages[T any](ctx context.Context, db *sql.DB, blockHash common.L1BlockHash, isTransfer bool) ([]T, error)

func FetchReorgedRollup

func FetchReorgedRollup(ctx context.Context, db *sql.DB, reorgedBlocks []common.L1BlockHash) (*common.L2BatchHash, error)

func FetchRollupMetadata added in v0.24.0

func FetchRollupMetadata(ctx context.Context, db *sql.DB, hash common.L2RollupHash) (*common.PublicRollupMetadata, error)

func FilterLogs

func FilterLogs(
	ctx context.Context,
	db *sql.DB,
	requestingAccount *gethcommon.Address,
	fromBlock, toBlock *big.Int,
	batchHash *common.L2BatchHash,
	addresses []gethcommon.Address,
	topics [][]gethcommon.Hash,
) ([]*types.Log, error)

func Get

func Get(ctx context.Context, db *sql.DB, key []byte) ([]byte, error)

func GetBlockId added in v0.24.1

func GetBlockId(ctx context.Context, db *sql.Tx, hash common.L1BlockHash) (int64, error)

func GetContractCreationTx

func GetContractCreationTx(ctx context.Context, db *sql.DB, address gethcommon.Address) (*gethcommon.Hash, error)

func GetTransactionsPerAddress added in v0.24.1

func GetTransactionsPerAddress(ctx context.Context, db *sql.DB, config *params.ChainConfig, address *gethcommon.Address, pagination *common.QueryPagination) (types.Receipts, error)

func GetTxId added in v0.24.1

func GetTxId(ctx context.Context, dbtx *sql.Tx, txHash gethcommon.Hash) (int64, error)

func HandleBlockArrivedAfterBatches added in v0.24.1

func HandleBlockArrivedAfterBatches(ctx context.Context, dbtx *sql.Tx, blockId int64, blockHash common.L1BlockHash) error

HandleBlockArrivedAfterBatches- handle the corner case where the block wasn't available when the batch was received

func Has

func Has(ctx context.Context, db *sql.DB, key []byte) (bool, error)

func NewIterator

func NewIterator(ctx context.Context, db *sql.DB, prefix []byte, start []byte) ethdb.Iterator

func Put

func Put(ctx context.Context, db *sql.DB, key []byte, value []byte) error

func PutKeyValues

func PutKeyValues(ctx context.Context, tx *sql.Tx, keys [][]byte, vals [][]byte) error

func ReadBatchByHash

func ReadBatchByHash(ctx context.Context, db *sql.DB, hash common.L2BatchHash) (*core.Batch, error)

func ReadBatchBySeqNo

func ReadBatchBySeqNo(ctx context.Context, db *sql.DB, seqNo uint64) (*core.Batch, error)

func ReadBatchesByBlock

func ReadBatchesByBlock(ctx context.Context, db *sql.DB, hash common.L1BlockHash) ([]*core.Batch, error)

func ReadCanonicalBatchByHeight

func ReadCanonicalBatchByHeight(ctx context.Context, db *sql.DB, height uint64) (*core.Batch, error)

func ReadCanonicalBatches added in v0.24.1

func ReadCanonicalBatches(ctx context.Context, db *sql.DB, startAtSeq uint64, endSeq uint64) ([]*core.Batch, error)

func ReadContractCreationCount

func ReadContractCreationCount(ctx context.Context, db *sql.DB) (*big.Int, error)

func ReadCurrentHeadBatch

func ReadCurrentHeadBatch(ctx context.Context, db *sql.DB) (*core.Batch, error)

todo - is there a better way to write this query?

func ReadCurrentSequencerNo

func ReadCurrentSequencerNo(ctx context.Context, db *sql.DB) (*big.Int, error)

func ReadNonCanonicalBatches

func ReadNonCanonicalBatches(ctx context.Context, db *sql.DB, startAtSeq uint64, endSeq uint64) ([]*core.Batch, error)

func ReadReceipt

func ReadReceipt(ctx context.Context, db *sql.DB, txHash common.L2TxHash, config *params.ChainConfig) (*types.Receipt, error)

func ReadReceiptsByBatchHash

func ReadReceiptsByBatchHash(ctx context.Context, db *sql.DB, hash common.L2BatchHash, config *params.ChainConfig) (types.Receipts, error)

ReadReceiptsByBatchHash retrieves all the transaction receipts belonging to a block, including its corresponding metadata fields. If it is unable to populate these metadata fields then nil is returned.

The current implementation populates these metadata fields by reading the receipts' corresponding block body, so if the block body is not found it will return nil even if the receipt itself is stored.

func ReadTransaction

func ReadTransaction(ctx context.Context, db *sql.DB, txHash gethcommon.Hash) (*types.Transaction, common.L2BatchHash, uint64, uint64, error)

func ReadUnexecutedBatches

func ReadUnexecutedBatches(ctx context.Context, db *sql.DB, from *big.Int) ([]*core.Batch, error)

func StoreEventLogs

func StoreEventLogs(ctx context.Context, dbtx *sql.Tx, receipts []*types.Receipt, batch *core.Batch, stateDB *state.StateDB) error

func UpdateCanonicalBlocks

func UpdateCanonicalBlocks(ctx context.Context, dbtx *sql.Tx, canonical []common.L1BlockHash, nonCanonical []common.L1BlockHash, logger gethlog.Logger) error

func WriteAttKey

func WriteAttKey(ctx context.Context, db *sql.Tx, party common.Address, key []byte) (sql.Result, error)

func WriteBatchAndTransactions

func WriteBatchAndTransactions(ctx context.Context, dbtx *sql.Tx, batch *core.Batch, convertedHash gethcommon.Hash, blockId int64) error

WriteBatchAndTransactions - persists the batch and the transactions

func WriteBatchExecution

func WriteBatchExecution(ctx context.Context, dbtx *sql.Tx, seqNo *big.Int, receipts []*types.Receipt) error

WriteBatchExecution - save receipts

func WriteBlock

func WriteBlock(ctx context.Context, dbtx *sql.Tx, b *types.Header) error

func WriteConfig

func WriteConfig(ctx context.Context, db *sql.Tx, key string, value []byte) (sql.Result, error)

func WriteConfigToTx

func WriteConfigToTx(ctx context.Context, dbtx *sql.Tx, key string, value any) (sql.Result, error)

func WriteL1Messages

func WriteL1Messages[T any](ctx context.Context, db *sql.Tx, blockId int64, messages []T, isValueTransfer bool) error

func WriteRollup

func WriteRollup(ctx context.Context, dbtx *sql.Tx, rollup *common.RollupHeader, blockId int64, internalHeader *common.CalldataRollupHeader) error

Types

type EnclaveDB

type EnclaveDB interface {
	ethdb.Database
	GetSQLDB() *sql.DB
	NewDBTransaction(ctx context.Context) (*sql.Tx, error)
}

EnclaveDB - An abstraction that implements the `ethdb.Database` on top of SQL, and also exposes underling sql primitives. Note: This might not be the best approach. Todo - consider a few design alternatives: The EnclaveDB - can be a factory that returns an Sql implementation of the ethdb.Database

func NewEnclaveDB

func NewEnclaveDB(db *sql.DB, rwdb *sql.DB, config config.EnclaveConfig, logger gethlog.Logger) (EnclaveDB, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL