Skip to content

Commit 1ee93d9

Browse files
author
Goren G
committed
fix Marshal/Unmarshal address
1 parent 36aa671 commit 1ee93d9

File tree

3 files changed

+46
-4
lines changed

3 files changed

+46
-4
lines changed

common/types/address.go

+19-4
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,16 @@ func BytesToAddress(b []byte) (Address, error) {
6060

6161
// HexToAddress convert hex address string to Address
6262
func HexToAddress(hexStr string) (Address, error) {
63-
if len(hexStr) != hexAddressLength {
63+
s := util.TrimQuotes(hexStr)
64+
if len(s) != hexAddressLength {
6465
return Address{}, errAddressLen
6566
}
6667

67-
if !strings.HasPrefix(hexStr, AddressPrefix) {
68+
if !strings.HasPrefix(s, AddressPrefix) {
6869
return Address{}, errAddressPrefix
6970
}
7071

71-
addr := hexStr[addressPrefixLen:]
72+
addr := s[addressPrefixLen:]
7273

7374
key, err := AddressEncoding.DecodeString("1111" + addr[0:52])
7475
if err != nil {
@@ -218,5 +219,19 @@ func (addr *Address) UnmarshalBinary(text []byte) error {
218219

219220
//MarshalJSON implements json.Marshaler interface
220221
func (addr *Address) MarshalJSON() ([]byte, error) {
221-
return []byte(addr.String()), nil
222+
//buffer := bytes.NewBufferString(`"`)
223+
//buffer.WriteString(addr.String())
224+
//buffer.WriteString(`"`)
225+
//return buffer.Bytes(), nil
226+
return []byte("\"" + addr.String() + "\""), nil
227+
}
228+
229+
//UnmarshalJSON implements json.UnmarshalJSON interface
230+
func (addr *Address) UnmarshalJSON(b []byte) error {
231+
tmp, err := HexToAddress(string(b))
232+
if err != nil {
233+
return err
234+
}
235+
copy((*addr)[:], tmp[:])
236+
return nil
222237
}

common/types/address_test.go

+17
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package types
22

33
import (
44
"encoding/hex"
5+
"encoding/json"
6+
"fmt"
57
"testing"
68
)
79

@@ -71,3 +73,18 @@ func BenchmarkGenerateAddress(b *testing.B) {
7173
PubToAddress(pub.Bytes())
7274
}
7375
}
76+
77+
func TestAddressMarshalJSON(t *testing.T) {
78+
addr, _ := HexToAddress("qlc_3t6k35gi95xu6tergt6p69ck76ogmitsa8mnijtpxm9fkcm736xtoncuohr3")
79+
bytes, err := json.Marshal(&addr)
80+
if err != nil {
81+
t.Fatal(err)
82+
}
83+
fmt.Println(string(bytes))
84+
addr2 := Address{}
85+
err = json.Unmarshal(bytes, &addr2)
86+
if err != nil {
87+
t.Fatal(err)
88+
}
89+
fmt.Println(addr2)
90+
}

common/types/internal/util/util.go

+10
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,13 @@ func Hash(size int, data ...[]byte) []byte {
5757
}
5858
return d.Sum(nil)
5959
}
60+
61+
// TrimQuotes trim quotes of string if quotes exist
62+
func TrimQuotes(s string) string {
63+
if len(s) >= 2 {
64+
if s[0] == '"' && s[len(s)-1] == '"' {
65+
return s[1 : len(s)-1]
66+
}
67+
}
68+
return s
69+
}

0 commit comments

Comments
 (0)