-
Notifications
You must be signed in to change notification settings - Fork 174
/
address.go
145 lines (118 loc) · 3.52 KB
/
address.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
139
140
141
142
143
144
145
package types
import (
"bytes"
"encoding/hex"
"encoding/json"
"fmt"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/maticnetwork/bor/common"
"gopkg.in/yaml.v2"
)
const (
// AddrLen defines a valid address length
AddrLen = 20
)
// Ensure that different address types implement the interface
var _ sdk.Address = HeimdallAddress{}
var _ yaml.Marshaler = HeimdallAddress{}
// HeimdallAddress represents heimdall address
type HeimdallAddress common.Address
// ZeroHeimdallAddress represents zero address
var ZeroHeimdallAddress = HeimdallAddress{}
// EthAddress get eth address
func (aa HeimdallAddress) EthAddress() common.Address {
return common.Address(aa)
}
// Equals returns boolean for whether two AccAddresses are Equal
func (aa HeimdallAddress) Equals(aa2 sdk.Address) bool {
if aa.Empty() && aa2.Empty() {
return true
}
return bytes.Equal(aa.Bytes(), aa2.Bytes())
}
// Empty returns boolean for whether an AccAddress is empty
func (aa HeimdallAddress) Empty() bool {
return bytes.Equal(aa.Bytes(), ZeroHeimdallAddress.Bytes())
}
// Marshal returns the raw address bytes. It is needed for protobuf
// compatibility.
func (aa HeimdallAddress) Marshal() ([]byte, error) {
return aa.Bytes(), nil
}
// Unmarshal sets the address to the given data. It is needed for protobuf
// compatibility.
func (aa *HeimdallAddress) Unmarshal(data []byte) error {
*aa = HeimdallAddress(common.BytesToAddress(data))
return nil
}
// MarshalJSON marshals to JSON using Bech32.
func (aa HeimdallAddress) MarshalJSON() ([]byte, error) {
return json.Marshal(aa.String())
}
// MarshalYAML marshals to YAML using Bech32.
func (aa HeimdallAddress) MarshalYAML() (interface{}, error) {
return aa.String(), nil
}
// UnmarshalJSON unmarshals from JSON assuming Bech32 encoding.
func (aa *HeimdallAddress) UnmarshalJSON(data []byte) error {
var s string
err := json.Unmarshal(data, &s)
if err != nil {
return err
}
*aa = HexToHeimdallAddress(s)
return nil
}
// UnmarshalYAML unmarshals from JSON assuming Bech32 encoding.
func (aa *HeimdallAddress) UnmarshalYAML(data []byte) error {
var s string
err := yaml.Unmarshal(data, &s)
if err != nil {
return err
}
*aa = HexToHeimdallAddress(s)
return nil
}
// Bytes returns the raw address bytes.
func (aa HeimdallAddress) Bytes() []byte {
return aa[:]
}
// String implements the Stringer interface.
func (aa HeimdallAddress) String() string {
return "0x" + hex.EncodeToString(aa.Bytes())
}
// Format implements the fmt.Formatter interface.
// nolint: errcheck
func (aa HeimdallAddress) Format(s fmt.State, verb rune) {
switch verb {
case 's':
s.Write([]byte(aa.String()))
case 'p':
s.Write([]byte(fmt.Sprintf("%p", aa)))
default:
s.Write([]byte(fmt.Sprintf("%X", aa.Bytes())))
}
}
//
// Address utils
//
// BytesToHeimdallAddress returns Address with value b.
func BytesToHeimdallAddress(b []byte) HeimdallAddress {
return HeimdallAddress(common.BytesToAddress(b))
}
// HexToHeimdallAddress returns Address with value b.
func HexToHeimdallAddress(b string) HeimdallAddress {
return HeimdallAddress(common.HexToAddress(b))
}
// AccAddressToHeimdallAddress returns Address with value b.
func AccAddressToHeimdallAddress(b sdk.AccAddress) HeimdallAddress {
return BytesToHeimdallAddress(b[:])
}
// HeimdallAddressToAccAddress returns Address with value b.
func HeimdallAddressToAccAddress(b HeimdallAddress) sdk.AccAddress {
return sdk.AccAddress(b.Bytes())
}
// SampleHeimdallAddress returns sample address
func SampleHeimdallAddress(s string) HeimdallAddress {
return BytesToHeimdallAddress([]byte(s))
}