mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 07:06:42 +00:00
84 lines
2.3 KiB
Go
84 lines
2.3 KiB
Go
//go:build !circuit_capacity_checker
|
|
|
|
package circuitcapacitychecker
|
|
|
|
import (
|
|
"math/rand"
|
|
|
|
"github.com/scroll-tech/go-ethereum/common"
|
|
"github.com/scroll-tech/go-ethereum/core/types"
|
|
)
|
|
|
|
type CircuitCapacityChecker struct {
|
|
ID uint64
|
|
countdown int
|
|
nextError *error
|
|
|
|
skipHash string
|
|
skipError error
|
|
}
|
|
|
|
// NewCircuitCapacityChecker creates a new CircuitCapacityChecker
|
|
func NewCircuitCapacityChecker(lightMode bool) *CircuitCapacityChecker {
|
|
ccc := &CircuitCapacityChecker{ID: rand.Uint64()}
|
|
ccc.SetLightMode(lightMode)
|
|
return ccc
|
|
}
|
|
|
|
// Reset resets a ccc, but need to do nothing in mock_ccc.
|
|
func (ccc *CircuitCapacityChecker) Reset() {
|
|
}
|
|
|
|
// ApplyTransaction appends a tx's wrapped BlockTrace into the ccc, and return the accumulated RowConsumption.
|
|
// Will only return a dummy value in mock_ccc.
|
|
func (ccc *CircuitCapacityChecker) ApplyTransaction(traces *types.BlockTrace) (*types.RowConsumption, error) {
|
|
if ccc.nextError != nil {
|
|
ccc.countdown--
|
|
if ccc.countdown == 0 {
|
|
err := *ccc.nextError
|
|
ccc.nextError = nil
|
|
return nil, err
|
|
}
|
|
}
|
|
if ccc.skipError != nil {
|
|
if traces.Transactions[0].TxHash == ccc.skipHash {
|
|
return nil, ccc.skipError
|
|
}
|
|
}
|
|
return &types.RowConsumption{types.SubCircuitRowUsage{
|
|
Name: "mock",
|
|
RowNumber: 1,
|
|
}}, nil
|
|
}
|
|
|
|
// ApplyBlock gets a block's RowConsumption.
|
|
// Will only return a dummy value in mock_ccc.
|
|
func (ccc *CircuitCapacityChecker) ApplyBlock(traces *types.BlockTrace) (*types.RowConsumption, error) {
|
|
return &types.RowConsumption{types.SubCircuitRowUsage{
|
|
Name: "mock",
|
|
RowNumber: 2,
|
|
}}, nil
|
|
}
|
|
|
|
// CheckTxNum compares whether the tx_count in ccc match the expected.
|
|
// Will alway return true in mock_ccc.
|
|
func (ccc *CircuitCapacityChecker) CheckTxNum(expected int) (bool, uint64, error) {
|
|
return true, uint64(expected), nil
|
|
}
|
|
|
|
// SetLightMode sets to ccc light mode
|
|
func (ccc *CircuitCapacityChecker) SetLightMode(lightMode bool) error {
|
|
return nil
|
|
}
|
|
|
|
// ScheduleError schedules an error for a tx (see `ApplyTransaction`), only used in tests.
|
|
func (ccc *CircuitCapacityChecker) ScheduleError(cnt int, err error) {
|
|
ccc.countdown = cnt
|
|
ccc.nextError = &err
|
|
}
|
|
|
|
// Skip forced CCC to return always an error for a given txn
|
|
func (ccc *CircuitCapacityChecker) Skip(txnHash common.Hash, err error) {
|
|
ccc.skipHash = txnHash.String()
|
|
ccc.skipError = err
|
|
}
|