@@ -519,20 +519,27 @@ func ConvertHashedValueComparatorsToProto(hashedValueComparators []evmprimitives
519519 return protoHashedValueComparators
520520}
521521
522- func ConvertHashedValueComparatorsFromProto (protoHashedValueComparators []* HashValueComparator ) []evmprimitives.HashedValueComparator {
522+ func ConvertHashedValueComparatorsFromProto (protoHashedValueComparators []* HashValueComparator ) ( []evmprimitives.HashedValueComparator , error ) {
523523 hashedValueComparators := make ([]evmprimitives.HashedValueComparator , 0 , len (protoHashedValueComparators ))
524524 for _ , protoHvc := range protoHashedValueComparators {
525+ if protoHvc == nil {
526+ return nil , errors .New ("hashed value comparator can't be nil" )
527+ }
525528 values := make ([]evmtypes.Hash , 0 , len (protoHvc .GetValues ()))
526529 for _ , value := range protoHvc .GetValues () {
527- values = append (values , evmtypes .Hash (value ))
530+ hashValue , err := ConvertHashFromProto (value )
531+ if err != nil {
532+ return nil , fmt .Errorf ("failed to convert hash value: %w" , err )
533+ }
534+ values = append (values , hashValue )
528535 }
529536 hashedValueComparators = append (hashedValueComparators ,
530537 evmprimitives.HashedValueComparator {
531538 Values : values ,
532539 Operator : primitives .ComparisonOperator (protoHvc .GetOperator ()),
533540 })
534541 }
535- return hashedValueComparators
542+ return hashedValueComparators , nil
536543}
537544
538545func ConvertExpressionsToProto (expressions []query.Expression ) ([]* Expression , error ) {
@@ -552,7 +559,7 @@ func ConvertExpressionsFromProto(protoExpressions []*Expression) ([]query.Expres
552559 for idx , protoExpression := range protoExpressions {
553560 expr , err := convertExpressionFromProto (protoExpression )
554561 if err != nil {
555- return nil , fmt .Errorf ("err to convert expr idx %d err: %w " , idx , err )
562+ return nil , status .Errorf (codes . InvalidArgument , "err to convert expr idx %d err: %s " , idx , err . Error () )
556563 }
557564
558565 expressions = append (expressions , expr )
@@ -626,13 +633,17 @@ func convertExpressionToProto(expression query.Expression) (*Expression, error)
626633}
627634
628635func convertExpressionFromProto (protoExpression * Expression ) (query.Expression , error ) {
636+ if protoExpression == nil {
637+ return query.Expression {}, errors .New ("expression can not be nil" )
638+ }
639+
629640 switch protoEvaluatedExpr := protoExpression .GetEvaluator ().(type ) {
630641 case * Expression_BooleanExpression :
631642 var expressions []query.Expression
632- for _ , expression := range protoEvaluatedExpr .BooleanExpression .GetExpression () {
643+ for idx , expression := range protoEvaluatedExpr .BooleanExpression .GetExpression () {
633644 convertedExpression , err := convertExpressionFromProto (expression )
634645 if err != nil {
635- return query.Expression {}, err
646+ return query.Expression {}, fmt . Errorf ( "failed to convert sub-expression %d: %w" , idx , err )
636647 }
637648 expressions = append (expressions , convertedExpression )
638649 }
@@ -651,25 +662,44 @@ func convertExpressionFromProto(protoExpression *Expression) (query.Expression,
651662 return convertEVMExpressionToProto (protoEvaluatedExpr .Primitive )
652663 }
653664 default :
654- return query.Expression {}, status .Errorf (codes . InvalidArgument , "Unknown expression type: %T" , protoExpression )
665+ return query.Expression {}, fmt .Errorf ("unknown expression type: %T" , protoExpression . GetEvaluator () )
655666 }
656667}
657668
658669func convertEVMExpressionToProto (protoPrimitive * Primitive ) (query.Expression , error ) {
659670 switch primitive := protoPrimitive .GetPrimitive ().(type ) {
660671 case * Primitive_ContractAddress :
661- address := evmtypes .Address (primitive .ContractAddress )
672+ address , err := ConvertAddressFromProto (primitive .ContractAddress )
673+ if err != nil {
674+ return query.Expression {}, fmt .Errorf ("failed to convert contract address: %w" , err )
675+ }
662676 return evmprimitives .NewAddressFilter (address ), nil
663677 case * Primitive_EventSig :
664- return evmprimitives .NewEventSigFilter (evmtypes .Hash (primitive .EventSig )), nil
678+ hash , err := ConvertHashFromProto (primitive .EventSig )
679+ if err != nil {
680+ return query.Expression {}, fmt .Errorf ("failed to convert event sig: %w" , err )
681+ }
682+ return evmprimitives .NewEventSigFilter (hash ), nil
665683 case * Primitive_EventByTopic :
666- return evmprimitives .NewEventByTopicFilter (primitive .EventByTopic .GetTopic (),
667- ConvertHashedValueComparatorsFromProto (primitive .EventByTopic .GetHashedValueComparers ())), nil
684+ if primitive .EventByTopic == nil {
685+ return query.Expression {}, errors .New ("EventByTopic can not be nil" )
686+ }
687+ valueCmp , err := ConvertHashedValueComparatorsFromProto (primitive .EventByTopic .GetHashedValueComparers ())
688+ if err != nil {
689+ return query.Expression {}, fmt .Errorf ("failed to convert EventByTopic hashed value comparators: %w" , err )
690+ }
691+ return evmprimitives .NewEventByTopicFilter (primitive .EventByTopic .GetTopic (), valueCmp ), nil
668692 case * Primitive_EventByWord :
669- return evmprimitives .NewEventByWordFilter (int (primitive .EventByWord .GetWordIndex ()),
670- ConvertHashedValueComparatorsFromProto (primitive .EventByWord .GetHashedValueComparers ())), nil
693+ if primitive .EventByWord == nil {
694+ return query.Expression {}, errors .New ("EventByWord can not be nil" )
695+ }
696+ valueCmp , err := ConvertHashedValueComparatorsFromProto (primitive .EventByWord .GetHashedValueComparers ())
697+ if err != nil {
698+ return query.Expression {}, fmt .Errorf ("failed to convert EventByWord hashed value comparators: %w" , err )
699+ }
700+ return evmprimitives .NewEventByWordFilter (int (primitive .EventByWord .GetWordIndex ()), valueCmp ), nil
671701 default :
672- return query.Expression {}, status .Errorf (codes . InvalidArgument , "Unknown primitive type: %T" , primitive )
702+ return query.Expression {}, fmt .Errorf ("unknown primitive type: %T" , primitive )
673703 }
674704}
675705
0 commit comments