fix(x/auth/tx): add missing CacheWithValue for ExtensionOptions (#23144)

This commit is contained in:
mmsqe 2025-01-07 00:43:44 +08:00 committed by GitHub
parent 58d71c0c23
commit 6f2bab52f1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 16 additions and 7 deletions

View File

@ -53,6 +53,7 @@ Every module contains its own CHANGELOG.md. Please refer to the module you are i
### Bug Fixes
* (query) [23002](https://github.com/cosmos/cosmos-sdk/pull/23002) Fix collection filtered pagination.
* (x/auth/tx) [23144](https://github.com/cosmos/cosmos-sdk/pull/23144) Add missing CacheWithValue for ExtensionOptions.
* (x/auth/tx) [#23148](https://github.com/cosmos/cosmos-sdk/pull/23148) Avoid panic from intoAnyV2 when v1.PublicKey is optional.
### API Breaking Changes

View File

@ -46,7 +46,7 @@ func newBuilderFromDecodedTx(
modeInfoV1 := new(tx.ModeInfo)
fromV2ModeInfo(sigInfo.ModeInfo, modeInfoV1)
sigInfos[i] = &tx.SignerInfo{
PublicKey: intoAnyV1([]*anypb.Any{sigInfo.PublicKey})[0],
PublicKey: intoAnyV1(codec, []*anypb.Any{sigInfo.PublicKey})[0],
ModeInfo: modeInfoV1,
Sequence: sigInfo.Sequence,
}

View File

@ -7,6 +7,7 @@ import (
"time"
"github.com/cosmos/gogoproto/proto"
gogoproto "github.com/cosmos/gogoproto/types/any"
"google.golang.org/protobuf/reflect/protoreflect"
"google.golang.org/protobuf/types/known/anypb"
@ -236,11 +237,11 @@ func (w *gogoTxWrapper) GetSigningTxData() txsigning.TxData {
}
func (w *gogoTxWrapper) GetExtensionOptions() []*codectypes.Any {
return intoAnyV1(w.Tx.Body.ExtensionOptions)
return intoAnyV1(w.cdc, w.Tx.Body.ExtensionOptions)
}
func (w *gogoTxWrapper) GetNonCriticalExtensionOptions() []*codectypes.Any {
return intoAnyV1(w.Tx.Body.NonCriticalExtensionOptions)
return intoAnyV1(w.cdc, w.Tx.Body.NonCriticalExtensionOptions)
}
func (w *gogoTxWrapper) AsTx() (*txtypes.Tx, error) {
@ -270,13 +271,20 @@ func (w *gogoTxWrapper) AsTxRaw() (*txtypes.TxRaw, error) {
}, nil
}
func intoAnyV1(v2s []*anypb.Any) []*codectypes.Any {
func intoAnyV1(cdc codec.BinaryCodec, v2s []*anypb.Any) []*codectypes.Any {
v1s := make([]*codectypes.Any, len(v2s))
for i, v2 := range v2s {
v1s[i] = &codectypes.Any{
TypeUrl: v2.TypeUrl,
Value: v2.Value,
var value *gogoproto.Any
if msg, err := decodeFromAny(cdc, v2); err == nil {
value, _ = gogoproto.NewAnyWithCacheWithValue(msg)
}
if value == nil {
value = &codectypes.Any{
TypeUrl: v2.TypeUrl,
Value: v2.Value,
}
}
v1s[i] = value
}
return v1s
}