models

package
v0.23.1 Latest Latest
Warning

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

Go to latest
Published: Jul 19, 2024 License: Apache-2.0 Imports: 21 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// txSlotSize is used to calculate how many data slots a single transaction
	// takes up based on its size. The slots are used as DoS protection, ensuring
	// that validating a new transaction remains a constant operation (in reality
	// O(maxslots), where max slots are 4 currently).
	TxSlotSize = 32 * 1024

	// txMaxSize is the maximum size a single transaction can have. This field has
	// non-trivial consequences: larger transactions are significantly harder and
	// more expensive to propagate; larger transactions also take more resources
	// to validate whether they fit into the pool or not.
	TxMaxSize = 4 * TxSlotSize // 128KB
)

Variables

View Source
var (
	SafeBlockNumber      = big.NewInt(-4)
	FinalizedBlockNumber = big.NewInt(-3)
	LatestBlockNumber    = big.NewInt(-2)
	PendingBlockNumber   = big.NewInt(-1)
	EarliestBlockNumber  = big.NewInt(0)
)
View Source
var (
	ErrDisconnected          = NewRecoverableError(errors.New("disconnected"))
	ErrInvalidEVMTransaction = errors.New("invalid evm transaction")
)
View Source
var DirectCallHashCalculationBlockHeightChange uint64 = 0

TEMP: Remove `DirectCallHashCalculationBlockHeightChange` after PreviewNet is reset

View Source
var ErrInvalidHeight = errors.New("invalid height")

Functions

func IsRecoverableError added in v0.2.0

func IsRecoverableError(err error) bool

func MarshalReceipt added in v0.4.0

func MarshalReceipt(
	receipt *StorageReceipt,
	tx Transaction,
) (map[string]interface{}, error)

MarshalReceipt takes a receipt and its associated transaction, and marshals the receipt to the proper structure needed by eth_getTransactionReceipt.

func ValidateTransaction added in v0.21.0

func ValidateTransaction(
	tx *gethTypes.Transaction,
	head *gethTypes.Header,
	signer gethTypes.Signer,
	opts *txpool.ValidationOptions,
) error

Types

type BlockEvents added in v0.12.0

type BlockEvents struct {
	Events *CadenceEvents
	Err    error
}

BlockEvents is a wrapper around events streamed, and it also contains an error

func NewBlockEvents added in v0.12.0

func NewBlockEvents(events flow.BlockEvents) BlockEvents

func NewBlockEventsError added in v0.12.0

func NewBlockEventsError(err error) BlockEvents

type CadenceEvents added in v0.6.0

type CadenceEvents struct {
	// contains filtered or unexported fields
}

func NewCadenceEvents added in v0.6.0

func NewCadenceEvents(events flow.BlockEvents) *CadenceEvents

func (*CadenceEvents) Blocks added in v0.6.0

func (c *CadenceEvents) Blocks() ([]*types.Block, error)

Blocks finds the block evm events and decodes it into the blocks slice, if no block events are found nil slice is returned.

Return values: blocks, nil - if blocks are found nil, nil - if no block are found nil, err - unexpected error

func (*CadenceEvents) CadenceBlockID added in v0.16.0

func (c *CadenceEvents) CadenceBlockID() flow.Identifier

CadenceBlockID returns the Flow Cadence block ID.

func (*CadenceEvents) CadenceHeight added in v0.6.0

func (c *CadenceEvents) CadenceHeight() uint64

CadenceHeight returns the Flow Cadence height at which the events were emitted.

func (*CadenceEvents) Empty added in v0.6.0

func (c *CadenceEvents) Empty() bool

Empty checks if there are any evm block or transactions events. If there are no evm block or transactions events this is a heartbeat event that is broadcast in intervals.

func (*CadenceEvents) Length added in v0.6.0

func (c *CadenceEvents) Length() int

Length of the Cadence events emitted.

func (*CadenceEvents) Transactions added in v0.6.0

func (c *CadenceEvents) Transactions() ([]Transaction, []*StorageReceipt, error)

Transactions finds all the transactions evm events and decodes them into transaction slice, if no transactions is found nil is returned.

Return values: []transaction, nil - if transactions are found nil, nil - if no transactions are found nil, err - unexpected error

type DirectCall added in v0.4.0

type DirectCall struct {
	*types.DirectCall
	// contains filtered or unexported fields
}

func (DirectCall) AccessList added in v0.20.0

func (dc DirectCall) AccessList() gethTypes.AccessList

func (DirectCall) BlobGas added in v0.4.0

func (dc DirectCall) BlobGas() uint64

func (DirectCall) BlobGasFeeCap added in v0.20.0

func (dc DirectCall) BlobGasFeeCap() *big.Int

func (DirectCall) BlobHashes added in v0.20.0

func (dc DirectCall) BlobHashes() []common.Hash

func (DirectCall) Data added in v0.4.0

func (dc DirectCall) Data() []byte

func (DirectCall) From added in v0.4.0

func (dc DirectCall) From() (common.Address, error)

func (DirectCall) Gas added in v0.4.0

func (dc DirectCall) Gas() uint64

func (DirectCall) GasFeeCap added in v0.20.0

func (dc DirectCall) GasFeeCap() *big.Int

func (DirectCall) GasPrice added in v0.4.0

func (dc DirectCall) GasPrice() *big.Int

func (DirectCall) GasTipCap added in v0.20.0

func (dc DirectCall) GasTipCap() *big.Int

func (DirectCall) Hash added in v0.4.0

func (dc DirectCall) Hash() common.Hash

func (DirectCall) MarshalBinary added in v0.4.0

func (dc DirectCall) MarshalBinary() ([]byte, error)

func (DirectCall) Nonce added in v0.4.0

func (dc DirectCall) Nonce() uint64

func (DirectCall) RawSignatureValues added in v0.4.0

func (dc DirectCall) RawSignatureValues() (
	v *big.Int,
	r *big.Int,
	s *big.Int,
)

func (DirectCall) Size added in v0.4.0

func (dc DirectCall) Size() uint64

func (DirectCall) To added in v0.4.0

func (dc DirectCall) To() *common.Address

func (DirectCall) Type added in v0.4.0

func (dc DirectCall) Type() uint8

func (DirectCall) Value added in v0.4.0

func (dc DirectCall) Value() *big.Int

type Engine

type Engine interface {
	// Run the engine with context, errors are not expected.
	Run(ctx context.Context) error
	// Stop the engine.
	Stop()
	// Done signals the engine was stopped.
	Done() <-chan struct{}
	// Ready signals the engine was started.
	Ready() <-chan struct{}
}

Engine defines a processing unit

type EngineStatus

type EngineStatus struct {
	// contains filtered or unexported fields
}

func NewEngineStatus

func NewEngineStatus() *EngineStatus

func (*EngineStatus) IsDone

func (e *EngineStatus) IsDone() <-chan struct{}

func (*EngineStatus) IsReady

func (e *EngineStatus) IsReady() <-chan struct{}

func (*EngineStatus) IsStopped

func (e *EngineStatus) IsStopped() <-chan struct{}

func (*EngineStatus) MarkDone

func (e *EngineStatus) MarkDone()

func (*EngineStatus) MarkReady

func (e *EngineStatus) MarkReady()

func (*EngineStatus) MarkStopped

func (e *EngineStatus) MarkStopped()

type Publisher added in v0.23.1

type Publisher struct {
	// contains filtered or unexported fields
}

func NewPublisher added in v0.23.1

func NewPublisher() *Publisher

func (*Publisher) Publish added in v0.23.1

func (p *Publisher) Publish(data any)

func (*Publisher) Subscribe added in v0.23.1

func (p *Publisher) Subscribe(s Subscriber)

func (*Publisher) Unsubscribe added in v0.23.1

func (p *Publisher) Unsubscribe(s Subscriber)

type RecoverableError added in v0.2.0

type RecoverableError struct {
	// contains filtered or unexported fields
}

RecoverableError is used to signal any types of errors that if encountered could be retried again

func NewRecoverableError added in v0.2.0

func NewRecoverableError(err error) RecoverableError

func (RecoverableError) Error added in v0.2.0

func (r RecoverableError) Error() string

func (RecoverableError) Unwrap added in v0.2.0

func (r RecoverableError) Unwrap() error

type RestartableEngine

type RestartableEngine struct {
	// contains filtered or unexported fields
}

RestartableEngine is an engine wrapper that tries to restart the engine in case of starting errors.

The strategy of the restarts contains Fibonacci backoff time and limited number of retries that can be configured. Here are backoff values for different retries provided: 1s 1s 2s 3s 5s 8s 13s 21s 34s 55s 1m29s 2m24s 3m53s 6m17s 10m10s 16m27s 26m37s 43m4s 1h9m41s

func NewRestartableEngine added in v0.2.0

func NewRestartableEngine(engine Engine, retries uint, logger zerolog.Logger) *RestartableEngine

func (*RestartableEngine) Done

func (r *RestartableEngine) Done() <-chan struct{}

func (*RestartableEngine) Ready

func (r *RestartableEngine) Ready() <-chan struct{}

func (*RestartableEngine) Run

func (r *RestartableEngine) Run(ctx context.Context) error

func (*RestartableEngine) Stop

func (r *RestartableEngine) Stop()

type SequentialHeight

type SequentialHeight struct {
	// contains filtered or unexported fields
}

SequentialHeight tracks a block height and enforces rules about the valid next height.

func NewSequentialHeight

func NewSequentialHeight(init uint64) *SequentialHeight

func (*SequentialHeight) Increment

func (s *SequentialHeight) Increment(nextHeight uint64) error

Increment the height value according to the rules. A valid next height must be either incremented by one, or must be the same as previous height to make the action idempotent. Expected errors: if the height is not incremented according to the rules a ErrInvalidHeight error is returned

func (*SequentialHeight) Load

func (s *SequentialHeight) Load() uint64

type StorageReceipt

type StorageReceipt struct {
	Type              uint8  `json:"type,omitempty"`
	PostState         []byte `json:"root"`
	Status            uint64 `json:"status"`
	CumulativeGasUsed uint64 `json:"cumulativeGasUsed"`
	// todo we could skip bloom to optimize storage and dynamically recalculate it
	Bloom             gethTypes.Bloom  `json:"logsBloom"`
	Logs              []*gethTypes.Log `json:"logs"`
	TxHash            common.Hash      `json:"transactionHash"`
	ContractAddress   common.Address   `json:"contractAddress"`
	GasUsed           uint64           `json:"gasUsed"`
	EffectiveGasPrice *big.Int         `json:"effectiveGasPrice"`
	BlobGasUsed       uint64           `json:"blobGasUsed,omitempty"`
	BlobGasPrice      *big.Int         `json:"blobGasPrice,omitempty"`
	BlockHash         common.Hash      `json:"blockHash,omitempty"`
	BlockNumber       *big.Int         `json:"blockNumber,omitempty"`
	TransactionIndex  uint             `json:"transactionIndex"`
	RevertReason      []byte           `json:"revertReason"`
}

StorageReceipt is a receipt representation for storage.

This struct copies the geth.Receipt type found here: https://github.com/ethereum/go-ethereum/blob/9bbb9df18549d6f81c3d1f4fc6c65f71bc92490d/core/types/receipt.go#L52 the reason is if we use geth.Receipt some values will be skipped when RLP encoding which is because geth node has the data locally, but we don't in evm gateway, so we can not reproduce those values and we need to store them

func NewStorageReceipt added in v0.21.0

func NewStorageReceipt(receipt *gethTypes.Receipt, revertReason []byte) *StorageReceipt

func (*StorageReceipt) ToGethReceipt added in v0.21.0

func (sr *StorageReceipt) ToGethReceipt() *gethTypes.Receipt

type StorageReceiptV0 added in v0.22.2

type StorageReceiptV0 struct {
	Type              uint8
	PostState         []byte
	Status            uint64
	CumulativeGasUsed uint64
	Bloom             gethTypes.Bloom
	Logs              []*gethTypes.Log
	TxHash            common.Hash
	ContractAddress   common.Address
	GasUsed           uint64
	EffectiveGasPrice *big.Int
	BlobGasUsed       uint64
	BlobGasPrice      *big.Int
	BlockHash         common.Hash
	BlockNumber       *big.Int
	TransactionIndex  uint
}

TEMP: Remove this type after PreviewNet is reset

func (*StorageReceiptV0) ToNewReceipt added in v0.22.2

func (sr *StorageReceiptV0) ToNewReceipt() *StorageReceipt

type Subscriber added in v0.23.1

type Subscriber interface {
	ID() uuid.UUID
	Notify(data any)
	Error() <-chan error
}

type Subscription added in v0.23.1

type Subscription struct {
	// contains filtered or unexported fields
}

func NewSubscription added in v0.23.1

func NewSubscription(callback func(any) error) *Subscription

func (*Subscription) Error added in v0.23.1

func (b *Subscription) Error() <-chan error

func (*Subscription) ID added in v0.23.1

func (b *Subscription) ID() uuid.UUID

func (*Subscription) Notify added in v0.23.1

func (b *Subscription) Notify(data any)

type Transaction added in v0.4.0

type Transaction interface {
	Hash() common.Hash
	RawSignatureValues() (v *big.Int, r *big.Int, s *big.Int)
	From() (common.Address, error)
	To() *common.Address
	Data() []byte
	Nonce() uint64
	Value() *big.Int
	Type() uint8
	Gas() uint64
	GasFeeCap() *big.Int
	GasTipCap() *big.Int
	GasPrice() *big.Int
	BlobGas() uint64
	BlobGasFeeCap() *big.Int
	BlobHashes() []common.Hash
	Size() uint64
	AccessList() gethTypes.AccessList
	MarshalBinary() ([]byte, error)
}

func UnmarshalTransaction added in v0.4.0

func UnmarshalTransaction(value []byte, blockHeight uint64) (Transaction, error)

type TransactionCall added in v0.4.0

type TransactionCall struct {
	*gethTypes.Transaction
}

func (TransactionCall) From added in v0.4.0

func (tc TransactionCall) From() (common.Address, error)

func (TransactionCall) Hash added in v0.4.0

func (tc TransactionCall) Hash() common.Hash

func (TransactionCall) MarshalBinary added in v0.4.0

func (tc TransactionCall) MarshalBinary() ([]byte, error)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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