-
Notifications
You must be signed in to change notification settings - Fork 39
/
blockhandler.go
80 lines (71 loc) · 2.31 KB
/
blockhandler.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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*
* Copyright 2021 ICON Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package base
import (
"context"
"io"
"github.com/icon-project/goloop/common/db"
"github.com/icon-project/goloop/common/log"
"github.com/icon-project/goloop/module"
)
type BlockHandlerContext interface {
GetBlockByHeight(height int64) (module.Block, error)
}
type BlockVersionSpec interface {
FinalizeHeader(dbase db.Database) error
// GetVoters returns the voters for the block. Note that this is different
// from the voted, which is a subset of the voters.
GetVoters(ctx BlockHandlerContext) (module.ValidatorList, error)
// VerifyTimestamp verifies timestamp of the block.
VerifyTimestamp(prev module.BlockData, prevVoters module.ValidatorList) error
}
type Block interface {
BlockVersionSpec
module.Block
}
type BlockData interface {
BlockVersionSpec
module.BlockData
}
type BlockHandler interface {
Version() int
// NewBlock returns a new block. It is used for propose or genesis.
NewBlock(
height int64, ts int64, proposer module.Address, prev module.Block,
logsBloom module.LogsBloom, result []byte,
patchTransactions module.TransactionList,
normalTransactions module.TransactionList,
nextValidators module.ValidatorList, votes module.CommitVoteSet,
bs module.BTPSection,
) Block
NewBlockFromHeaderReader(r io.Reader) (Block, error)
NewBlockDataFromReader(io.Reader) (BlockData, error)
GetBlock(id []byte) (Block, error)
}
type Chain interface {
Database() db.Database
CommitVoteSetDecoder() module.CommitVoteSetDecoder
ServiceManager() module.ServiceManager
MetricContext() context.Context
CID() int
NID() int
Logger() log.Logger
NetworkManager() module.NetworkManager
BlockManager() module.BlockManager
Regulator() module.Regulator
Wallet() module.Wallet
WalletFor(dsa string) module.BaseWallet
}