Skip to content

Commit 3cfb070

Browse files
authored
Refactoring/simplifying hexadecimal value parsing/trimming (#94)
1 parent 9b6d9f6 commit 3cfb070

File tree

22 files changed

+230
-243
lines changed

22 files changed

+230
-243
lines changed

internal/bytesbuilder/bytesbuilder.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ package bytesbuilder
33
import (
44
"encoding/hex"
55
"math/big"
6-
"strings"
76

7+
"github.com/1inch/1inch-sdk-go/internal/hexadecimal"
88
"github.com/ethereum/go-ethereum/common"
99
)
1010

@@ -56,12 +56,13 @@ func (b *BytesBuilder) AddAddress(address common.Address) {
5656
b.data = append(b.data, address.Bytes()...)
5757
}
5858

59-
func (b *BytesBuilder) AddBytes(data string) {
60-
bytes, err := hex.DecodeString(strings.TrimPrefix(data, "0x"))
59+
func (b *BytesBuilder) AddBytes(data string) error {
60+
bytes, err := hex.DecodeString(hexadecimal.Trim0x(data))
6161
if err != nil {
62-
panic("invalid hex string")
62+
return err
6363
}
6464
b.data = append(b.data, bytes...)
65+
return nil
6566
}
6667

6768
func (b *BytesBuilder) AsHex() string {

internal/bytesiterator/bytesiter_test.go

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,26 @@
11
package bytesiterator
22

33
import (
4-
"encoding/hex"
54
"fmt"
65
"math/big"
76
"strings"
87
"testing"
98

9+
"github.com/ethereum/go-ethereum/common/hexutil"
1010
"github.com/stretchr/testify/assert"
1111
"github.com/stretchr/testify/require"
1212
)
1313

14-
func hexToBytes(s string) ([]byte, error) {
15-
s = strings.TrimPrefix(s, "0x")
16-
return hex.DecodeString(s)
17-
}
18-
1914
func bigIntFromHex(hexStr string) (*big.Int, error) {
20-
b, err := hexToBytes(hexStr)
15+
b, err := hexutil.Decode(hexStr)
2116
if err != nil {
2217
return nil, err
2318
}
2419
return new(big.Int).SetBytes(b), nil
2520
}
2621

2722
func uint32FromHex(hexStr string) (uint32, error) {
28-
b, err := hexToBytes(hexStr)
23+
b, err := hexutil.Decode(hexStr)
2924
if err != nil {
3025
return 0, err
3126
}
@@ -172,7 +167,7 @@ func TestBytesIter_NextByte(t *testing.T) {
172167
for _, tt := range tests {
173168
tt := tt
174169
t.Run(tt.name, func(t *testing.T) {
175-
data, err := hexToBytes(tt.hexData)
170+
data, err := hexutil.Decode(tt.hexData)
176171
require.NoError(t, err)
177172
iter := New(data)
178173

@@ -190,7 +185,7 @@ func TestBytesIter_NextByte(t *testing.T) {
190185
if tt.expectError {
191186
assert.Error(t, readErr)
192187
} else {
193-
expected, err := hexToBytes(tt.expectedHex)
188+
expected, err := hexutil.Decode(tt.expectedHex)
194189
require.NoError(t, err)
195190
assert.NoError(t, readErr)
196191
assert.Equal(t, expected, result)
@@ -222,7 +217,7 @@ func TestBytesIter_NextUint16(t *testing.T) {
222217
for _, tt := range tests {
223218
tt := tt
224219
t.Run(tt.name, func(t *testing.T) {
225-
data, err := hexToBytes(tt.hexData)
220+
data, err := hexutil.Decode(tt.hexData)
226221
require.NoError(t, err)
227222
iter := New(data)
228223

@@ -263,7 +258,7 @@ func TestBytesIter_NextUint24(t *testing.T) {
263258
for _, tt := range tests {
264259
tt := tt
265260
t.Run(tt.name, func(t *testing.T) {
266-
data, err := hexToBytes(tt.hexData)
261+
data, err := hexutil.Decode(tt.hexData)
267262
require.NoError(t, err)
268263
iter := New(data)
269264

@@ -304,7 +299,7 @@ func TestBytesIter_NextUint32(t *testing.T) {
304299
for _, tt := range tests {
305300
tt := tt
306301
t.Run(tt.name, func(t *testing.T) {
307-
data, err := hexToBytes(tt.hexData)
302+
data, err := hexutil.Decode(tt.hexData)
308303
require.NoError(t, err)
309304
iter := New(data)
310305

@@ -343,7 +338,7 @@ func TestBytesIter_NextUint160(t *testing.T) {
343338
for _, tt := range tests {
344339
tt := tt
345340
t.Run(tt.name, func(t *testing.T) {
346-
data, err := hexToBytes(tt.hexData)
341+
data, err := hexutil.Decode(tt.hexData)
347342
require.NoError(t, err)
348343
iter := New(data)
349344

@@ -381,7 +376,7 @@ func TestBytesIter_NextUint256(t *testing.T) {
381376
for _, tt := range tests {
382377
tt := tt
383378
t.Run(tt.name, func(t *testing.T) {
384-
data, err := hexToBytes(tt.hexData)
379+
data, err := hexutil.Decode(tt.hexData)
385380
require.NoError(t, err)
386381
iter := New(data)
387382

@@ -437,7 +432,7 @@ func TestBytesIter_NextBytes(t *testing.T) {
437432
for _, tt := range tests {
438433
tt := tt
439434
t.Run(tt.name, func(t *testing.T) {
440-
data, err := hexToBytes(tt.hexData)
435+
data, err := hexutil.Decode(tt.hexData)
441436
require.NoError(t, err)
442437
iter := New(data)
443438

@@ -447,7 +442,7 @@ func TestBytesIter_NextBytes(t *testing.T) {
447442
assert.Error(t, err)
448443
} else {
449444
require.NoError(t, err)
450-
expected, err := hexToBytes(tt.expectedHex)
445+
expected, err := hexutil.Decode(tt.expectedHex)
451446
require.NoError(t, err)
452447
assert.Equal(t, expected, val)
453448
}
@@ -495,7 +490,7 @@ func TestBytesIter_NextString(t *testing.T) {
495490
for _, tt := range tests {
496491
tt := tt
497492
t.Run(tt.name, func(t *testing.T) {
498-
data, err := hexToBytes(tt.hexData)
493+
data, err := hexutil.Decode(tt.hexData)
499494
require.NoError(t, err)
500495
iter := New(data)
501496

@@ -505,7 +500,7 @@ func TestBytesIter_NextString(t *testing.T) {
505500
assert.Error(t, err)
506501
} else {
507502
require.NoError(t, err)
508-
expectedBytes, err := hexToBytes(tt.expectedHex)
503+
expectedBytes, err := hexutil.Decode(tt.expectedHex)
509504
require.NoError(t, err)
510505
expectedStr := string(expectedBytes)
511506
assert.Equal(t, expectedStr, strVal)
@@ -544,7 +539,7 @@ func TestBytesIter_Rest(t *testing.T) {
544539
for _, tt := range tests {
545540
tt := tt
546541
t.Run(tt.name, func(t *testing.T) {
547-
data, err := hexToBytes(tt.hexData)
542+
data, err := hexutil.Decode(tt.hexData)
548543
require.NoError(t, err)
549544
iter := New(data)
550545

@@ -559,7 +554,7 @@ func TestBytesIter_Rest(t *testing.T) {
559554
// Expect no remaining bytes; rest can be nil or empty
560555
assert.Empty(t, rest, "Expected no remaining bytes, but some were found")
561556
} else {
562-
expected, err := hexToBytes(strings.TrimPrefix(tt.expectedHex, "0x"))
557+
expected, err := hexutil.Decode(tt.expectedHex)
563558
require.NoError(t, err)
564559
assert.Equal(t, expected, rest)
565560
}
@@ -608,7 +603,7 @@ func TestBytesIter_IsEmpty(t *testing.T) {
608603
for _, tt := range tests {
609604
tt := tt
610605
t.Run(tt.name, func(t *testing.T) {
611-
data, err := hexToBytes(tt.hexData)
606+
data, err := hexutil.Decode(tt.hexData)
612607
require.NoError(t, err)
613608
iter := New(data)
614609

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package hexadecimal
2+
3+
import (
4+
"encoding/hex"
5+
"strings"
6+
)
7+
8+
func IsHexBytes(s string) bool {
9+
_, err := hex.DecodeString(Trim0x(s))
10+
return err == nil
11+
}
12+
13+
func Trim0x(s string) string {
14+
return strings.TrimPrefix(s, "0x")
15+
}

sdk-clients/aggregation/examples/approve/main.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package main
22

33
import (
44
"context"
5-
"encoding/hex"
65
"fmt"
76
"log"
87
"math/big"
@@ -12,6 +11,7 @@ import (
1211
"github.com/1inch/1inch-sdk-go/constants"
1312
"github.com/1inch/1inch-sdk-go/sdk-clients/aggregation"
1413
"github.com/ethereum/go-ethereum/common"
14+
"github.com/ethereum/go-ethereum/common/hexutil"
1515
)
1616

1717
var (
@@ -62,7 +62,7 @@ func main() {
6262
if err != nil {
6363
log.Fatalf("Failed to get approve data: %v\n", err)
6464
}
65-
data, err := hex.DecodeString(approveData.Data[2:])
65+
data, err := hexutil.Decode(approveData.Data)
6666
if err != nil {
6767
log.Fatalf("Failed to decode approve data: %v\n", err)
6868
}

sdk-clients/aggregation/normalization.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package aggregation
22

33
import (
4-
"encoding/hex"
54
"errors"
65
"math/big"
76

87
"github.com/ethereum/go-ethereum/common"
8+
"github.com/ethereum/go-ethereum/common/hexutil"
99

1010
"github.com/1inch/1inch-sdk-go/constants"
1111
)
@@ -30,7 +30,7 @@ func normalizeSwapResponse(resp SwapResponse) (*SwapResponseExtended, error) {
3030
return nil, errors.New("invalid 'Value' value")
3131
}
3232

33-
data, err := hex.DecodeString(resp.Tx.Data[2:])
33+
data, err := hexutil.Decode(resp.Tx.Data)
3434
if err != nil {
3535
return nil, errors.New("invalid 'Data' value")
3636
}
@@ -69,7 +69,7 @@ func normalizeApproveCallDataResponse(resp ApproveCallDataResponse) (*ApproveCal
6969
return nil, errors.New("invalid 'Value' value")
7070
}
7171

72-
data, err := hex.DecodeString(resp.Data[2:])
72+
data, err := hexutil.Decode(resp.Data)
7373
if err != nil {
7474
return nil, errors.New("invalid 'Data' value")
7575
}

sdk-clients/aggregation/normalization_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
package aggregation
22

33
import (
4-
"encoding/hex"
54
"math/big"
65
"testing"
76

87
"github.com/ethereum/go-ethereum/common"
8+
"github.com/ethereum/go-ethereum/common/hexutil"
99
"github.com/stretchr/testify/assert"
1010

1111
"github.com/1inch/1inch-sdk-go/constants"
1212
)
1313

1414
func TestNormalizeSwapResponse(t *testing.T) {
1515
d := "0x0502b1c50000000000000000000000005a98fcbea516cf06857215779fd812ca3bef1b32000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000050000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000100000000000000003b6d0340c558f600b34a5f69dd2f0d06cb8a88d829b7420ade8bb62d"
16-
wantedDataLDOWETH, err := hex.DecodeString(d[2:])
16+
wantedDataLDOWETH, err := hexutil.Decode(d)
1717
assert.NoError(t, err)
1818

1919
testCases := []struct {
@@ -102,7 +102,7 @@ func TestNormalizeSwapResponse(t *testing.T) {
102102

103103
func TestNormalizeApproveCallDataResponse(t *testing.T) {
104104
d := "0x095ea7b30000000000000000000000001111111254eeb25477b68fb85ed929f73a9605820000000000000000000000000000000000000000000000000000000556cd83c2"
105-
ldoApproveData, err := hex.DecodeString(d[2:])
105+
ldoApproveData, err := hexutil.Decode(d)
106106
assert.NoError(t, err)
107107

108108
testCases := []struct {

sdk-clients/fusion/examples/place_order/main.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ var (
2020
const (
2121
usdc = "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"
2222
wmatic = "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270"
23-
amount = "1000000"
23+
amount = "1000000000000000000"
2424
chainId = 137
2525
)
2626

@@ -40,8 +40,8 @@ func main() {
4040
}
4141
ctx := context.Background()
4242

43-
fromToken := usdc
44-
toToken := wmatic
43+
fromToken := wmatic
44+
toToken := usdc
4545

4646
response, err := client.GetQuote(ctx, fusion.QuoterControllerGetQuoteParamsFixed{
4747
FromTokenAddress: fromToken,

0 commit comments

Comments
 (0)