mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2025-01-06 01:32:18 +00:00
af07c13730
* add main.go * interop readme * proper visibility * standardize and abstract into simpler funcs * formatting * no os pkg * add test * no panics anywhere, properly and nicely handle errors * proper comments * fix broken test * readme * comment * recommend ssz * install * tool now works * README * build * readme * 64 validators * rem print * register the no powchain flag * work on mock eth1 start * common interface * getting closer with the interface defs * only two uses of powchain * remove powchain dependency * remove powchain dependency * common powchain interface * proper comment in case of flag * proper args into rpc services * rename fields * pass in mock flag into RPC * conforms to iface * use client instead of block fetcher iface * broken tests * block fetcher * finalized * resolved broken build * fix build * comment * fix tests * tests pass * resolved confs * took them out * rename into smaller interfaces * resolve some confs * ensure tests pass * properly utilize mock instead of localized mock * res lint * lint * finish test for mock eth1data * run gazelle * include flag again * fix broken build * disable powchain * dont dial eth1 nodes * reenable pow * use smaller interfaces, standardize naming * abstract mock into its own package * faulty mock lint * fix stutter in lint * rpc tests all passing * use mocks for operations * no more mocks in the entire rpc package * no mock * viz * testonly
107 lines
2.7 KiB
Go
107 lines
2.7 KiB
Go
package testing
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"math/big"
|
|
"time"
|
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
ethpb "github.com/prysmaticlabs/prysm/proto/eth/v1alpha1"
|
|
"github.com/prysmaticlabs/prysm/shared/bytesutil"
|
|
"github.com/prysmaticlabs/prysm/shared/event"
|
|
"github.com/prysmaticlabs/prysm/shared/trieutil"
|
|
)
|
|
|
|
// POWChain defines a properly functioning mock for the powchain service.
|
|
type POWChain struct {
|
|
ChainFeed *event.Feed
|
|
LatestBlockNumber *big.Int
|
|
HashesByHeight map[int][]byte
|
|
TimesByHeight map[int]uint64
|
|
BlockNumberByHeight map[uint64]*big.Int
|
|
Eth1Data *ethpb.Eth1Data
|
|
GenesisEth1Block *big.Int
|
|
}
|
|
|
|
// ChainStartFeed --
|
|
func (m *POWChain) ChainStartFeed() *event.Feed {
|
|
return m.ChainFeed
|
|
}
|
|
|
|
// HasChainStarted --
|
|
func (m *POWChain) HasChainStarted() bool {
|
|
return true
|
|
}
|
|
|
|
// Eth2GenesisPowchainInfo --
|
|
func (m *POWChain) Eth2GenesisPowchainInfo() (uint64, *big.Int) {
|
|
blk := m.GenesisEth1Block
|
|
if blk == nil {
|
|
blk = big.NewInt(0)
|
|
}
|
|
return uint64(time.Unix(0, 0).Unix()), blk
|
|
}
|
|
|
|
// DepositTrie --
|
|
func (m *POWChain) DepositTrie() *trieutil.MerkleTrie {
|
|
return &trieutil.MerkleTrie{}
|
|
}
|
|
|
|
// BlockExists --
|
|
func (m *POWChain) BlockExists(_ context.Context, hash common.Hash) (bool, *big.Int, error) {
|
|
// Reverse the map of heights by hash.
|
|
heightsByHash := make(map[[32]byte]int)
|
|
for k, v := range m.HashesByHeight {
|
|
h := bytesutil.ToBytes32(v)
|
|
heightsByHash[h] = k
|
|
}
|
|
val, ok := heightsByHash[hash]
|
|
if !ok {
|
|
return false, nil, fmt.Errorf("could not fetch height for hash: %#x", hash)
|
|
}
|
|
return true, big.NewInt(int64(val)), nil
|
|
}
|
|
|
|
// BlockHashByHeight --
|
|
func (m *POWChain) BlockHashByHeight(_ context.Context, height *big.Int) (common.Hash, error) {
|
|
k := int(height.Int64())
|
|
val, ok := m.HashesByHeight[k]
|
|
if !ok {
|
|
return [32]byte{}, fmt.Errorf("could not fetch hash for height: %v", height)
|
|
}
|
|
return bytesutil.ToBytes32(val), nil
|
|
}
|
|
|
|
// BlockTimeByHeight --
|
|
func (m *POWChain) BlockTimeByHeight(_ context.Context, height *big.Int) (uint64, error) {
|
|
h := int(height.Int64())
|
|
return m.TimesByHeight[h], nil
|
|
}
|
|
|
|
// BlockNumberByTimestamp --
|
|
func (m *POWChain) BlockNumberByTimestamp(_ context.Context, time uint64) (*big.Int, error) {
|
|
return m.BlockNumberByHeight[time], nil
|
|
}
|
|
|
|
// DepositRoot --
|
|
func (m *POWChain) DepositRoot() [32]byte {
|
|
root := []byte("depositroot")
|
|
return bytesutil.ToBytes32(root)
|
|
}
|
|
|
|
// ChainStartDeposits --
|
|
func (m *POWChain) ChainStartDeposits() []*ethpb.Deposit {
|
|
return []*ethpb.Deposit{}
|
|
}
|
|
|
|
// ChainStartDepositHashes --
|
|
func (m *POWChain) ChainStartDepositHashes() ([][]byte, error) {
|
|
return [][]byte{}, nil
|
|
}
|
|
|
|
// ChainStartEth1Data --
|
|
func (m *POWChain) ChainStartEth1Data() *ethpb.Eth1Data {
|
|
return m.Eth1Data
|
|
}
|