enclavedb

package
v0.25.0 Latest Latest
Warning

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

Go to latest
Published: Jul 8, 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 CheckCanonicalValidity added in v0.25.0

func CheckCanonicalValidity(ctx context.Context, dbtx *sql.Tx) error

CheckCanonicalValidity - expensive but useful for debugging races

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 ExistsBatchAtHeight added in v0.25.0

func ExistsBatchAtHeight(ctx context.Context, dbTx *sql.Tx, height *big.Int) (bool, 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 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 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 IsCanonicalBatchHash added in v0.25.0

func IsCanonicalBatchHash(ctx context.Context, dbtx *sql.Tx, hash *gethcommon.Hash) (bool, error)

func IsCanonicalBatchSeq added in v0.25.0

func IsCanonicalBatchSeq(ctx context.Context, db *sql.DB, seqNo uint64) (bool, error)

func IsCanonicalBlock added in v0.25.0

func IsCanonicalBlock(ctx context.Context, dbtx *sql.Tx, hash *gethcommon.Hash) (bool, error)

func MarkBatchExecuted added in v0.25.0

func MarkBatchExecuted(ctx context.Context, dbtx *sql.Tx, seqNo *big.Int) 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 ReadBatchHeaderByHash added in v0.25.0

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

func ReadBatchHeaderBySeqNo added in v0.25.0

func ReadBatchHeaderBySeqNo(ctx context.Context, db *sql.DB, seqNo uint64) (*common.BatchHeader, error)

func ReadBatchTransactions added in v0.25.0

func ReadBatchTransactions(ctx context.Context, db *sql.DB, height uint64) ([]*common.L2Tx, error)

func ReadBatchesByBlock

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

func ReadCanonicalBatchHeaderByHeight added in v0.25.0

func ReadCanonicalBatchHeaderByHeight(ctx context.Context, db *sql.DB, height uint64) (*common.BatchHeader, error)

func ReadCanonicalBatches added in v0.24.1

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

func ReadContractAddress added in v0.25.0

func ReadContractAddress(ctx context.Context, dbTx *sql.Tx, addr gethcommon.Address) (*uint64, error)

func ReadContractCreationCount

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

func ReadContractOwner added in v0.25.0

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

func ReadCurrentHeadBatchHeader added in v0.25.0

func ReadCurrentHeadBatchHeader(ctx context.Context, db *sql.DB) (*common.BatchHeader, 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 ReadEoa added in v0.25.0

func ReadEoa(ctx context.Context, dbTx *sql.Tx, addr gethcommon.Address) (uint64, error)

func ReadEventTopic added in v0.25.0

func ReadEventTopic(ctx context.Context, dbTX *sql.Tx, topic []byte) (uint64, *uint64, error)

func ReadEventType added in v0.25.0

func ReadEventType(ctx context.Context, dbTX *sql.Tx, contractId uint64, eventSignature gethcommon.Hash) (uint64, bool, error)

func ReadNonCanonicalBatches

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

func ReadReceipt

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

func ReadTransaction

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

func ReadTransactionIdAndSender added in v0.25.0

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

func ReadUnexecutedBatches

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

func UpdateCanonicalBatch added in v0.25.0

func UpdateCanonicalBatch(ctx context.Context, dbtx *sql.Tx, isCanonical bool, blocks []common.L1BlockHash) error

func UpdateCanonicalBlock added in v0.25.0

func UpdateCanonicalBlock(ctx context.Context, dbtx *sql.Tx, isCanonical bool, blocks []common.L1BlockHash) error

func UpdateEventTopicLifecycle added in v0.25.0

func UpdateEventTopicLifecycle(ctx context.Context, dbTx *sql.Tx, etId uint64, isLifecycle bool) error

func WriteAttKey

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

func WriteBatchHeader added in v0.25.0

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

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 WriteContractAddress added in v0.25.0

func WriteContractAddress(ctx context.Context, dbTX *sql.Tx, contractAddress *gethcommon.Address, eoaId uint64) (*uint64, error)

func WriteEoa added in v0.25.0

func WriteEoa(ctx context.Context, dbTX *sql.Tx, sender gethcommon.Address) (uint64, error)

func WriteEventLog added in v0.25.0

func WriteEventLog(ctx context.Context, dbTX *sql.Tx, eventTypeId uint64, userTopics []*uint64, data []byte, logIdx uint, execTx uint64) error

func WriteEventTopic added in v0.25.0

func WriteEventTopic(ctx context.Context, dbTX *sql.Tx, topic *gethcommon.Hash, addressId *uint64) (uint64, error)

func WriteEventType added in v0.25.0

func WriteEventType(ctx context.Context, dbTX *sql.Tx, contractID *uint64, eventSignature gethcommon.Hash, isLifecycle bool) (uint64, error)

func WriteL1Messages

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

func WriteReceipt added in v0.25.0

func WriteReceipt(ctx context.Context, dbtx *sql.Tx, batchSeqNo uint64, txId *uint64, receipt []byte) (uint64, error)

func WriteRollup

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

func WriteTransactions added in v0.25.0

func WriteTransactions(ctx context.Context, dbtx *sql.Tx, batch *core.Batch, senders []*uint64) error

WriteTransactions - persists the batch and the transactions

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