Documentation ¶
Index ¶
- Constants
- Variables
- func IsRecoverableError(err error) bool
- func MarshalReceipt(receipt *StorageReceipt, tx Transaction) (map[string]interface{}, error)
- func ValidateTransaction(tx *gethTypes.Transaction, head *gethTypes.Header, signer gethTypes.Signer, ...) error
- type BlockEvents
- type CadenceEvents
- func (c *CadenceEvents) Blocks() ([]*types.Block, error)
- func (c *CadenceEvents) CadenceBlockID() flow.Identifier
- func (c *CadenceEvents) CadenceHeight() uint64
- func (c *CadenceEvents) Empty() bool
- func (c *CadenceEvents) Length() int
- func (c *CadenceEvents) Transactions() ([]Transaction, []*StorageReceipt, error)
- type DirectCall
- func (dc DirectCall) AccessList() gethTypes.AccessList
- func (dc DirectCall) BlobGas() uint64
- func (dc DirectCall) BlobGasFeeCap() *big.Int
- func (dc DirectCall) BlobHashes() []common.Hash
- func (dc DirectCall) Data() []byte
- func (dc DirectCall) From() (common.Address, error)
- func (dc DirectCall) Gas() uint64
- func (dc DirectCall) GasFeeCap() *big.Int
- func (dc DirectCall) GasPrice() *big.Int
- func (dc DirectCall) GasTipCap() *big.Int
- func (dc DirectCall) Hash() common.Hash
- func (dc DirectCall) MarshalBinary() ([]byte, error)
- func (dc DirectCall) Nonce() uint64
- func (dc DirectCall) RawSignatureValues() (v *big.Int, r *big.Int, s *big.Int)
- func (dc DirectCall) Size() uint64
- func (dc DirectCall) To() *common.Address
- func (dc DirectCall) Type() uint8
- func (dc DirectCall) Value() *big.Int
- type Engine
- type EngineStatus
- type Publisher
- type RecoverableError
- type RestartableEngine
- type SequentialHeight
- type StorageReceipt
- type StorageReceiptV0
- type Subscriber
- type Subscription
- type Transaction
- type TransactionCall
Constants ¶
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 ¶
var ( SafeBlockNumber = big.NewInt(-4) FinalizedBlockNumber = big.NewInt(-3) LatestBlockNumber = big.NewInt(-2) PendingBlockNumber = big.NewInt(-1) EarliestBlockNumber = big.NewInt(0) )
var ( ErrDisconnected = NewRecoverableError(errors.New("disconnected")) ErrInvalidEVMTransaction = errors.New("invalid evm transaction") )
var DirectCallHashCalculationBlockHeightChange uint64 = 0
TEMP: Remove `DirectCallHashCalculationBlockHeightChange` after PreviewNet is reset
var ErrInvalidHeight = errors.New("invalid height")
Functions ¶
func IsRecoverableError ¶ added in v0.2.0
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) 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 (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) 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) 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 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)