types

package
v0.0.0-...-231e548 Latest Latest
Warning

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

Go to latest
Published: Jan 25, 2024 License: Apache-2.0 Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const (
	HashLength    = 32
	AddressLength = 20

	SignatureSize = 4
)
View Source
const BloomByteLength = 256
View Source
const (
	RLPSingleByteUpperLimit = 0x7f
)
View Source
const (
	// StateTransactionGasLimit is arbitrary default gas limit for state transactions
	StateTransactionGasLimit = 1000000
)

Variables

View Source
var (
	// ZeroAddress is the default zero address
	ZeroAddress = Address{}

	// ZeroHash is the default zero hash
	ZeroHash = Hash{}

	// ZeroNonce is the default empty nonce
	ZeroNonce = Nonce{}

	// EmptyRootHash is the root when there are no transactions
	EmptyRootHash = StringToHash("0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421")

	// EmptyUncleHash is the root when there are no uncles
	EmptyUncleHash = StringToHash("0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347")

	// EmptyCodeHash is the root where there is no code.
	// Equivalent of: `types.BytesToHash(crypto.Keccak256(nil))`
	EmptyCodeHash = StringToHash("0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470")

	// ErrTxTypeNotSupported denotes that transaction is not supported
	ErrTxTypeNotSupported = errors.New("transaction type not supported")

	// ErrInsufficientFunds denotes that account has insufficient funds for transaction execution
	ErrInsufficientFunds = errors.New("insufficient funds for execution")
)
View Source
var (

	// this will change to use the generated code, but for now, we leave it as is, because of the circular import
	ExecuteStateSyncABIMethod, _ = abi.NewMethod("function execute(" +
		"bytes32[] proof, " +
		"tuple(uint256 id, address sender, address receiver, bytes data) obj)")
)
View Source
var HeaderHash func(h *Header) Hash

Functions

func AddressToString

func AddressToString(address Address) string

func IsValidAddress

func IsValidAddress(address string) error

IsValidAddress checks if provided string is a valid Ethereum address

func MarshalRLPTo

func MarshalRLPTo(obj marshalRLPFunc, dst []byte) []byte

func RegisterTxHashFork

func RegisterTxHashFork(txHashWithTypeFork string) error

func StringToBytes

func StringToBytes(str string) []byte

func UnmarshalRlp

func UnmarshalRlp(obj unmarshalRLPFunc, input []byte) error

Types

type Address

type Address [AddressLength]byte

func BytesToAddress

func BytesToAddress(b []byte) Address

func StringToAddress

func StringToAddress(str string) Address

func (Address) Bytes

func (a Address) Bytes() []byte

func (Address) MarshalText

func (a Address) MarshalText() ([]byte, error)

func (Address) Ptr

func (a Address) Ptr() *Address

func (Address) String

func (a Address) String() string

func (*Address) UnmarshalText

func (a *Address) UnmarshalText(input []byte) error

UnmarshalText parses an address in hex syntax.

type Block

type Block struct {
	Header       *Header
	Transactions []*Transaction
	Uncles       []*Header
	// contains filtered or unexported fields
}

func (*Block) Body

func (b *Block) Body() *Body

func (*Block) Hash

func (b *Block) Hash() Hash

func (*Block) MarshalRLP

func (b *Block) MarshalRLP() []byte

func (*Block) MarshalRLPTo

func (b *Block) MarshalRLPTo(dst []byte) []byte

func (*Block) MarshalRLPWith

func (b *Block) MarshalRLPWith(ar *fastrlp.Arena) *fastrlp.Value

func (*Block) Number

func (b *Block) Number() uint64

func (*Block) ParentHash

func (b *Block) ParentHash() Hash

func (*Block) Size

func (b *Block) Size() uint64

func (*Block) String

func (b *Block) String() string

func (*Block) UnmarshalRLP

func (b *Block) UnmarshalRLP(input []byte) error

func (*Block) WithSeal

func (b *Block) WithSeal(header *Header) *Block

WithSeal returns a new block with the data from b but the header replaced with the sealed one.

type Bloom

type Bloom [BloomByteLength]byte

func CreateBloom

func CreateBloom(receipts []*Receipt) (b Bloom)

CreateBloom creates a new bloom filter from a set of receipts

func (*Bloom) IsLogInBloom

func (b *Bloom) IsLogInBloom(log *Log) bool

IsLogInBloom checks if the log has a possible presence in the bloom filter

func (Bloom) MarshalText

func (b Bloom) MarshalText() ([]byte, error)

MarshalText implements encoding.TextMarshaler

func (Bloom) String

func (b Bloom) String() string

func (*Bloom) UnmarshalText

func (b *Bloom) UnmarshalText(input []byte) error

type Body

type Body struct {
	Transactions []*Transaction
	Uncles       []*Header
}

func (*Body) MarshalRLPTo

func (b *Body) MarshalRLPTo(dst []byte) []byte

func (*Body) UnmarshalRLP

func (b *Body) UnmarshalRLP(input []byte) error

UnmarshalRLP unmarshals body from byte slice. Caution: Hash for each tx must be computed manually after!

type ExitProof

type ExitProof struct {
	Proof     []Hash
	LeafIndex uint64
}

type FullBlock

type FullBlock struct {
	Block    *Block
	Receipts []*Receipt
}

type Hash

type Hash [HashLength]byte

func BytesToHash

func BytesToHash(b []byte) Hash

func StringToHash

func StringToHash(str string) Hash

func (Hash) Bytes

func (h Hash) Bytes() []byte

func (Hash) MarshalText

func (h Hash) MarshalText() ([]byte, error)

func (Hash) String

func (h Hash) String() string

func (*Hash) UnmarshalText

func (h *Hash) UnmarshalText(input []byte) error

UnmarshalText parses a hash in hex syntax.

type Header struct {
	ParentHash   Hash
	Sha3Uncles   Hash
	Miner        []byte
	StateRoot    Hash
	TxRoot       Hash
	ReceiptsRoot Hash
	LogsBloom    Bloom
	Difficulty   uint64
	Number       uint64
	GasLimit     uint64
	GasUsed      uint64
	Timestamp    uint64
	ExtraData    []byte
	MixHash      Hash
	Nonce        Nonce
	Hash         Hash

	// BaseFee was added by EIP-1559 and is ignored in legacy headers.
	BaseFee uint64 `json:"baseFeePerGas"`
}

Header represents a block header in the Ethereum blockchain.

func (*Header) ComputeHash

func (h *Header) ComputeHash() *Header

ComputeHash computes the hash of the header

func (*Header) Copy

func (h *Header) Copy() *Header

func (*Header) Equal

func (h *Header) Equal(hh *Header) bool

func (*Header) HasBody

func (h *Header) HasBody() bool

func (*Header) HasReceipts

func (h *Header) HasReceipts() bool

func (*Header) IsGenesis

func (h *Header) IsGenesis() bool

func (*Header) MarshalRLP

func (h *Header) MarshalRLP() []byte

func (*Header) MarshalRLPTo

func (h *Header) MarshalRLPTo(dst []byte) []byte

func (*Header) MarshalRLPWith

func (h *Header) MarshalRLPWith(arena *fastrlp.Arena) *fastrlp.Value

MarshalRLPWith marshals the header to RLP with a specific fastrlp.Arena

func (*Header) SetNonce

func (h *Header) SetNonce(i uint64)

func (*Header) UnmarshalRLP

func (h *Header) UnmarshalRLP(input []byte) error

type Log

type Log struct {
	Address Address
	Topics  []Hash
	Data    []byte
}

func (*Log) MarshalRLPWith

func (l *Log) MarshalRLPWith(a *fastrlp.Arena) *fastrlp.Value

type Nonce

type Nonce [8]byte

func (Nonce) MarshalText

func (n Nonce) MarshalText() ([]byte, error)

MarshalText implements encoding.TextMarshaler

func (Nonce) String

func (n Nonce) String() string

type OverrideAccount

type OverrideAccount struct {
	Nonce     *uint64
	Code      []byte
	Balance   *big.Int
	State     map[Hash]Hash
	StateDiff map[Hash]Hash
}

type Proof

type Proof struct {
	Data     []Hash // the proof himself
	Metadata map[string]interface{}
}

type RLPMarshaler

type RLPMarshaler interface {
	MarshalRLPTo(dst []byte) []byte
}

type RLPStoreMarshaler

type RLPStoreMarshaler interface {
	MarshalStoreRLPTo(dst []byte) []byte
}

type RLPStoreUnmarshaler

type RLPStoreUnmarshaler interface {
	UnmarshalStoreRLP(input []byte) error
}

type RLPUnmarshaler

type RLPUnmarshaler interface {
	UnmarshalRLP(input []byte) error
}

type Receipt

type Receipt struct {
	// consensus fields
	Root              Hash
	CumulativeGasUsed uint64
	LogsBloom         Bloom
	Logs              []*Log
	Status            *ReceiptStatus

	// context fields
	GasUsed         uint64
	ContractAddress *Address
	TxHash          Hash

	TransactionType TxType
}

func (*Receipt) IsLegacyTx

func (r *Receipt) IsLegacyTx() bool

func (*Receipt) MarshalLogsWith

func (r *Receipt) MarshalLogsWith(a *fastrlp.Arena) *fastrlp.Value

MarshalLogsWith marshals the logs of the receipt to RLP with a specific fastrlp.Arena

func (*Receipt) MarshalRLP

func (r *Receipt) MarshalRLP() []byte

func (*Receipt) MarshalRLPTo

func (r *Receipt) MarshalRLPTo(dst []byte) []byte

func (*Receipt) MarshalRLPWith

func (r *Receipt) MarshalRLPWith(a *fastrlp.Arena) *fastrlp.Value

MarshalRLPWith marshals a receipt with a specific fastrlp.Arena

func (*Receipt) MarshalStoreRLPTo

func (r *Receipt) MarshalStoreRLPTo(dst []byte) []byte

func (*Receipt) SetContractAddress

func (r *Receipt) SetContractAddress(contractAddress Address)

func (*Receipt) SetStatus

func (r *Receipt) SetStatus(s ReceiptStatus)

func (*Receipt) UnmarshalRLP

func (r *Receipt) UnmarshalRLP(input []byte) error

func (*Receipt) UnmarshalStoreRLP

func (r *Receipt) UnmarshalStoreRLP(input []byte) error

type ReceiptStatus

type ReceiptStatus uint64
const (
	ReceiptFailed ReceiptStatus = iota
	ReceiptSuccess
)

type Receipts

type Receipts []*Receipt

func (Receipts) MarshalRLPTo

func (r Receipts) MarshalRLPTo(dst []byte) []byte

func (*Receipts) MarshalRLPWith

func (r *Receipts) MarshalRLPWith(a *fastrlp.Arena) *fastrlp.Value

func (Receipts) MarshalStoreRLPTo

func (r Receipts) MarshalStoreRLPTo(dst []byte) []byte

func (*Receipts) UnmarshalRLP

func (r *Receipts) UnmarshalRLP(input []byte) error

func (*Receipts) UnmarshalStoreRLP

func (r *Receipts) UnmarshalStoreRLP(input []byte) error

type StateOverride

type StateOverride map[Address]OverrideAccount

type StateSyncEvent

type StateSyncEvent struct {
	// ID is the decoded 'index' field from the event
	ID uint64
	// Sender is the decoded 'sender' field from the event
	Sender ethgo.Address
	// Receiver is the decoded 'receiver' field from the event
	Receiver ethgo.Address
	// Data is the decoded 'data' field from the event
	Data []byte
}

StateSyncEvent is a bridge event from the rootchain

func (*StateSyncEvent) EncodeAbi

func (sse *StateSyncEvent) EncodeAbi() ([]byte, error)

ToABI converts StateSyncEvent to ABI

func (*StateSyncEvent) String

func (sse *StateSyncEvent) String() string

func (*StateSyncEvent) ToMap

func (sse *StateSyncEvent) ToMap() map[string]interface{}

ToMap converts StateSyncEvent to map

type StateSyncProof

type StateSyncProof struct {
	Proof     []Hash
	StateSync *StateSyncEvent
}

func (*StateSyncProof) DecodeAbi

func (ssp *StateSyncProof) DecodeAbi(txData []byte) error

DecodeAbi contains logic for decoding given ABI data

func (*StateSyncProof) EncodeAbi

func (ssp *StateSyncProof) EncodeAbi() ([]byte, error)

EncodeAbi contains logic for encoding given ABI data

type Transaction

type Transaction struct {
	Nonce     uint64
	GasPrice  *big.Int
	GasTipCap *big.Int
	GasFeeCap *big.Int
	Gas       uint64
	To        *Address
	Value     *big.Int
	Input     []byte
	V, R, S   *big.Int
	Hash      Hash
	From      Address

	Type TxType

	ChainID *big.Int
	// contains filtered or unexported fields
}

func FindTxByHash

func FindTxByHash(txs []*Transaction, hash Hash) (*Transaction, int)

FindTxByHash returns transaction and its index from a slice of transactions

func (*Transaction) ComputeHash

func (t *Transaction) ComputeHash(blockNumber uint64) *Transaction

ComputeHash computes the hash of the transaction

func (*Transaction) Copy

func (t *Transaction) Copy() *Transaction

func (*Transaction) Cost

func (t *Transaction) Cost() *big.Int

Cost returns gas * gasPrice + value

func (*Transaction) EffectiveGasTip

func (t *Transaction) EffectiveGasTip(baseFee *big.Int) *big.Int

EffectiveGasTip defines effective tip based on tx type. Spec: https://eips.ethereum.org/EIPS/eip-1559#specification We use EIP-1559 fields of the tx if the london hardfork is enabled. Effective tip be came to be either gas tip cap or (gas fee cap - current base fee)

func (*Transaction) GetGasFeeCap

func (t *Transaction) GetGasFeeCap() *big.Int

GetGasFeeCap gets gas fee cap depending on tx type Spec: https://eips.ethereum.org/EIPS/eip-1559#specification

func (*Transaction) GetGasPrice

func (t *Transaction) GetGasPrice(baseFee uint64) *big.Int

GetGasPrice returns gas price if not empty, or calculates one based on the given EIP-1559 fields if exist

Here is the logic:

  • use existing gas price if exists
  • or calculate a value with formula: min(gasFeeCap, gasTipCap + baseFee);

func (*Transaction) GetGasTipCap

func (t *Transaction) GetGasTipCap() *big.Int

GetGasTipCap gets gas tip cap depending on tx type Spec: https://eips.ethereum.org/EIPS/eip-1559#specification

func (*Transaction) IsContractCreation

func (t *Transaction) IsContractCreation() bool

IsContractCreation checks if tx is contract creation

func (*Transaction) IsValueTransfer

func (t *Transaction) IsValueTransfer() bool

IsValueTransfer checks if tx is a value transfer

func (*Transaction) MarshalRLP

func (t *Transaction) MarshalRLP() []byte

func (*Transaction) MarshalRLPTo

func (t *Transaction) MarshalRLPTo(dst []byte) []byte

func (*Transaction) MarshalRLPWith

func (t *Transaction) MarshalRLPWith(arena *fastrlp.Arena) *fastrlp.Value

MarshalRLPWith marshals the transaction to RLP with a specific fastrlp.Arena Be careful! This function does not serialize tx type as a first byte. Use MarshalRLP/MarshalRLPTo in most cases

func (*Transaction) MarshalStoreRLPTo

func (t *Transaction) MarshalStoreRLPTo(dst []byte) []byte

func (*Transaction) Size

func (t *Transaction) Size() uint64

func (*Transaction) UnmarshalRLP

func (t *Transaction) UnmarshalRLP(input []byte) error

UnmarshalRLP unmarshals transaction from byte slice Caution: Hash calculation should be done from the outside!

func (*Transaction) UnmarshalStoreRLP

func (t *Transaction) UnmarshalStoreRLP(input []byte) error

UnmarshalStoreRLP unmarshals transaction from byte slice. Hash must be computed manually after!

type TransactionHashFork

type TransactionHashFork interface {
	SerializeForRootCalculation(*Transaction, *fastrlp.ArenaPool) []byte
	ComputeHash(*Transaction)
}

func GetTransactionHashHandler

func GetTransactionHashHandler(blockNumber uint64) TransactionHashFork

type TransactionHashForkV1

type TransactionHashForkV1 struct {
}

func (*TransactionHashForkV1) ComputeHash

func (th *TransactionHashForkV1) ComputeHash(t *Transaction)

func (*TransactionHashForkV1) SerializeForRootCalculation

func (th *TransactionHashForkV1) SerializeForRootCalculation(t *Transaction, ap *fastrlp.ArenaPool) []byte

type TransactionHashForkV2

type TransactionHashForkV2 struct {
}

func (*TransactionHashForkV2) ComputeHash

func (th *TransactionHashForkV2) ComputeHash(t *Transaction)

func (*TransactionHashForkV2) SerializeForRootCalculation

func (th *TransactionHashForkV2) SerializeForRootCalculation(t *Transaction, _ *fastrlp.ArenaPool) []byte

type TxType

type TxType byte

TxType is the transaction type.

const (
	LegacyTx     TxType = 0x0
	StateTx      TxType = 0x7f
	DynamicFeeTx TxType = 0x02
)

List of supported transaction types

func (TxType) String

func (t TxType) String() (s string)

String returns string representation of the transaction type.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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