forked from elastos/Elastos.ELA
-
Notifications
You must be signed in to change notification settings - Fork 0
/
producerinfo.go
131 lines (106 loc) · 3.11 KB
/
producerinfo.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
// Copyright (c) 2017-2019 The Elastos Foundation
// Use of this source code is governed by an MIT
// license that can be found in the LICENSE file.
//
package payload
import (
"bytes"
"errors"
"io"
"github.com/elastos/Elastos.ELA/common"
"github.com/elastos/Elastos.ELA/crypto"
)
const ProducerInfoVersion byte = 0x00
type ProducerInfo struct {
OwnerPublicKey []byte
NodePublicKey []byte
NickName string
Url string
Location uint64
NetAddress string
Signature []byte
}
func (a *ProducerInfo) Data(version byte) []byte {
buf := new(bytes.Buffer)
if err := a.Serialize(buf, version); err != nil {
return []byte{0}
}
return buf.Bytes()
}
func (a *ProducerInfo) Serialize(w io.Writer, version byte) error {
err := a.SerializeUnsigned(w, version)
if err != nil {
return err
}
err = common.WriteVarBytes(w, a.Signature)
if err != nil {
return errors.New("[ProducerInfo], Signature serialize failed")
}
return nil
}
func (a *ProducerInfo) SerializeUnsigned(w io.Writer, version byte) error {
err := common.WriteVarBytes(w, a.OwnerPublicKey)
if err != nil {
return errors.New("[ProducerInfo], owner publicKey serialize failed")
}
err = common.WriteVarBytes(w, a.NodePublicKey)
if err != nil {
return errors.New("[ProducerInfo], node publicKey serialize failed")
}
err = common.WriteVarString(w, a.NickName)
if err != nil {
return errors.New("[ProducerInfo], nickname serialize failed")
}
err = common.WriteVarString(w, a.Url)
if err != nil {
return errors.New("[ProducerInfo], url serialize failed")
}
err = common.WriteUint64(w, a.Location)
if err != nil {
return errors.New("[ProducerInfo], location serialize failed")
}
err = common.WriteVarString(w, a.NetAddress)
if err != nil {
return errors.New("[ProducerInfo], address serialize failed")
}
return nil
}
func (a *ProducerInfo) Deserialize(r io.Reader, version byte) error {
err := a.DeserializeUnsigned(r, version)
if err != nil {
return err
}
a.Signature, err = common.ReadVarBytes(r, crypto.SignatureLength, "signature")
if err != nil {
return errors.New("[ProducerInfo], signature deserialize failed")
}
return nil
}
func (a *ProducerInfo) DeserializeUnsigned(r io.Reader, version byte) error {
var err error
a.OwnerPublicKey, err = common.ReadVarBytes(r, crypto.NegativeBigLength, "own public key")
if err != nil {
return errors.New("[ProducerInfo], owner publicKey deserialize failed")
}
a.NodePublicKey, err = common.ReadVarBytes(r, crypto.NegativeBigLength, "node public key")
if err != nil {
return errors.New("[ProducerInfo], node publicKey deserialize failed")
}
a.NickName, err = common.ReadVarString(r)
if err != nil {
return errors.New("[ProducerInfo], nickName deserialize failed")
}
a.Url, err = common.ReadVarString(r)
if err != nil {
return errors.New("[ProducerInfo], url deserialize failed")
}
a.Location, err = common.ReadUint64(r)
if err != nil {
return errors.New("[ProducerInfo], location deserialize failed")
}
a.NetAddress, err = common.ReadVarString(r)
if err != nil {
return errors.New("[ProducerInfo], address deserialize failed")
}
return nil
}