mirror of
https://github.com/arnaucube/hermez-node.git
synced 2026-02-07 03:16:45 +01:00
Definition of txpool interface
This commit is contained in:
118
l2db/l2db.go
Normal file
118
l2db/l2db.go
Normal file
@@ -0,0 +1,118 @@
|
||||
package l2db
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
eth "github.com/ethereum/go-ethereum/common"
|
||||
"github.com/hermeznetwork/hermez-node/common"
|
||||
"github.com/jinzhu/gorm"
|
||||
)
|
||||
|
||||
// L2DB stores L2 txs and authorization registers received by the coordinator and keeps them until they are no longer relevant
|
||||
// due to them being forged or invalid after a safety period
|
||||
type L2DB struct {
|
||||
db *gorm.DB
|
||||
safetyPeriod uint16
|
||||
ttl time.Duration
|
||||
maxTxs uint32
|
||||
}
|
||||
|
||||
// NewL2DB creates a L2DB.
|
||||
// More info on how to set dbDialect and dbArgs here: http://gorm.io/docs/connecting_to_the_database.html
|
||||
// safetyPeriod is the ammount of blockchain blocks that must be waited before deleting anything (to avoid reorg problems).
|
||||
// maxTxs indicates the desired maximum amount of txs stored on the L2DB.
|
||||
// TTL indicates the maximum amount of time that a tx can be in the L2DB
|
||||
// (to prevent tx that won't ever be forged to stay there, will be used if maxTxs is exceeded).
|
||||
// autoPurgePeriod will be used as delay between calls to Purge. If the value is 0, it will be disabled.
|
||||
func NewL2DB(
|
||||
dbDialect, dbArgs string,
|
||||
safetyPeriod uint16,
|
||||
maxTxs uint32,
|
||||
TTL time.Duration,
|
||||
) (*L2DB, error) {
|
||||
// Stablish DB connection
|
||||
db, err := gorm.Open(dbDialect, dbArgs)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Create or update SQL schemas
|
||||
// WARNING: AutoMigrate will ONLY create tables, missing columns and missing indexes,
|
||||
// and WON’T change existing column’s type or delete unused columns to protect your data.
|
||||
// more info: http://gorm.io/docs/migration.html
|
||||
db.AutoMigrate(&common.PoolL2Tx{})
|
||||
// TODO: db.AutoMigrate(&common.RegisterAuthorization{})
|
||||
|
||||
return &L2DB{
|
||||
db: db,
|
||||
safetyPeriod: safetyPeriod,
|
||||
ttl: TTL,
|
||||
maxTxs: maxTxs,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// AddTx inserts a tx into the L2DB
|
||||
func (l2db *L2DB) AddTx(tx *common.PoolL2Tx) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddRegisterAuthorization inserts a register authorization into the DB
|
||||
func (l2db *L2DB) AddRegisterAuthorization() error { // TODO: AddRegisterAuthorization(auth &common.RegisterAuthorization)
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetTx return the specified Tx
|
||||
func (l2db *L2DB) GetTx(txID common.TxID) (*common.PoolL2Tx, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// GetPendingTxs return all the pending txs of the L2DB
|
||||
func (l2db *L2DB) GetPendingTxs() ([]common.PoolL2Tx, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// GetRegisterAuthorization return the authorization to make registers of an Etherum address
|
||||
func (l2db *L2DB) GetRegisterAuthorization(ethAddr eth.Address) (int, error) { // TODO: int will be changed to *common.RegisterAuthorization
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
// StartForging updates the state of the transactions that will begin the forging process.
|
||||
// The state of the txs referenced by txIDs will be changed from Pending -> Forging
|
||||
func (l2db *L2DB) StartForging(txIDs []common.TxID) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// DoneForging updates the state of the transactions that have been forged
|
||||
// so the state of the txs referenced by txIDs will be changed from Forging -> Forged
|
||||
func (l2db *L2DB) DoneForging(txIDs []common.TxID) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// InvalidateTxs updates the state of the transactions that are invalid.
|
||||
// The state of the txs referenced by txIDs will be changed from * -> Invalid
|
||||
func (l2db *L2DB) InvalidateTxs(txIDs []common.TxID) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// CheckNonces invalidate txs with nonces that are smaller than their respective accounts nonces.
|
||||
// The state of the affected txs will be changed from Pending -> Invalid
|
||||
func (l2db *L2DB) CheckNonces(updatedAccounts []common.Account) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Reorg updates the state of txs that were updated in a batch that has been discarted due to a blockchian reorg.
|
||||
// The state of the affected txs can change form Forged -> Pending or from Invalid -> Pending
|
||||
func (l2db *L2DB) Reorg(lastValidBatch common.BatchNum) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Purge deletes transactions that have been forged or marked as invalid for longer than the safety period
|
||||
// it also deletes txs that has been in the L2DB for longer than the ttl if maxTxs has been exceeded
|
||||
func (l2db *L2DB) Purge() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Close frees the resources used by the L2DB
|
||||
func (l2db *L2DB) Close() error {
|
||||
return l2db.db.Close()
|
||||
}
|
||||
Reference in New Issue
Block a user