-
Notifications
You must be signed in to change notification settings - Fork 12
/
signaled_block.go
72 lines (63 loc) · 2.09 KB
/
signaled_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
package model
import (
"bytes"
"time"
"github.com/iotaledger/hive.go/lo"
"github.com/iotaledger/hive.go/stringify"
iotago "github.com/iotaledger/iota.go/v4"
)
type SignaledBlock struct {
ID iotago.BlockID `serix:""`
IssuingTime time.Time `serix:""`
HighestSupportedVersion iotago.Version `serix:""`
ProtocolParametersHash iotago.Identifier `serix:""`
}
func NewSignaledBlock(blockID iotago.BlockID, block *iotago.Block, validationBlock *iotago.ValidationBlockBody) *SignaledBlock {
return &SignaledBlock{
ID: blockID,
IssuingTime: block.Header.IssuingTime,
HighestSupportedVersion: validationBlock.HighestSupportedVersion,
ProtocolParametersHash: validationBlock.ProtocolParametersHash,
}
}
func (s *SignaledBlock) Compare(other *SignaledBlock) int {
switch {
case s == nil && other == nil:
return 0
case s == nil:
return -1
case other == nil:
return 1
case s.HighestSupportedVersion > other.HighestSupportedVersion:
return 1
case s.HighestSupportedVersion < other.HighestSupportedVersion:
return -1
case s.IssuingTime.After(other.IssuingTime):
return 1
case s.IssuingTime.Before(other.IssuingTime):
return -1
default:
return bytes.Compare(lo.PanicOnErr(s.ID.Bytes()), lo.PanicOnErr(other.ID.Bytes()))
}
}
func (s *SignaledBlock) Bytes(apiForSlot iotago.API) ([]byte, error) {
return apiForSlot.Encode(s)
}
func SignaledBlockFromBytesFunc(decodeAPI iotago.API) func([]byte) (*SignaledBlock, int, error) {
return func(bytes []byte) (*SignaledBlock, int, error) {
signaledBlock := new(SignaledBlock)
consumedBytes, err := decodeAPI.Decode(bytes, signaledBlock)
if err != nil {
return nil, 0, err
}
return signaledBlock, consumedBytes, nil
}
}
func (s *SignaledBlock) String() string {
return stringify.Struct("SignaledBlock",
stringify.NewStructField("ID", s.ID),
stringify.NewStructField("IssuingTime", s.IssuingTime),
stringify.NewStructField("HighestSupportedVersion", s.HighestSupportedVersion),
stringify.NewStructField("ProtocolParametersHash", s.ProtocolParametersHash),
)
}