Skip to content

Commit

Permalink
fix: errors with EIP712 signature (#68)
Browse files Browse the repository at this point in the history
  • Loading branch information
pythonberg1997 authored Dec 20, 2022
1 parent de3874e commit 344fb72
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 5 deletions.
37 changes: 34 additions & 3 deletions x/auth/tx/eip712.go
Original file line number Diff line number Diff line change
Expand Up @@ -323,17 +323,28 @@ func traverseFields(
fieldType := t.Field(i).Type
fieldName := jsonNameFromTag(t.Field(i).Tag)

// TODO will add another limitation: only if the type is anyOf.
if fieldName == "" {
fieldName = t.Field(i).Name
anyWrapper := &cosmosAnyWrapper{
Type: fmt.Sprint(reflect.TypeOf(field.Interface())),
Value: field.Interface(),
}
field = reflect.ValueOf(anyWrapper)
fieldType = reflect.TypeOf(anyWrapper)
}

if fieldType == cosmosAnyType {
any, ok := field.Interface().(*codectypes.Any)
typeAny, ok := field.Interface().(*codectypes.Any)
if !ok {
return errors.Wrapf(sdkerrors.ErrPackAny, "%T", field.Interface())
}

anyWrapper := &cosmosAnyWrapper{
Type: any.TypeUrl,
Type: typeAny.TypeUrl,
}

if err := cdc.UnpackAny(any, &anyWrapper.Value); err != nil {
if err := cdc.UnpackAny(typeAny, &anyWrapper.Value); err != nil {
return errors.Wrap(err, "failed to unpack Any in msg struct")
}

Expand Down Expand Up @@ -384,6 +395,26 @@ func traverseFields(

fieldType = fieldType.Elem()
field = field.Index(0)
// Unpack the field into cosmosAnyWrapper rather than the Any type
if fieldType == cosmosAnyType {
typeAny, ok := field.Interface().(*codectypes.Any)
if !ok {
return errors.Wrapf(sdkerrors.ErrPackAny, "%T", field.Interface())
}

anyWrapper := &cosmosAnyWrapper{
Type: typeAny.TypeUrl,
}

if err := cdc.UnpackAny(typeAny, &anyWrapper.Value); err != nil {
return errors.Wrap(err, "failed to unpack Any in msg struct")
}

fieldType = reflect.TypeOf(anyWrapper.Value)
field = reflect.ValueOf(anyWrapper.Value)

// then continue as normal
}
isCollection = true
}

Expand Down
4 changes: 2 additions & 2 deletions x/auth/tx/eip712_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func TestEIP712Handler(t *testing.T) {
txBuilder := txConfig.NewTxBuilder()

chainID := "ethermint_9000"
memo := "some test memo"
testMemo := "some test memo"
msgs := []sdk.Msg{banktypes.NewMsgSend(addr, addr, sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.NewInt(1))))}
accNum, accSeq := uint64(1), uint64(2) // Arbitrary account number/sequence

Expand All @@ -52,7 +52,7 @@ func TestEIP712Handler(t *testing.T) {

err := txBuilder.SetMsgs(msgs...)
require.NoError(t, err)
txBuilder.SetMemo(memo)
txBuilder.SetMemo(testMemo)
txBuilder.SetFeeAmount(fee.Amount)
txBuilder.SetFeePayer(feePayerAddr)
txBuilder.SetGasLimit(fee.GasLimit)
Expand Down

0 comments on commit 344fb72

Please sign in to comment.