-
Notifications
You must be signed in to change notification settings - Fork 1
/
consensus.go
138 lines (48 loc) · 1.72 KB
/
consensus.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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*
Copyright IBM Corp. 2017 All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package consensus
import (
cb "github.com/mcc-github/blockchain-protos-go/common"
"github.com/mcc-github/blockchain/common/channelconfig"
"github.com/mcc-github/blockchain/internal/pkg/identity"
"github.com/mcc-github/blockchain/orderer/common/blockcutter"
"github.com/mcc-github/blockchain/orderer/common/msgprocessor"
"github.com/mcc-github/blockchain/protoutil"
)
type Consenter interface {
HandleChain(support ConsenterSupport, metadata *cb.Metadata) (Chain, error)
}
type MetadataValidator interface {
ValidateConsensusMetadata(oldMetadata, newMetadata []byte, newChannel bool) error
}
type Chain interface {
Order(env *cb.Envelope, configSeq uint64) error
Configure(config *cb.Envelope, configSeq uint64) error
WaitReady() error
Errored() <-chan struct{}
Start()
Halt()
}
type ConsenterSupport interface {
identity.SignerSerializer
msgprocessor.Processor
VerifyBlockSignature([]*protoutil.SignedData, *cb.ConfigEnvelope) error
BlockCutter() blockcutter.Receiver
SharedConfig() channelconfig.Orderer
ChannelConfig() channelconfig.Channel
CreateNextBlock(messages []*cb.Envelope) *cb.Block
Block(number uint64) *cb.Block
WriteBlock(block *cb.Block, encodedMetadataValue []byte)
WriteConfigBlock(block *cb.Block, encodedMetadataValue []byte)
Sequence() uint64
ChannelID() string
Height() uint64
Append(block *cb.Block) error
}
type NoOpMetadataValidator struct {
}
func (n NoOpMetadataValidator) ValidateConsensusMetadata(oldMetadataBytes, newMetadataBytes []byte, newChannel bool) error {
return nil
}