etherman

package
v0.3.2 Latest Latest
Warning

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

Go to latest
Published: Nov 6, 2024 License: AGPL-3.0 Imports: 26 Imported by: 0

Documentation

Index

Constants

View Source
const (
	SafeBlock      = BlockNumberFinality("SafeBlock")
	FinalizedBlock = BlockNumberFinality("FinalizedBlock")
	LatestBlock    = BlockNumberFinality("LatestBlock")
	PendingBlock   = BlockNumberFinality("PendingBlock")
	EarliestBlock  = BlockNumberFinality("EarliestBlock")
)
View Source
const (
	Safe      = BlockNumber(-4)
	Finalized = BlockNumber(-3)
	Latest    = BlockNumber(-2)
	Pending   = BlockNumber(-1)
	Earliest  = BlockNumber(0)
)

Variables

View Source
var (
	// ErrGasRequiredExceedsAllowance gas required exceeds the allowance
	ErrGasRequiredExceedsAllowance = errors.New("gas required exceeds allowance")
	// ErrContentLengthTooLarge content length is too large
	ErrContentLengthTooLarge = errors.New("content length too large")
	// ErrTimestampMustBeInsideRange Timestamp must be inside range
	ErrTimestampMustBeInsideRange = errors.New("timestamp must be inside range")
	// ErrInsufficientAllowance insufficient allowance
	ErrInsufficientAllowance = errors.New("insufficient allowance")
	// ErrBothGasPriceAndMaxFeeGasAreSpecified both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified
	ErrBothGasPriceAndMaxFeeGasAreSpecified = errors.New(
		"both gasPrice and (maxFeePerGas or maxPriorityFeePerGas) specified",
	)
	// ErrMaxFeeGasAreSpecifiedButLondonNotActive maxFeePerGas or maxPriorityFeePerGas
	// specified but london fork is not active yet
	ErrMaxFeeGasAreSpecifiedButLondonNotActive = errors.New(
		"maxFeePerGas or maxPriorityFeePerGas specified but london is not active yet",
	)
	// ErrNoSigner no signer to authorize the transaction with
	ErrNoSigner = errors.New("no signer to authorize the transaction with")
	// ErrMissingTrieNode means that a node is missing on the trie
	ErrMissingTrieNode = errors.New("missing trie node")
	// ErrNotFound is used when the object is not found
	ErrNotFound = errors.New("not found")
	// ErrPrivateKeyNotFound used when the provided sender does not have a private key registered to be used
	ErrPrivateKeyNotFound = errors.New("can't find sender private key to sign tx")
)

Functions

func DecodeBytes

func DecodeBytes(val *string) ([]byte, error)

DecodeBytes decodes a hex string into a []byte

func TryParseError

func TryParseError(err error) (error, bool)

Types

type Batch

type Batch struct {
	L2Data               []byte
	LastCoinbase         common.Address
	ForcedGlobalExitRoot common.Hash
	ForcedBlockHashL1    common.Hash
	ForcedBatchTimestamp uint64
	BatchNumber          uint64
	L1InfoTreeIndex      uint32
	LastL2BLockTimestamp uint64
	GlobalExitRoot       common.Hash
}

type Block

type Block struct {
	BlockNumber           uint64
	BlockHash             common.Hash
	ParentHash            common.Hash
	ForcedBatches         []ForcedBatch
	SequencedBatches      [][]SequencedBatch
	VerifiedBatches       []VerifiedBatch
	SequencedForceBatches [][]SequencedForceBatch
	ForkIDs               []ForkID
	ReceivedAt            time.Time
	// GER data
	GlobalExitRoots, L1InfoTree []GlobalExitRoot
}

Block struct

type BlockNumber

type BlockNumber int64

type BlockNumberFinality

type BlockNumberFinality string

func (*BlockNumberFinality) ToBlockNum

func (b *BlockNumberFinality) ToBlockNum() (*big.Int, error)

type Client

type Client struct {
	EthClient  ethereumClient
	DAProtocol *idataavailabilityprotocol.Idataavailabilityprotocol

	Contracts *contracts.Contracts
	RollupID  uint32
	// contains filtered or unexported fields
}

Client is a simple implementation of EtherMan.

func NewClient

func NewClient(cfg config.Config, l1Config config.L1Config, commonConfig cdkcommon.Config) (*Client, error)

NewClient creates a new etherman.

func (*Client) AddOrReplaceAuth

func (etherMan *Client) AddOrReplaceAuth(auth bind.TransactOpts) error

AddOrReplaceAuth adds an authorization or replace an existent one to the same account

func (*Client) BuildTrustedVerifyBatchesTxData

func (etherMan *Client) BuildTrustedVerifyBatchesTxData(
	lastVerifiedBatch, newVerifiedBatch uint64, inputs *ethmanTypes.FinalProofInputs, beneficiary common.Address,
) (to *common.Address, data []byte, err error)

BuildTrustedVerifyBatchesTxData builds a []bytes to be sent to the PoE SC method TrustedVerifyBatches.

func (*Client) CheckTxWasMined

func (etherMan *Client) CheckTxWasMined(ctx context.Context, txHash common.Hash) (bool, *types.Receipt, error)

CheckTxWasMined check if a tx was already mined

func (*Client) CurrentNonce

func (etherMan *Client) CurrentNonce(ctx context.Context, account common.Address) (uint64, error)

CurrentNonce returns the current nonce for the provided account

func (*Client) EstimateGas

func (etherMan *Client) EstimateGas(
	ctx context.Context, from common.Address, to *common.Address, value *big.Int, data []byte,
) (uint64, error)

EstimateGas returns the estimated gas for the tx

func (*Client) EthBlockByNumber

func (etherMan *Client) EthBlockByNumber(ctx context.Context, blockNumber uint64) (*types.Block, error)

EthBlockByNumber function retrieves the ethereum block information by ethereum block number.

func (*Client) GetBatchAccInputHash

func (etherMan *Client) GetBatchAccInputHash(ctx context.Context, batchNumber uint64) (common.Hash, error)

GetBatchAccInputHash gets the batch accumulated input hash from the ethereum

func (*Client) GetDAProtocolAddr

func (etherMan *Client) GetDAProtocolAddr() (common.Address, error)

GetDAProtocolAddr returns the address of the data availability protocol

func (*Client) GetDAProtocolName

func (etherMan *Client) GetDAProtocolName() (string, error)

GetDAProtocolName returns the name of the data availability protocol

func (*Client) GetFinalizedBlockNumber

func (etherMan *Client) GetFinalizedBlockNumber(ctx context.Context) (uint64, error)

GetFinalizedBlockNumber gets the Finalized block number from the ethereum

func (*Client) GetL1InfoRoot

func (etherMan *Client) GetL1InfoRoot(indexL1InfoRoot uint32) (common.Hash, error)

GetL1InfoRoot gets the L1 info root from the SC

func (*Client) GetL2ChainID

func (etherMan *Client) GetL2ChainID() (uint64, error)

GetL2ChainID returns L2 Chain ID

func (*Client) GetLatestBatchNumber

func (etherMan *Client) GetLatestBatchNumber() (uint64, error)

GetLatestBatchNumber function allows to retrieve the latest proposed batch in the smc

func (*Client) GetLatestBlockHeader

func (etherMan *Client) GetLatestBlockHeader(ctx context.Context) (*types.Header, error)

GetLatestBlockHeader gets the latest block header from the ethereum

func (*Client) GetLatestBlockNumber

func (etherMan *Client) GetLatestBlockNumber(ctx context.Context) (uint64, error)

GetLatestBlockNumber gets the latest block number from the ethereum

func (*Client) GetLatestBlockTimestamp

func (etherMan *Client) GetLatestBlockTimestamp(ctx context.Context) (uint64, error)

GetLatestBlockTimestamp gets the latest block timestamp from the ethereum

func (*Client) GetLatestVerifiedBatchNum

func (etherMan *Client) GetLatestVerifiedBatchNum() (uint64, error)

GetLatestVerifiedBatchNum gets latest verified batch from ethereum

func (*Client) GetRevertMessage

func (etherMan *Client) GetRevertMessage(ctx context.Context, tx *types.Transaction) (string, error)

GetRevertMessage tries to get a revert message of a transaction

func (*Client) GetRollupId

func (etherMan *Client) GetRollupId() uint32

GetRollupId returns the rollup id

func (*Client) GetSafeBlockNumber

func (etherMan *Client) GetSafeBlockNumber(ctx context.Context) (uint64, error)

GetSafeBlockNumber gets the safe block number from the ethereum

func (*Client) GetSendSequenceFee

func (etherMan *Client) GetSendSequenceFee(numBatches uint64) (*big.Int, error)

GetSendSequenceFee get super/trusted sequencer fee

func (*Client) GetTrustedSequencerURL

func (etherMan *Client) GetTrustedSequencerURL() (string, error)

GetTrustedSequencerURL Gets the trusted sequencer url from rollup smc

func (*Client) GetTx

func (etherMan *Client) GetTx(ctx context.Context, txHash common.Hash) (*types.Transaction, bool, error)

GetTx function get ethereum tx

func (*Client) GetTxReceipt

func (etherMan *Client) GetTxReceipt(ctx context.Context, txHash common.Hash) (*types.Receipt, error)

GetTxReceipt function gets ethereum tx receipt

func (*Client) HeaderByNumber

func (etherMan *Client) HeaderByNumber(ctx context.Context, number *big.Int) (*types.Header, error)

HeaderByNumber returns a block header from the current canonical chain. If number is nil, the latest known header is returned.

func (*Client) LastAccInputHash

func (etherMan *Client) LastAccInputHash() (common.Hash, error)

LastAccInputHash gets the last acc input hash from the SC

func (*Client) LoadAuthFromKeyStore

func (etherMan *Client) LoadAuthFromKeyStore(path, password string) (*bind.TransactOpts, *ecdsa.PrivateKey, error)

LoadAuthFromKeyStore loads an authorization from a key store file

func (*Client) SendTx

func (etherMan *Client) SendTx(ctx context.Context, tx *types.Transaction) error

SendTx sends a tx to L1

func (*Client) SignTx

func (etherMan *Client) SignTx(
	ctx context.Context, sender common.Address, tx *types.Transaction,
) (*types.Transaction, error)

SignTx tries to sign a transaction accordingly to the provided sender

func (*Client) TrustedSequencer

func (etherMan *Client) TrustedSequencer() (common.Address, error)

TrustedSequencer gets trusted sequencer address

func (*Client) WaitTxToBeMined

func (etherMan *Client) WaitTxToBeMined(
	ctx context.Context, tx *types.Transaction, timeout time.Duration,
) (bool, error)

WaitTxToBeMined waits for an L1 tx to be mined. It will return error if the tx is reverted or timeout is exceeded

type EventOrder

type EventOrder string

EventOrder is the type used to identify the events order

const (
	// GlobalExitRootsOrder identifies a GlobalExitRoot event
	GlobalExitRootsOrder EventOrder = "GlobalExitRoots"
	// L1InfoTreeOrder identifies a L1InTree event
	L1InfoTreeOrder EventOrder = "L1InfoTreeOrder"
	// SequenceBatchesOrder identifies a VerifyBatch event
	SequenceBatchesOrder EventOrder = "SequenceBatches"
	// ForcedBatchesOrder identifies a ForcedBatches event
	ForcedBatchesOrder EventOrder = "ForcedBatches"
	// TrustedVerifyBatchOrder identifies a TrustedVerifyBatch event
	TrustedVerifyBatchOrder EventOrder = "TrustedVerifyBatch"
	// VerifyBatchOrder identifies a VerifyBatch event
	VerifyBatchOrder EventOrder = "VerifyBatch"
	// SequenceForceBatchesOrder identifies a SequenceForceBatches event
	SequenceForceBatchesOrder EventOrder = "SequenceForceBatches"
	// ForkIDsOrder identifies an updateZkevmVersion event
	ForkIDsOrder EventOrder = "forkIDs"
)

type ForcedBatch

type ForcedBatch struct {
	BlockNumber       uint64
	ForcedBatchNumber uint64
	Sequencer         common.Address
	GlobalExitRoot    common.Hash
	RawTxsData        []byte
	ForcedAt          time.Time
}

ForcedBatch represents a ForcedBatch

type ForkID

type ForkID struct {
	BatchNumber uint64
	ForkID      uint64
	Version     string
}

ForkID is a sturct to track the ForkID event.

type GlobalExitRoot

type GlobalExitRoot struct {
	BlockNumber       uint64
	MainnetExitRoot   common.Hash
	RollupExitRoot    common.Hash
	GlobalExitRoot    common.Hash
	Timestamp         time.Time
	PreviousBlockHash common.Hash
}

GlobalExitRoot struct

type L1Config

type L1Config struct {
	// Chain ID of the L1 network
	L1ChainID uint64 `json:"chainId" mapstructure:"ChainID"`
	// ZkEVMAddr Address of the L1 contract polygonZkEVMAddress
	ZkEVMAddr common.Address `json:"polygonZkEVMAddress" mapstructure:"ZkEVMAddr"`
	// RollupManagerAddr Address of the L1 contract
	RollupManagerAddr common.Address `json:"polygonRollupManagerAddress" mapstructure:"RollupManagerAddr"`
	// PolAddr Address of the L1 Pol token Contract
	PolAddr common.Address `json:"polTokenAddress" mapstructure:"PolAddr"`
	// GlobalExitRootManagerAddr Address of the L1 GlobalExitRootManager contract
	GlobalExitRootManagerAddr common.Address `json:"polygonZkEVMGlobalExitRootAddress" mapstructure:"GlobalExitRootManagerAddr"` //nolint:lll
}

L1Config represents the configuration of the network used in L1

type Order

type Order struct {
	Name EventOrder
	Pos  int
}

Order contains the event order to let the synchronizer store the information following this order.

type PolygonZkEVMBatchData

type PolygonZkEVMBatchData struct {
	Transactions       []byte
	GlobalExitRoot     [32]byte
	Timestamp          uint64
	MinForcedTimestamp uint64
}

PolygonZkEVMBatchData represents PolygonZkEVMBatchData

type Sequence

type Sequence struct {
	GlobalExitRoot, StateRoot, LocalExitRoot common.Hash
	AccInputHash                             common.Hash
	LastL2BLockTimestamp                     uint64
	BatchL2Data                              []byte
	IsSequenceTooBig                         bool
	BatchNumber                              uint64
	ForcedBatchTimestamp                     int64
	PrevBlockHash                            common.Hash
	LastCoinbase                             common.Address
}

Sequence represents an operation sent to the PoE smart contract to be processed.

func (Sequence) IsEmpty

func (s Sequence) IsEmpty() bool

IsEmpty checks is sequence struct is empty

type SequenceBanana

type SequenceBanana struct {
	Batches                []Batch
	OldAccInputHash        common.Hash
	AccInputHash           common.Hash
	L1InfoRoot             common.Hash
	MaxSequenceTimestamp   uint64
	CounterL1InfoRoot      uint32
	L2Coinbase             common.Address
	LastVirtualBatchNumber uint64
}

func NewSequenceBanana

func NewSequenceBanana(batches []Batch, l2Coinbase common.Address) *SequenceBanana

func (*SequenceBanana) Len

func (s *SequenceBanana) Len() int

func (*SequenceBanana) SetLastVirtualBatchNumber

func (s *SequenceBanana) SetLastVirtualBatchNumber(batchNumber uint64)

type SequencedBatch

type SequencedBatch struct {
	BatchNumber   uint64
	L1InfoRoot    *common.Hash
	SequencerAddr common.Address
	TxHash        common.Hash
	Nonce         uint64
	Coinbase      common.Address
	// Struct used in preEtrog forks
	*PolygonZkEVMBatchData
	// Struct used in Etrog
	*polygonvalidiumetrog.PolygonRollupBaseEtrogBatchData
}

SequencedBatch represents virtual batch

type SequencedForceBatch

type SequencedForceBatch struct {
	BatchNumber uint64
	Coinbase    common.Address
	TxHash      common.Hash
	Timestamp   time.Time
	Nonce       uint64
	polygonvalidiumetrog.PolygonRollupBaseEtrogBatchData
}

SequencedForceBatch is a sturct to track the ForceSequencedBatches event.

type VerifiedBatch

type VerifiedBatch struct {
	BlockNumber uint64
	BatchNumber uint64
	Aggregator  common.Address
	StateRoot   common.Hash
	TxHash      common.Hash
}

VerifiedBatch represents a VerifiedBatch

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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