types

package
v1.10.0 Latest Latest
Warning

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

Go to latest
Published: Nov 19, 2024 License: MIT Imports: 12 Imported by: 2

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrPositionDepthTooSmall = errors.New("position depth is too small")

	RootPosition = NewPositionFromGIndex(big.NewInt(1))
)
View Source
var (
	ErrGameDepthReached   = errors.New("game depth reached")
	ErrL2BlockNumberValid = errors.New("l2 block number is valid")
)
View Source
var (
	// ErrClaimNotFound is returned when a claim does not exist in the game state.
	ErrClaimNotFound = errors.New("claim not found in game state")
)

Functions

func ChessClock added in v1.7.6

func ChessClock(now time.Time, claim Claim, parent Claim) time.Duration

func NewGameState

func NewGameState(claims []Claim, depth Depth) *gameState

NewGameState returns a new game state. The provided Claim is used as the root node.

func ValidTraceType added in v1.8.0

func ValidTraceType(value TraceType) bool

Types

type Action

type Action struct {
	Type ActionType

	// Moves and Steps
	ParentClaim Claim
	IsAttack    bool

	// Moves
	Value common.Hash

	// Steps
	PreState   []byte
	ProofData  []byte
	OracleData *PreimageOracleData

	// Challenge L2 Block Number
	InvalidL2BlockNumberChallenge *InvalidL2BlockNumberChallenge
}

type ActionType

type ActionType string
const (
	ActionTypeMove                   ActionType = "move"
	ActionTypeStep                   ActionType = "step"
	ActionTypeChallengeL2BlockNumber ActionType = "challenge-l2-block-number"
)

func (ActionType) String

func (a ActionType) String() string

type Claim

type Claim struct {
	ClaimData
	// WARN: CounteredBy is a mutable field in the FaultDisputeGame contract
	//       and rely on it for determining whether to step on leaf claims.
	//       When caching is implemented for the Challenger, this will need
	//       to be changed/removed to avoid invalid/stale contract state.
	CounteredBy common.Address
	Claimant    common.Address
	Clock       Clock
	// Location of the claim & it's parent inside the contract. Does not exist
	// for claims that have not made it to the contract.
	ContractIndex       int
	ParentContractIndex int
}

Claim extends ClaimData with information about the relationship between two claims. It uses ClaimData to break cyclicity without using pointers. If the position of the game is Depth 0, IndexAtDepth 0 it is the root claim and the Parent field is empty & meaningless.

func (Claim) ID added in v1.7.2

func (c Claim) ID() ClaimID

func (Claim) IsRoot

func (c Claim) IsRoot() bool

IsRoot returns true if this claim is the root claim.

type ClaimData

type ClaimData struct {
	Value common.Hash
	Bond  *big.Int
	Position
}

ClaimData is the core of a claim. It must be unique inside a specific game.

func (*ClaimData) ValueBytes

func (c *ClaimData) ValueBytes() [32]byte

type ClaimID added in v1.7.2

type ClaimID common.Hash

type Clock added in v1.7.0

type Clock struct {
	// Duration is the time elapsed on the chess clock at the last update.
	Duration time.Duration

	// Timestamp is the time that the clock was last updated.
	Timestamp time.Time
}

Clock tracks the chess clock for a claim.

func NewClock added in v1.7.0

func NewClock(duration time.Duration, timestamp time.Time) Clock

NewClock creates a new Clock instance.

type ClockReader added in v1.5.1

type ClockReader interface {
	Now() time.Time
}

type Depth added in v1.4.3

type Depth uint64

Depth is the depth of a position in a game tree where the root level has depth 0, the root's children have depth 1, their children have depth 2, and so on.

type Game

type Game interface {
	// Claims returns all of the claims in the game.
	Claims() []Claim

	// GetParent returns the parent of the provided claim.
	GetParent(claim Claim) (Claim, error)

	// DefendsParent returns true if and only if the claim is a defense (i.e. goes right) of
	// its parent.
	DefendsParent(claim Claim) bool

	// ChessClock returns the amount of time elapsed on the chess clock of the potential challenger to the supplied claim.
	// Specifically, this returns the chess clock of the team that *disagrees* with the supplied claim.
	ChessClock(now time.Time, claim Claim) time.Duration

	// IsDuplicate returns true if the provided [Claim] already exists in the game state
	// referencing the same parent claim
	IsDuplicate(claim Claim) bool

	// AgreeWithClaimLevel returns if the game state agrees with the provided claim level.
	AgreeWithClaimLevel(claim Claim, agreeWithRootClaim bool) bool

	MaxDepth() Depth

	// AncestorWithTraceIndex finds the ancestor of claim with trace index idx if present.
	// Returns the claim and true if the ancestor is found, or Claim{}, false if not.
	AncestorWithTraceIndex(claim Claim, idx *big.Int) (Claim, bool)
}

Game is an interface that represents the state of a dispute game.

type GameType added in v1.8.0

type GameType uint32
const (
	CannonGameType       GameType = 0
	PermissionedGameType GameType = 1
	AsteriscGameType     GameType = 2
	AsteriscKonaGameType GameType = 3
	FastGameType         GameType = 254
	AlphabetGameType     GameType = 255
	UnknownGameType      GameType = math.MaxUint32
)

func (GameType) MarshalText added in v1.8.0

func (t GameType) MarshalText() ([]byte, error)

func (GameType) String added in v1.8.0

func (t GameType) String() string

type InvalidL2BlockNumberChallenge added in v1.7.6

type InvalidL2BlockNumberChallenge struct {
	Output *eth.OutputResponse
	Header *ethTypes.Header
}

func NewInvalidL2BlockNumberProof added in v1.7.6

func NewInvalidL2BlockNumberProof(output *eth.OutputResponse, header *ethTypes.Header) *InvalidL2BlockNumberChallenge

type Position

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

Position is a golang wrapper around the dispute game Position type.

func NewPosition

func NewPosition(depth Depth, indexAtDepth *big.Int) Position

func NewPositionFromGIndex

func NewPositionFromGIndex(x *big.Int) Position

NewPositionFromGIndex creates a new Position given a generalized index.

func (Position) Attack

func (p Position) Attack() Position

Attack creates a new position which is the attack position of this one.

func (Position) Defend

func (p Position) Defend() Position

Defend creates a new position which is the defend position of this one.

func (Position) Depth

func (p Position) Depth() Depth

func (Position) IndexAtDepth

func (p Position) IndexAtDepth() *big.Int

func (Position) IsRootPosition

func (p Position) IsRootPosition() bool

func (Position) MoveRight added in v1.2.0

func (p Position) MoveRight() Position

func (Position) Print

func (p Position) Print(maxDepth Depth)

func (Position) RelativeToAncestorAtDepth added in v1.2.0

func (p Position) RelativeToAncestorAtDepth(ancestor Depth) (Position, error)

RelativeToAncestorAtDepth returns a new position for a subtree. [ancestor] is the depth of the subtree root node.

func (Position) RightOf added in v1.2.0

func (p Position) RightOf(parent Position) bool

func (Position) String added in v1.4.2

func (p Position) String() string

func (Position) ToGIndex

func (p Position) ToGIndex() *big.Int

func (Position) TraceIndex

func (p Position) TraceIndex(maxDepth Depth) *big.Int

TraceIndex calculates the what the index of the claim value would be inside the trace. It is equivalent to going right until the final depth has been reached. Note: this method will panic if maxDepth < p.depth

type PreimageOracleData

type PreimageOracleData struct {
	IsLocal   bool
	OracleKey []byte

	OracleOffset uint32

	// 4844 blob data
	BlobFieldIndex uint64
	BlobCommitment []byte
	BlobProof      []byte
	// contains filtered or unexported fields
}

PreimageOracleData encapsulates the preimage oracle data to load into the onchain oracle.

func NewPreimageOracleBlobData added in v1.6.1

func NewPreimageOracleBlobData(key []byte, data []byte, offset uint32, fieldIndex uint64, commitment []byte, proof []byte) *PreimageOracleData

func NewPreimageOracleData

func NewPreimageOracleData(key []byte, data []byte, offset uint32) *PreimageOracleData

NewPreimageOracleData creates a new PreimageOracleData instance.

func (*PreimageOracleData) GetIdent

func (p *PreimageOracleData) GetIdent() *big.Int

GetIdent returns the ident for the preimage oracle data.

func (*PreimageOracleData) GetPrecompileAddress added in v1.7.2

func (p *PreimageOracleData) GetPrecompileAddress() common.Address

func (*PreimageOracleData) GetPrecompileInput added in v1.7.2

func (p *PreimageOracleData) GetPrecompileInput() []byte

func (*PreimageOracleData) GetPrecompileRequiredGas added in v1.9.1

func (p *PreimageOracleData) GetPrecompileRequiredGas() uint64

func (*PreimageOracleData) GetPreimageWithSize added in v1.5.1

func (p *PreimageOracleData) GetPreimageWithSize() []byte

GetPreimageWithSize returns the preimage with its length prefix.

func (*PreimageOracleData) GetPreimageWithoutSize

func (p *PreimageOracleData) GetPreimageWithoutSize() []byte

GetPreimageWithoutSize returns the preimage for the preimage oracle data.

type PrestateProvider added in v1.4.2

type PrestateProvider interface {
	// AbsolutePreStateCommitment is the commitment of the pre-image value of the trace that transitions to the trace value at index 0
	AbsolutePreStateCommitment(ctx context.Context) (hash common.Hash, err error)
}

PrestateProvider defines an interface to request the absolute prestate.

type StepCallData

type StepCallData struct {
	ClaimIndex uint64
	IsAttack   bool
	StateData  []byte
	Proof      []byte
}

StepCallData encapsulates the data needed to perform a step.

type TraceAccessor added in v1.4.2

type TraceAccessor interface {
	// Get returns the claim value at the requested position, evaluated in the context of the specified claim (ref).
	Get(ctx context.Context, game Game, ref Claim, pos Position) (common.Hash, error)

	// GetStepData returns the data required to execute the step at the specified position,
	// evaluated in the context of the specified claim (ref).
	GetStepData(ctx context.Context, game Game, ref Claim, pos Position) (prestate []byte, proofData []byte, preimageData *PreimageOracleData, err error)

	// GetL2BlockNumberChallenge returns the data required to prove the correct L2 block number of the root claim.
	// Returns ErrL2BlockNumberValid if the root claim is known to come from the same block as the claimed L2 block.
	GetL2BlockNumberChallenge(ctx context.Context, game Game) (*InvalidL2BlockNumberChallenge, error)
}

TraceAccessor defines an interface to request data from a TraceProvider with additional context for the game position. This can be used to implement split games where lower layers of the game may have different values depending on claims at higher levels in the game.

type TraceProvider

type TraceProvider interface {
	PrestateProvider

	// Get returns the claim value at the requested index.
	// Get(i) = Keccak256(GetPreimage(i))
	Get(ctx context.Context, i Position) (common.Hash, error)

	// GetStepData returns the data required to execute the step at the specified trace index.
	// This includes the pre-state of the step (not hashed), the proof data required during step execution
	// and any pre-image data that needs to be loaded into the oracle prior to execution (may be nil)
	// The prestate returned from GetStepData for trace 10 should be the pre-image of the claim from trace 9
	GetStepData(ctx context.Context, i Position) (prestate []byte, proofData []byte, preimageData *PreimageOracleData, err error)

	// GetL2BlockNumberChallenge returns the data required to prove the correct L2 block number of the root claim.
	// Returns ErrL2BlockNumberValid if the root claim is known to come from the same block as the claimed L2 block.
	GetL2BlockNumberChallenge(ctx context.Context) (*InvalidL2BlockNumberChallenge, error)
}

TraceProvider is a generic way to get a claim value at a specific step in the trace.

type TraceType added in v1.8.0

type TraceType string
const (
	TraceTypeAlphabet     TraceType = "alphabet"
	TraceTypeFast         TraceType = "fast"
	TraceTypeCannon       TraceType = "cannon"
	TraceTypeAsterisc     TraceType = "asterisc"
	TraceTypeAsteriscKona TraceType = "asterisc-kona"
	TraceTypePermissioned TraceType = "permissioned"
)

func (*TraceType) Clone added in v1.8.0

func (t *TraceType) Clone() any

func (TraceType) GameType added in v1.8.0

func (t TraceType) GameType() GameType

func (*TraceType) Set added in v1.8.0

func (t *TraceType) Set(value string) error

Set implements the Set method required by the [cli.Generic] interface.

func (TraceType) String added in v1.8.0

func (t TraceType) String() string

Jump to

Keyboard shortcuts

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