-
Notifications
You must be signed in to change notification settings - Fork 85
/
Copy pathblock.go
132 lines (117 loc) · 3.65 KB
/
block.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
/*
* Flow Go SDK
*
* Copyright Flow 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 flow
import (
"time"
)
// Block is a set of state mutations applied to the Flow blockchain.
type Block struct {
BlockHeader
BlockPayload
}
// BlockHeader is a summary of a full block.
type BlockHeader struct {
ID Identifier
ParentID Identifier
Height uint64
Timestamp time.Time
Status BlockStatus
PayloadHash []byte
View uint64
ParentVoterSigData []byte
ProposerID Identifier
ProposerSigData []byte
ChainID Identifier
ParentVoterIndices []byte
LastViewTimeoutCertificate TimeoutCertificate
ParentView uint64
}
type TimeoutCertificate struct {
View uint64
HighQCViews []uint64
HighestQC QuorumCertificate
SignerIndices []byte
SigData []byte
}
type QuorumCertificate struct {
View uint64
BlockID Identifier
SignerIndices []byte
SigData []byte
}
// BlockStatus represents the status of a block.
type BlockStatus int
const (
// BlockStatusUnknown indicates that the block status is not known.
BlockStatusUnknown BlockStatus = iota
// BlockStatusFinalized is the status of a finalized block.
BlockStatusFinalized
// BlockStatusSealed is the status of a sealed block.
BlockStatusSealed
)
func BlockStatusFromString(s string) BlockStatus {
switch s {
case "BLOCK_FINALIZED":
return BlockStatusFinalized
case "BLOCK_SEALED":
return BlockStatusSealed
default:
return BlockStatusUnknown
}
}
// BlockPayload is the full contents of a block.
//
// A payload contains the collection guarantees and seals for a block.
type BlockPayload struct {
CollectionGuarantees []*CollectionGuarantee
Seals []*BlockSeal
Signatures [][]byte
ExecutionReceiptMetaList []*ExecutionReceiptMeta
ExecutionResultsList []*ExecutionResult
ProtocolStateID Identifier
}
type ExecutionReceiptMeta struct {
ExecutorID Identifier
ResultID Identifier
Spocks [][]byte
ExecutorSignature []byte
}
// BlockSeal is the attestation by verification nodes that the transactions in a previously
// executed block have been verified.
type BlockSeal struct {
// The ID of the block this Seal refers to (which will be of lower height than this block)
BlockID Identifier
// The ID of the execution receipt generated by the Verifier nodes; the work of verifying a
// block produces the same receipt among all verifying nodes
ExecutionReceiptID Identifier
ExecutionReceiptSignatures [][]byte
ResultApprovalSignatures [][]byte
FinalState []byte
ResultId Identifier
AggregatedApprovalSigs []*AggregatedSignature
}
type AggregatedSignature struct {
VerifierSignatures [][]byte
SignerIds []Identifier
}
// BlockDigest holds lightweight block information which includes only block id, block height and block timestamp
type BlockDigest struct {
BlockID Identifier
Height uint64
Timestamp time.Time
}