Skip to content

Commit

Permalink
fix(client/v2): *big.Int unmarshal (backport #21853) (#22174)
Browse files Browse the repository at this point in the history
Co-authored-by: Julien Robert <[email protected]>
  • Loading branch information
mergify[bot] and julienrbrt authored Oct 8, 2024
1 parent 3ecd143 commit 1aa3a28
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 6 deletions.
12 changes: 11 additions & 1 deletion client/v2/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,24 @@ Ref: https://keepachangelog.com/en/1.0.0/

### Improvements

* [#21712](https://github.com/cosmos/cosmos-sdk/pull/21712) Marshal `type` field as proto message url in queries instead of amino name.
* [#21936](https://github.com/cosmos/cosmos-sdk/pull/21936) Print possible enum values in error message after an invalid input was provided.

### API Breaking Changes

* [#17709](https://github.com/cosmos/cosmos-sdk/pull/17709) Address codecs have been removed from `autocli.AppOptions` and `flag.Builder`. Instead client/v2 uses the address codecs present in the context (introduced in [#17503](https://github.com/cosmos/cosmos-sdk/pull/17503)).

### Bug Fixes

* [#21853](https://github.com/cosmos/cosmos-sdk/pull/21853) Fix `*big.Int` unmarshalling in txs.

## [v2.0.0-beta.5] - 2024-09-18

### Improvements

* [#21712](https://github.com/cosmos/cosmos-sdk/pull/21712) Marshal `type` field as proto message url in queries instead of amino name.

### Bug Fixes

* [#20964](https://github.com/cosmos/cosmos-sdk/pull/20964) Fix `GetNodeHomeDirectory` helper in `client/v2/helpers` to respect the `(PREFIX)_HOME` environment variable.

## [v2.0.0-beta.3] - 2024-07-15
Expand Down
2 changes: 2 additions & 0 deletions client/v2/autocli/flag/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ const (
ValidatorAddressStringScalarType = "cosmos.ValidatorAddressString"
ConsensusAddressStringScalarType = "cosmos.ConsensusAddressString"
PubkeyScalarType = "cosmos.Pubkey"
DecScalarType = "cosmos.Dec"
)

// Builder manages options for building pflag flags for protobuf messages.
Expand Down Expand Up @@ -67,6 +68,7 @@ func (b *Builder) init() {
b.scalarFlagTypes[ValidatorAddressStringScalarType] = validatorAddressStringType{}
b.scalarFlagTypes[ConsensusAddressStringScalarType] = consensusAddressStringType{}
b.scalarFlagTypes[PubkeyScalarType] = pubkeyType{}
b.scalarFlagTypes[DecScalarType] = decType{}
}
}

Expand Down
48 changes: 48 additions & 0 deletions client/v2/autocli/flag/legacy_dec.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package flag

import (
"context"

"google.golang.org/protobuf/reflect/protoreflect"

"cosmossdk.io/math"
)

type decType struct{}

func (a decType) NewValue(_ *context.Context, _ *Builder) Value {
return &decValue{}
}

func (a decType) DefaultValue() string {
return "0"
}

type decValue struct {
value string
}

func (a decValue) Get(protoreflect.Value) (protoreflect.Value, error) {
return protoreflect.ValueOf(a.value), nil
}

func (a decValue) String() string {
return a.value
}

func (a *decValue) Set(s string) error {
dec, err := math.LegacyNewDecFromStr(s)
if err != nil {
return err
}

// we need to convert from float representation to non-float representation using default precision
// 0.5 -> 500000000000000000
a.value = dec.BigInt().String()

return nil
}

func (a decValue) Type() string {
return "cosmos.Dec"
}
10 changes: 5 additions & 5 deletions x/auth/tx/builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ var marshalOption = proto.MarshalOptions{
func (w *builder) getTx() (*gogoTxWrapper, error) {
anyMsgs, err := msgsV1toAnyV2(w.msgs)
if err != nil {
return nil, err
return nil, fmt.Errorf("unable to convert messages: %w", err)
}
body := &txv1beta1.TxBody{
Messages: anyMsgs,
Expand All @@ -136,12 +136,12 @@ func (w *builder) getTx() (*gogoTxWrapper, error) {

bodyBytes, err := marshalOption.Marshal(body)
if err != nil {
return nil, err
return nil, fmt.Errorf("unable to marshal body: %w", err)
}

authInfoBytes, err := marshalOption.Marshal(authInfo)
if err != nil {
return nil, err
return nil, fmt.Errorf("unable to marshal auth info: %w", err)
}

txRawBytes, err := marshalOption.Marshal(&txv1beta1.TxRaw{
Expand All @@ -150,12 +150,12 @@ func (w *builder) getTx() (*gogoTxWrapper, error) {
Signatures: w.signatures,
})
if err != nil {
return nil, err
return nil, fmt.Errorf("unable to marshal tx raw: %w", err)
}

decodedTx, err := w.decoder.Decode(txRawBytes)
if err != nil {
return nil, err
return nil, fmt.Errorf("unable to decode tx: %w", err)
}

return newWrapperFromDecodedTx(w.addressCodec, w.codec, decodedTx)
Expand Down

0 comments on commit 1aa3a28

Please sign in to comment.