/
everyblockseed.go
51 lines (42 loc) · 1.42 KB
/
everyblockseed.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// Copyright (c) 2018 The MATRIX Authors
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php
package everyblockseed
import (
"math/big"
"github.com/MatrixAINetwork/go-matrix/baseinterface"
"github.com/MatrixAINetwork/go-matrix/common"
"github.com/MatrixAINetwork/go-matrix/params/manparams"
)
var (
ModulePreBlockSeed = "区块种子"
mapPreBlockSeedPlugs = make(map[string]PreBlockSeedPlug)
)
type PreBlockSeedPlug interface {
CalcSeed(req common.Hash, support baseinterface.RandomChainSupport) (*big.Int, error)
Prepare(uint64, common.Hash) error
}
func init() {
baseinterface.RegRandom(manparams.EveryBlockSeed, NewSubService)
}
func NewSubService(plug string, support baseinterface.RandomChainSupport) (baseinterface.RandomSubService, error) {
everyBlockSeed := &preBlockSeed{
plug: plug,
support: support,
}
return everyBlockSeed, nil
}
type preBlockSeed struct {
plug string
support baseinterface.RandomChainSupport
}
func RegisterLotterySeedPlugs(name string, plug PreBlockSeedPlug) {
mapPreBlockSeedPlugs[name] = plug
}
func (self *preBlockSeed) Prepare(height uint64, hash common.Hash) error {
err := mapPreBlockSeedPlugs[self.plug].Prepare(height, hash)
return err
}
func (self *preBlockSeed) CalcData(calcData common.Hash) (*big.Int, error) {
return mapPreBlockSeedPlugs[self.plug].CalcSeed(calcData, self.support)
}