Skip to content

Commit 788ad77

Browse files
committed
improvements to proto conversion helpers
1 parent 9b0b153 commit 788ad77

File tree

2 files changed

+37
-71
lines changed

2 files changed

+37
-71
lines changed

pkg/capabilities/v2/chain-capabilities/evm/proto_helpers.go

Lines changed: 17 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package evm
22

33
import (
4-
"errors"
54
"fmt"
65
"time"
76

@@ -129,11 +128,6 @@ func ConvertTransactionFromProto(protoTx *Transaction) (*evmtypes.Transaction, e
129128
return nil, evm.ErrEmptyTx
130129
}
131130

132-
var data []byte
133-
if protoTx.GetData() != nil {
134-
data = protoTx.GetData()
135-
}
136-
137131
toAddress, err := evm.ConvertOptionalAddressFromProto(protoTx.GetTo())
138132
if err != nil {
139133
return nil, fmt.Errorf("failed to convert 'to' address: %w", err)
@@ -146,7 +140,7 @@ func ConvertTransactionFromProto(protoTx *Transaction) (*evmtypes.Transaction, e
146140

147141
return &evmtypes.Transaction{
148142
To: toAddress,
149-
Data: data,
143+
Data: protoTx.GetData(),
150144
Hash: txHash,
151145
Nonce: protoTx.GetNonce(),
152146
Gas: protoTx.GetGas(),
@@ -172,21 +166,25 @@ func ConvertCallMsgFromProto(protoMsg *CallMsg) (*evmtypes.CallMsg, error) {
172166
return nil, evm.ErrEmptyMsg
173167
}
174168

175-
fromAddress, err := evm.ConvertAddressFromProto(protoMsg.GetFrom())
176-
if err != nil {
177-
return nil, fmt.Errorf("failed to convert 'from' address: %w", err)
178-
}
179-
180169
toAddress, err := evm.ConvertOptionalAddressFromProto(protoMsg.GetTo())
181170
if err != nil {
182171
return nil, fmt.Errorf("failed to convert 'to' address: %w", err)
183172
}
184173

185-
return &evmtypes.CallMsg{
186-
From: fromAddress,
174+
callMsg := &evmtypes.CallMsg{
187175
Data: protoMsg.GetData(),
188176
To: toAddress,
189-
}, nil
177+
}
178+
179+
// fromAddress is optional
180+
if evm.ValidateAddressBytes(protoMsg.GetFrom()) != nil {
181+
callMsg.From, err = evm.ConvertAddressFromProto(protoMsg.GetFrom())
182+
if err != nil {
183+
return nil, fmt.Errorf("failed to convert 'from' address: %w", err)
184+
}
185+
}
186+
187+
return callMsg, nil
190188
}
191189

192190
func ConvertLPFilterToProto(filter evmtypes.LPFilterQuery) *LPFilter {
@@ -253,7 +251,8 @@ func ConvertLPFilterFromProto(protoFilter *LPFilter) (evmtypes.LPFilterQuery, er
253251
func ConvertFilterToProto(filter evmtypes.FilterQuery) (*FilterQuery, error) {
254252
topics, err := convertTopicsToProto(filter.Topics)
255253
if err != nil {
256-
return nil, errors.Join(evm.ErrTopicsConversion, err)
254+
255+
return nil, fmt.Errorf("%w: %w", evm.ErrTopicsConversion, err)
257256
}
258257

259258
return &FilterQuery{
@@ -266,10 +265,6 @@ func ConvertFilterToProto(filter evmtypes.FilterQuery) (*FilterQuery, error) {
266265
}
267266

268267
func ConvertLogsToProto(logs []*evmtypes.Log) ([]*Log, error) {
269-
if logs == nil {
270-
return nil, fmt.Errorf("logs are nil")
271-
}
272-
273268
protoLogs := make([]*Log, 0, len(logs))
274269
for i, log := range logs {
275270
if log == nil {
@@ -297,7 +292,7 @@ func ConvertFilterFromProto(protoFilter *FilterQuery) (evmtypes.FilterQuery, err
297292

298293
topics, err := ConvertTopicsFromProto(protoFilter.GetTopics())
299294
if err != nil {
300-
return evmtypes.FilterQuery{}, errors.Join(evm.ErrTopicsConversion, err)
295+
return evmtypes.FilterQuery{}, fmt.Errorf("%w: %w", evm.ErrTopicsConversion, err)
301296
}
302297

303298
return evmtypes.FilterQuery{
@@ -310,10 +305,6 @@ func ConvertFilterFromProto(protoFilter *FilterQuery) (evmtypes.FilterQuery, err
310305
}
311306

312307
func ConvertLogsFromProto(protoLogs []*Log) ([]*evmtypes.Log, error) {
313-
if protoLogs == nil {
314-
return nil, fmt.Errorf("logs can't be nil")
315-
}
316-
317308
logs := make([]*evmtypes.Log, 0, len(protoLogs))
318309
for i, protoLog := range protoLogs {
319310
if protoLog == nil {
@@ -330,10 +321,6 @@ func ConvertLogsFromProto(protoLogs []*Log) ([]*evmtypes.Log, error) {
330321
}
331322

332323
func ConvertTopicsFromProto(protoTopics []*Topics) ([][]evmtypes.Hash, error) {
333-
if protoTopics == nil {
334-
return nil, fmt.Errorf("topics can't be nil")
335-
}
336-
337324
topics := make([][]evmtypes.Hash, 0, len(protoTopics))
338325
for i, protoTopic := range protoTopics {
339326
if protoTopic == nil {
@@ -367,10 +354,6 @@ func ConvertLogToProto(log evmtypes.Log) *Log {
367354
}
368355

369356
func convertTopicsToProto(topics [][]evmtypes.Hash) ([]*Topics, error) {
370-
if topics == nil {
371-
return nil, fmt.Errorf("topics can't be nil")
372-
}
373-
374357
protoTopics := make([]*Topics, 0, len(topics))
375358
for i, topic := range topics {
376359
if topic == nil {
@@ -394,7 +377,7 @@ func convertLogFromProto(protoLog *Log) (*evmtypes.Log, error) {
394377

395378
topics, err := evm.ConvertHashesFromProto(protoLog.GetTopics())
396379
if err != nil {
397-
return nil, errors.Join(evm.ErrTopicsConversion, err)
380+
return nil, fmt.Errorf("%w: %w", evm.ErrTopicsConversion, err)
398381
}
399382

400383
eventSigs, err := evm.ConvertHashFromProto(protoLog.GetEventSig())

pkg/chains/evm/proto_helpers.go

Lines changed: 20 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,6 @@ func ConvertHashesToProto(hashes []evmtypes.Hash) [][]byte {
7777
}
7878

7979
func convertTopicsToProto(topics [][]evmtypes.Hash) ([]*Topics, error) {
80-
if topics == nil {
81-
return nil, fmt.Errorf("topics can't be nil")
82-
}
83-
8480
protoTopics := make([]*Topics, 0, len(topics))
8581
for i, topic := range topics {
8682
if topic == nil {
@@ -216,11 +212,6 @@ func ConvertTransactionFromProto(protoTx *Transaction) (*evmtypes.Transaction, e
216212
return nil, ErrEmptyTx
217213
}
218214

219-
var data []byte
220-
if protoTx.GetData() != nil {
221-
data = protoTx.GetData()
222-
}
223-
224215
toAddress, err := ConvertOptionalAddressFromProto(protoTx.GetTo())
225216
if err != nil {
226217
return nil, fmt.Errorf("failed to convert 'to' address: %w", err)
@@ -233,7 +224,7 @@ func ConvertTransactionFromProto(protoTx *Transaction) (*evmtypes.Transaction, e
233224

234225
return &evmtypes.Transaction{
235226
To: toAddress,
236-
Data: data,
227+
Data: protoTx.GetData(),
237228
Hash: txHash,
238229
Nonce: protoTx.GetNonce(),
239230
Gas: protoTx.GetGas(),
@@ -261,21 +252,25 @@ func ConvertCallMsgFromProto(protoMsg *CallMsg) (*evmtypes.CallMsg, error) {
261252
return nil, ErrEmptyMsg
262253
}
263254

264-
fromAddress, err := ConvertAddressFromProto(protoMsg.GetFrom())
265-
if err != nil {
266-
return nil, fmt.Errorf("failed to convert 'from' address: %w", err)
267-
}
268-
269255
toAddress, err := ConvertOptionalAddressFromProto(protoMsg.GetTo())
270256
if err != nil {
271257
return nil, fmt.Errorf("failed to convert 'to' address: %w", err)
272258
}
273259

274-
return &evmtypes.CallMsg{
275-
From: fromAddress,
260+
callMsg := &evmtypes.CallMsg{
276261
Data: protoMsg.GetData(),
277262
To: toAddress,
278-
}, nil
263+
}
264+
265+
// fromAddress is optional
266+
if ValidateAddressBytes(protoMsg.GetFrom()) != nil {
267+
callMsg.From, err = ConvertAddressFromProto(protoMsg.GetFrom())
268+
if err != nil {
269+
return nil, fmt.Errorf("failed to convert 'from' address: %w", err)
270+
}
271+
}
272+
273+
return callMsg, nil
279274
}
280275

281276
var ErrEmptyFilter = errors.New("filter can't be nil")
@@ -346,7 +341,7 @@ var ErrTopicsConversion = errors.New("failed to convert topics")
346341
func ConvertFilterToProto(filter evmtypes.FilterQuery) (*FilterQuery, error) {
347342
topics, err := convertTopicsToProto(filter.Topics)
348343
if err != nil {
349-
return nil, errors.Join(ErrTopicsConversion, err)
344+
return nil, fmt.Errorf("%w: %w", ErrTopicsConversion, err)
350345
}
351346

352347
return &FilterQuery{
@@ -359,10 +354,6 @@ func ConvertFilterToProto(filter evmtypes.FilterQuery) (*FilterQuery, error) {
359354
}
360355

361356
func ConvertLogsToProto(logs []*evmtypes.Log) ([]*Log, error) {
362-
if logs == nil {
363-
return nil, fmt.Errorf("logs are nil")
364-
}
365-
366357
protoLogs := make([]*Log, 0, len(logs))
367358
for i, log := range logs {
368359
if log == nil {
@@ -390,7 +381,7 @@ func ConvertFilterFromProto(protoFilter *FilterQuery) (evmtypes.FilterQuery, err
390381

391382
topics, err := ConvertTopicsFromProto(protoFilter.GetTopics())
392383
if err != nil {
393-
return evmtypes.FilterQuery{}, errors.Join(ErrTopicsConversion, err)
384+
return evmtypes.FilterQuery{}, fmt.Errorf("%w: %w", ErrTopicsConversion, err)
394385
}
395386

396387
return evmtypes.FilterQuery{
@@ -403,10 +394,6 @@ func ConvertFilterFromProto(protoFilter *FilterQuery) (evmtypes.FilterQuery, err
403394
}
404395

405396
func ConvertLogsFromProto(protoLogs []*Log) ([]*evmtypes.Log, error) {
406-
if protoLogs == nil {
407-
return nil, fmt.Errorf("logs can't be nil")
408-
}
409-
410397
logs := make([]*evmtypes.Log, 0, len(protoLogs))
411398
var errs []error
412399

@@ -442,7 +429,7 @@ func convertLogFromProto(protoLog *Log) (*evmtypes.Log, error) {
442429

443430
topics, err := ConvertHashesFromProto(protoLog.GetTopics())
444431
if err != nil {
445-
return nil, errors.Join(ErrTopicsConversion, err)
432+
return nil, fmt.Errorf("%w: %w", ErrTopicsConversion, err)
446433
}
447434

448435
eventSigs, err := ConvertHashFromProto(protoLog.GetEventSig())
@@ -475,10 +462,6 @@ func convertLogFromProto(protoLog *Log) (*evmtypes.Log, error) {
475462
}
476463

477464
func ConvertTopicsFromProto(protoTopics []*Topics) ([][]evmtypes.Hash, error) {
478-
if protoTopics == nil {
479-
return nil, fmt.Errorf("topics can't be nil")
480-
}
481-
482465
topics := make([][]evmtypes.Hash, 0, len(protoTopics))
483466
var errs []error
484467

@@ -752,23 +735,23 @@ func ConvertSubmitTransactionRequestFromProto(txRequest *SubmitTransactionReques
752735
}
753736

754737
func ConvertAddressFromProto(protoAddress []byte) (evmtypes.Address, error) {
755-
if err := validateAddressBytes(protoAddress); err != nil {
738+
if err := ValidateAddressBytes(protoAddress); err != nil {
756739
return evmtypes.Address{}, err
757740
}
758741

759742
return evmtypes.Address(protoAddress), nil
760743
}
761744

762745
func ConvertOptionalAddressFromProto(b []byte) (evmtypes.Address, error) {
763-
if len(b) == 0 || b == nil {
746+
if len(b) == 0 {
764747
return evmtypes.Address{}, nil
765748
}
766749

767750
return ConvertAddressFromProto(b)
768751
}
769752

770753
func ConvertOptionalHashFromProto(b []byte) (evmtypes.Hash, error) {
771-
if len(b) == 0 || b == nil {
754+
if len(b) == 0 {
772755
return evmtypes.Hash{}, nil
773756
}
774757

@@ -782,7 +765,7 @@ func ConvertHashFromProto(b []byte) (evmtypes.Hash, error) {
782765
return evmtypes.Hash(b), nil
783766
}
784767

785-
func validateAddressBytes(b []byte) error {
768+
func ValidateAddressBytes(b []byte) error {
786769
if b == nil {
787770
return fmt.Errorf("address can't be nil")
788771
}

0 commit comments

Comments
 (0)