mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-06-20 13:44:31 +00:00
* feat: pseudo-generic extra payloads in `params.ChainConfig` and `params.Rules` * feat: `params.ExtraPayloadGetter` for end-user type safety * refactor: payloads only available through `params.ExtraPayloadGetter` * chore: make `libevm/examples/extraparams` a `params` testable example * doc: `libevm/pseudo` package comments and improved readability * doc: `params.*Extra*` comments and improved readability * doc: `params.ExtraPayloadGetter` comments and improved readability * doc: `params/config.libevm_test.go` comments and improved readability * refactor: simplify `params.ChainConfig.UnmarshalJSON()` * refactor: abstract new/nil-pointer creation into `pseudo.Constructor`s * feat: precompile override via `params.Extras` hooks * doc: flesh out `PrecompileOverride()` in example * doc: complete commentary and improve readability * refactor: `ChainConfig.Hooks()` + `Rules` equivalent * chore: rename precompiles test file in keeping with geth equivalent * feat: stateful precompiles + allowlist hooks The allowlist hooks are included in this commit because they allow for the same functionality as stateful precompiles in `ava-labs/coreth` and `ava-labs/subnet-evm`. * fix: `StateTransition.canExecuteTransaction()` used `msg.From` instead of `To` * test: `params.RulesHooks.CanCreateContract` integration * test: `params.RulesHooks.CanExecuteTransaction` integration * test: `vm.NewStatefulPrecompile()` integration * refactor: simplify test of `CanCreateContract` * refactor: abstract generation of random `Address`/`Hash` values * doc: full documentation + readability refactoring/renaming * fix: remove circular dependency in tests
41 lines
860 B
Go
41 lines
860 B
Go
package ethtest
|
|
|
|
import (
|
|
"github.com/ethereum/go-ethereum/common"
|
|
"golang.org/x/exp/rand"
|
|
)
|
|
|
|
// PseudoRand extends [rand.Rand] (*not* crypto/rand).
|
|
type PseudoRand struct {
|
|
*rand.Rand
|
|
}
|
|
|
|
// NewPseudoRand returns a new PseudoRand with the given seed.
|
|
func NewPseudoRand(seed uint64) *PseudoRand {
|
|
return &PseudoRand{rand.New(rand.NewSource(seed))}
|
|
}
|
|
|
|
// Address returns a pseudorandom address.
|
|
func (r *PseudoRand) Address() (a common.Address) {
|
|
r.Read(a[:])
|
|
return a
|
|
}
|
|
|
|
// AddressPtr returns a pointer to a pseudorandom address.
|
|
func (r *PseudoRand) AddressPtr() *common.Address {
|
|
a := r.Address()
|
|
return &a
|
|
}
|
|
|
|
// Hash returns a pseudorandom hash.
|
|
func (r *PseudoRand) Hash() (h common.Hash) {
|
|
r.Read(h[:])
|
|
return h
|
|
}
|
|
|
|
// Bytes returns `n` pseudorandom bytes.
|
|
func (r *PseudoRand) Bytes(n uint) []byte {
|
|
b := make([]byte, n)
|
|
r.Read(b)
|
|
return b
|
|
}
|