You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.3 KiB
54 lines
1.3 KiB
5 years ago
|
package slash
|
||
|
|
||
|
import (
|
||
|
"math/big"
|
||
|
|
||
|
"github.com/ethereum/go-ethereum/common"
|
||
|
"github.com/harmony-one/harmony/core/types"
|
||
|
"github.com/harmony-one/harmony/internal/params"
|
||
|
"github.com/harmony-one/harmony/shard"
|
||
|
staking "github.com/harmony-one/harmony/staking/types"
|
||
|
"github.com/pkg/errors"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
fakeChainErrEpoch = 1
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
errFakeChainUnexpectEpoch = errors.New("epoch not expected")
|
||
|
)
|
||
|
|
||
|
type fakeBlockChain struct {
|
||
|
config params.ChainConfig
|
||
|
currentBlock types.Block
|
||
|
superCommittee shard.State
|
||
|
snapshots map[common.Address]staking.ValidatorWrapper
|
||
|
}
|
||
|
|
||
|
func (bc *fakeBlockChain) Config() *params.ChainConfig {
|
||
|
return &bc.config
|
||
|
}
|
||
|
|
||
|
func (bc *fakeBlockChain) CurrentBlock() *types.Block {
|
||
|
return &bc.currentBlock
|
||
|
}
|
||
|
|
||
|
func (bc *fakeBlockChain) ReadShardState(epoch *big.Int) (*shard.State, error) {
|
||
|
if epoch.Cmp(big.NewInt(fakeChainErrEpoch)) == 0 {
|
||
|
return nil, errFakeChainUnexpectEpoch
|
||
|
}
|
||
|
return &bc.superCommittee, nil
|
||
|
}
|
||
|
|
||
|
func (bc *fakeBlockChain) ReadValidatorSnapshotAtEpoch(epoch *big.Int, addr common.Address) (*staking.ValidatorSnapshot, error) {
|
||
|
vw, ok := bc.snapshots[addr]
|
||
|
if !ok {
|
||
|
return nil, errors.New("missing snapshot")
|
||
|
}
|
||
|
return &staking.ValidatorSnapshot{
|
||
|
Validator: &vw,
|
||
|
Epoch: new(big.Int).Set(epoch),
|
||
|
}, nil
|
||
|
}
|