-
Notifications
You must be signed in to change notification settings - Fork 4
/
msg_version.go
53 lines (47 loc) · 1.14 KB
/
msg_version.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
package protocol
import (
"math/rand"
"time"
)
// MsgVersion ...
type MsgVersion struct {
Version int32
Services uint64
Timestamp int64
AddrRecv VersionNetAddr
AddrFrom VersionNetAddr
Nonce uint64
UserAgent VarStr
StartHeight int32
Relay bool
}
// NewVersionMsg returns a new MsgVersion.
func NewVersionMsg(network Magic, userAgent string, peerIP IPv4, peerPort uint16, Services ServiceFlag) (*Message, error) {
payload := MsgVersion{
Version: Version,
Services: uint64(Services),
Timestamp: time.Now().UTC().Unix(),
AddrRecv: VersionNetAddr{
Services: uint64(Services) | uint64(SFNodeNetwork),
IP: peerIP,
Port: peerPort,
},
AddrFrom: VersionNetAddr{
Services: uint64(Services),
IP: NewIPv4(127, 0, 0, 1),
Port: 9334,
},
Nonce: rand.Uint64(),
UserAgent: NewUserAgent(userAgent),
StartHeight: -1,
Relay: true,
}
msg, err := NewMessage("version", network, payload)
if err != nil {
return nil, err
}
return msg, nil
}
func (msg MsgVersion) HasService(service ServiceFlag) bool {
return msg.Services&uint64(service) == uint64(service)
}