From 07922c6454cd575185c2cc5ad92109f09a53d566 Mon Sep 17 00:00:00 2001 From: Diana Borbe Date: Mon, 4 May 2026 09:48:48 +0200 Subject: [PATCH 01/11] Add IFT and tokenfactory prototypes for transfers --- prototypes/x/ift/keeper/callbacks.go | 252 ++ prototypes/x/ift/keeper/callbacks_test.go | 653 ++++ prototypes/x/ift/keeper/genesis.go | 67 + prototypes/x/ift/keeper/genesis_test.go | 335 +++ prototypes/x/ift/keeper/keeper.go | 127 + prototypes/x/ift/keeper/keeper_test.go | 359 +++ prototypes/x/ift/keeper/msg_server.go | 415 +++ prototypes/x/ift/keeper/msg_server_test.go | 1147 +++++++ prototypes/x/ift/keeper/query.go | 80 + prototypes/x/ift/keeper/query_test.go | 189 ++ prototypes/x/ift/module.go | 125 + prototypes/x/ift/module_test.go | 28 + prototypes/x/ift/types/autocli.go | 100 + prototypes/x/ift/types/codec.go | 32 + prototypes/x/ift/types/constructor.go | 106 + .../x/ift/types/constructor_cosmostx.go | 63 + prototypes/x/ift/types/constructor_evm.go | 60 + prototypes/x/ift/types/constructor_solana.go | 256 ++ prototypes/x/ift/types/constructor_test.go | 428 +++ prototypes/x/ift/types/errors.go | 34 + prototypes/x/ift/types/events.go | 23 + prototypes/x/ift/types/expected_keepers.go | 52 + prototypes/x/ift/types/genesis.go | 40 + prototypes/x/ift/types/genesis.pb.go | 679 +++++ prototypes/x/ift/types/ift.pb.go | 978 ++++++ prototypes/x/ift/types/keys.go | 16 + prototypes/x/ift/types/mint_call.go | 28 + prototypes/x/ift/types/mint_call_test.go | 420 +++ prototypes/x/ift/types/msgs.go | 28 + prototypes/x/ift/types/query.pb.go | 2405 +++++++++++++++ prototypes/x/ift/types/query.pb.gw.go | 587 ++++ prototypes/x/ift/types/tx.pb.go | 2680 +++++++++++++++++ prototypes/x/tokenfactory/README.md | 205 ++ prototypes/x/tokenfactory/TESTING.md | 175 ++ prototypes/x/tokenfactory/cli/tx.go | 99 + prototypes/x/tokenfactory/keeper/denom.go | 152 + prototypes/x/tokenfactory/keeper/genesis.go | 49 + .../x/tokenfactory/keeper/genesis_test.go | 62 + prototypes/x/tokenfactory/keeper/keeper.go | 71 + .../x/tokenfactory/keeper/keeper_test.go | 210 ++ prototypes/x/tokenfactory/keeper/mint_burn.go | 147 + .../x/tokenfactory/keeper/msg_server.go | 121 + .../x/tokenfactory/keeper/msg_server_test.go | 598 ++++ prototypes/x/tokenfactory/keeper/params.go | 21 + prototypes/x/tokenfactory/keeper/query.go | 45 + .../x/tokenfactory/keeper/query_test.go | 65 + prototypes/x/tokenfactory/module.go | 150 + prototypes/x/tokenfactory/module_test.go | 28 + prototypes/x/tokenfactory/types/autocli.go | 77 + prototypes/x/tokenfactory/types/codec.go | 27 + prototypes/x/tokenfactory/types/denom.go | 21 + prototypes/x/tokenfactory/types/denom_test.go | 64 + prototypes/x/tokenfactory/types/errors.go | 22 + prototypes/x/tokenfactory/types/events.go | 18 + .../x/tokenfactory/types/expected_keepers.go | 25 + prototypes/x/tokenfactory/types/genesis.go | 42 + prototypes/x/tokenfactory/types/genesis.pb.go | 615 ++++ .../x/tokenfactory/types/genesis_test.go | 92 + prototypes/x/tokenfactory/types/keys.go | 27 + prototypes/x/tokenfactory/types/msgs.go | 118 + prototypes/x/tokenfactory/types/msgs_test.go | 195 ++ prototypes/x/tokenfactory/types/query.pb.go | 1318 ++++++++ .../x/tokenfactory/types/query.pb.gw.go | 355 +++ .../x/tokenfactory/types/tokenfactory.pb.go | 441 +++ prototypes/x/tokenfactory/types/tx.pb.go | 2200 ++++++++++++++ 65 files changed, 20647 insertions(+) create mode 100644 prototypes/x/ift/keeper/callbacks.go create mode 100644 prototypes/x/ift/keeper/callbacks_test.go create mode 100644 prototypes/x/ift/keeper/genesis.go create mode 100644 prototypes/x/ift/keeper/genesis_test.go create mode 100644 prototypes/x/ift/keeper/keeper.go create mode 100644 prototypes/x/ift/keeper/keeper_test.go create mode 100644 prototypes/x/ift/keeper/msg_server.go create mode 100644 prototypes/x/ift/keeper/msg_server_test.go create mode 100644 prototypes/x/ift/keeper/query.go create mode 100644 prototypes/x/ift/keeper/query_test.go create mode 100644 prototypes/x/ift/module.go create mode 100644 prototypes/x/ift/module_test.go create mode 100644 prototypes/x/ift/types/autocli.go create mode 100644 prototypes/x/ift/types/codec.go create mode 100644 prototypes/x/ift/types/constructor.go create mode 100644 prototypes/x/ift/types/constructor_cosmostx.go create mode 100644 prototypes/x/ift/types/constructor_evm.go create mode 100644 prototypes/x/ift/types/constructor_solana.go create mode 100644 prototypes/x/ift/types/constructor_test.go create mode 100644 prototypes/x/ift/types/errors.go create mode 100644 prototypes/x/ift/types/events.go create mode 100644 prototypes/x/ift/types/expected_keepers.go create mode 100644 prototypes/x/ift/types/genesis.go create mode 100644 prototypes/x/ift/types/genesis.pb.go create mode 100644 prototypes/x/ift/types/ift.pb.go create mode 100644 prototypes/x/ift/types/keys.go create mode 100644 prototypes/x/ift/types/mint_call.go create mode 100644 prototypes/x/ift/types/mint_call_test.go create mode 100644 prototypes/x/ift/types/msgs.go create mode 100644 prototypes/x/ift/types/query.pb.go create mode 100644 prototypes/x/ift/types/query.pb.gw.go create mode 100644 prototypes/x/ift/types/tx.pb.go create mode 100644 prototypes/x/tokenfactory/README.md create mode 100644 prototypes/x/tokenfactory/TESTING.md create mode 100644 prototypes/x/tokenfactory/cli/tx.go create mode 100644 prototypes/x/tokenfactory/keeper/denom.go create mode 100644 prototypes/x/tokenfactory/keeper/genesis.go create mode 100644 prototypes/x/tokenfactory/keeper/genesis_test.go create mode 100644 prototypes/x/tokenfactory/keeper/keeper.go create mode 100644 prototypes/x/tokenfactory/keeper/keeper_test.go create mode 100644 prototypes/x/tokenfactory/keeper/mint_burn.go create mode 100644 prototypes/x/tokenfactory/keeper/msg_server.go create mode 100644 prototypes/x/tokenfactory/keeper/msg_server_test.go create mode 100644 prototypes/x/tokenfactory/keeper/params.go create mode 100644 prototypes/x/tokenfactory/keeper/query.go create mode 100644 prototypes/x/tokenfactory/keeper/query_test.go create mode 100644 prototypes/x/tokenfactory/module.go create mode 100644 prototypes/x/tokenfactory/module_test.go create mode 100644 prototypes/x/tokenfactory/types/autocli.go create mode 100644 prototypes/x/tokenfactory/types/codec.go create mode 100644 prototypes/x/tokenfactory/types/denom.go create mode 100644 prototypes/x/tokenfactory/types/denom_test.go create mode 100644 prototypes/x/tokenfactory/types/errors.go create mode 100644 prototypes/x/tokenfactory/types/events.go create mode 100644 prototypes/x/tokenfactory/types/expected_keepers.go create mode 100644 prototypes/x/tokenfactory/types/genesis.go create mode 100644 prototypes/x/tokenfactory/types/genesis.pb.go create mode 100644 prototypes/x/tokenfactory/types/genesis_test.go create mode 100644 prototypes/x/tokenfactory/types/keys.go create mode 100644 prototypes/x/tokenfactory/types/msgs.go create mode 100644 prototypes/x/tokenfactory/types/msgs_test.go create mode 100644 prototypes/x/tokenfactory/types/query.pb.go create mode 100644 prototypes/x/tokenfactory/types/query.pb.gw.go create mode 100644 prototypes/x/tokenfactory/types/tokenfactory.pb.go create mode 100644 prototypes/x/tokenfactory/types/tx.pb.go diff --git a/prototypes/x/ift/keeper/callbacks.go b/prototypes/x/ift/keeper/callbacks.go new file mode 100644 index 00000000000..644a1162018 --- /dev/null +++ b/prototypes/x/ift/keeper/callbacks.go @@ -0,0 +1,252 @@ +package keeper + +import ( + "bytes" + "strconv" + + "github.com/cosmos/sandbox-ledger/x/ift/types" + + "cosmossdk.io/collections" + errorsmod "cosmossdk.io/errors" + + sdk "github.com/cosmos/cosmos-sdk/types" + + gmptypes "github.com/cosmos/ibc-go/v11/modules/apps/27-gmp/types" + callbacktypes "github.com/cosmos/ibc-go/v11/modules/apps/callbacks/types" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + channeltypesv2 "github.com/cosmos/ibc-go/v11/modules/core/04-channel/v2/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" +) + +// Ensure IFT Keeper implements the ContractKeeper interface for IBC callbacks +var _ callbacktypes.ContractKeeper = (*Keeper)(nil) + +// IBCSendPacketCallback is called when a packet is sent. +// This is a no-op for IFT as no special handling is needed. +func (Keeper) IBCSendPacketCallback( + _ sdk.Context, + _ string, + _ string, + _ clienttypes.Height, + _ uint64, + _ []byte, + _, _ string, + _ string, +) error { + return nil +} + +// IBCOnAcknowledgementPacketCallback is called when a packet acknowledgement is received. +func (k Keeper) IBCOnAcknowledgementPacketCallback( + cachedCtx sdk.Context, + packet channeltypes.Packet, + acknowledgement []byte, + _ sdk.AccAddress, + contractAddress, + packetSenderAddress string, + version string, +) error { + k.Logger(cachedCtx).Debug("IBCOnAcknowledgementPacketCallback called", + "contractAddress", contractAddress, + "packetSenderAddress", packetSenderAddress, + "version", version, + "sourcePort", packet.SourcePort, + "sourceChannel", packet.SourceChannel, + "sequence", packet.Sequence) + + // The callbacks middleware is registered on the GMP IBC module, so all + // callbacks here originate from GMP packets. Since multiple applications + // could use GMP, we check if this specific callback belongs to an IFT + // transfer. If not, return nil to pass control to other callback handlers. + if err := k.checkIsIFTCallback(cachedCtx, contractAddress, packetSenderAddress, version, packet.SourcePort); err != nil { + k.Logger(cachedCtx).Debug("IFT ack callback: skipping non-IFT packet", + "reason", err.Error(), + "contractAddress", contractAddress, + "packetSenderAddress", packetSenderAddress) + return nil + } + + // In IBC v2, the acknowledgement is the raw app ack bytes. + // Error is signaled by the sentinel ErrorAcknowledgement hash. + isErrorAck := bytes.Equal(acknowledgement, channeltypesv2.ErrorAcknowledgement[:]) + + k.Logger(cachedCtx).Debug("IFT ack callback processing", + "isErrorAck", isErrorAck, + "ackLen", len(acknowledgement)) + + // Find the pending transfer for this packet using O(1) index lookup + pending, found, err := k.GetPendingTransferByClientSequence(cachedCtx, packet.SourceChannel, packet.Sequence) + if err != nil { + return err + } + + if !found { + k.Logger(cachedCtx).Debug("IFT ack callback: skipping non-IFT packet", + "clientId", packet.SourceChannel, + "sequence", packet.Sequence) + return nil + } + + k.Logger(cachedCtx).Debug("IFT ack callback: found pending transfer", + "denom", pending.Denom, + "clientId", pending.ClientId, + "sequence", pending.Sequence) + + if isErrorAck { + // Acknowledgement indicates error, refund the sender + k.Logger(cachedCtx).Info("IFT ack callback: error ack, refunding") + return k.RefundPendingTransfer(cachedCtx, pending.Denom, pending.ClientId, pending.Sequence) + } + + // Success - remove pending transfer + if err := k.RemovePendingTransfer(cachedCtx, pending.ClientId, pending.Sequence); err != nil { + return err + } + + cachedCtx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeIFTTransferCompleted, + sdk.NewAttribute(types.AttributeKeyDenom, pending.Denom), + sdk.NewAttribute(types.AttributeKeyClientID, pending.ClientId), + sdk.NewAttribute(types.AttributeKeySequence, strconv.FormatUint(pending.Sequence, 10)), + sdk.NewAttribute(types.AttributeKeySender, pending.Sender), + sdk.NewAttribute(types.AttributeKeyAmount, pending.Amount.String()), + ), + ) + + k.Logger(cachedCtx).Info("IFT transfer completed", + "denom", pending.Denom, + "client_id", pending.ClientId, + "sequence", pending.Sequence, + "sender", pending.Sender, + "amount", pending.Amount.String()) + + return nil +} + +// IBCOnTimeoutPacketCallback is called when a packet times out. +func (k Keeper) IBCOnTimeoutPacketCallback( + cachedCtx sdk.Context, + packet channeltypes.Packet, + _ sdk.AccAddress, + contractAddress, + packetSenderAddress string, + version string, +) error { + k.Logger(cachedCtx).Debug("IBCOnTimeoutPacketCallback called", + "contractAddress", contractAddress, + "packetSenderAddress", packetSenderAddress, + "version", version, + "sourcePort", packet.SourcePort, + "sourceChannel", packet.SourceChannel, + "sequence", packet.Sequence) + + // The callbacks middleware is registered on the GMP IBC module, so all + // callbacks here originate from GMP packets. Since multiple applications + // could use GMP, we check if this specific callback belongs to an IFT + // transfer. If not, return nil to pass control to other callback handlers. + if err := k.checkIsIFTCallback(cachedCtx, contractAddress, packetSenderAddress, version, packet.SourcePort); err != nil { + k.Logger(cachedCtx).Debug("IFT timeout callback: skipping non-IFT packet", + "reason", err.Error(), + "contractAddress", contractAddress, + "packetSenderAddress", packetSenderAddress) + return nil + } + + // Find the pending transfer for this packet using O(1) index lookup + pending, found, err := k.GetPendingTransferByClientSequence(cachedCtx, packet.SourceChannel, packet.Sequence) + if err != nil { + return err + } + + if !found { + k.Logger(cachedCtx).Debug("IFT timeout callback: skipping non-IFT packet", + "clientId", packet.SourceChannel, + "sequence", packet.Sequence) + return nil + } + + return k.RefundPendingTransfer(cachedCtx, pending.Denom, pending.ClientId, pending.Sequence) +} + +// IBCReceivePacketCallback is not supported for IFT. +// Minting is handled via the IFTMint message handler. +func (Keeper) IBCReceivePacketCallback( + _ sdk.Context, + _ ibcexported.PacketI, + _ ibcexported.Acknowledgement, + _ string, + _ string, +) error { + return nil +} + +// checkIsIFTCallback checks if the callback belongs to IFT by matching +// the contract address, packet sender, version, and source port. +// Returns nil if this is an IFT callback, or an error explaining why not. +func (k Keeper) checkIsIFTCallback(_ sdk.Context, contractAddress, packetSenderAddress, version, sourcePort string) error { + moduleAddr := k.GetModuleAddress().String() + + if contractAddress != moduleAddr { + return errorsmod.Wrapf(types.ErrCallbackValidationFailed, "expected contract address %s, got %s", moduleAddr, contractAddress) + } + + if packetSenderAddress != moduleAddr { + return errorsmod.Wrapf(types.ErrCallbackValidationFailed, "expected packet sender %s, got %s", moduleAddr, packetSenderAddress) + } + + if version != gmptypes.Version { + return errorsmod.Wrapf(types.ErrCallbackValidationFailed, "expected version %s, got %s", gmptypes.Version, version) + } + + if sourcePort != gmptypes.PortID { + return errorsmod.Wrapf(types.ErrCallbackValidationFailed, "expected source port %s, got %s", gmptypes.PortID, sourcePort) + } + + return nil +} + +// RefundPendingTransfer refunds a pending transfer and removes it from storage +func (k Keeper) RefundPendingTransfer(ctx sdk.Context, denom, clientID string, sequence uint64) error { + pending, err := k.PendingTransferStore.Get(ctx, collections.Join(clientID, sequence)) + if err != nil { + return errorsmod.Wrapf(types.ErrPendingTransferNotFound, "client %s, sequence %d", clientID, sequence) + } + + sender, err := k.addressCodec.StringToBytes(pending.Sender) + if err != nil { + return errorsmod.Wrapf(types.ErrInvalidSigner, "invalid sender address: %s", err) + } + + // Remove pending transfer first (checks-effects-interactions pattern) + // In Cosmos SDK, if MintTo fails, the entire transaction reverts including this removal + if err := k.RemovePendingTransfer(ctx, clientID, sequence); err != nil { + return err + } + + // Mint tokens back to sender + if err := k.tokenFactoryKeeper.MintTo(ctx, pending.Denom, pending.Amount, sender); err != nil { + return errorsmod.Wrapf(types.ErrMintFailed, "failed to refund tokens: %s", err) + } + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeIFTTransferRefunded, + sdk.NewAttribute(types.AttributeKeyDenom, pending.Denom), + sdk.NewAttribute(types.AttributeKeyClientID, pending.ClientId), + sdk.NewAttribute(types.AttributeKeySequence, strconv.FormatUint(pending.Sequence, 10)), + sdk.NewAttribute(types.AttributeKeySender, pending.Sender), + sdk.NewAttribute(types.AttributeKeyAmount, pending.Amount.String()), + ), + ) + + k.Logger(ctx).Info("IFT transfer refunded", + "denom", pending.Denom, + "client_id", pending.ClientId, + "sequence", pending.Sequence, + "sender", pending.Sender, + "amount", pending.Amount.String()) + + return nil +} diff --git a/prototypes/x/ift/keeper/callbacks_test.go b/prototypes/x/ift/keeper/callbacks_test.go new file mode 100644 index 00000000000..e19fbfb2c08 --- /dev/null +++ b/prototypes/x/ift/keeper/callbacks_test.go @@ -0,0 +1,653 @@ +package keeper_test + +import ( + "errors" + "testing" + + "github.com/cosmos/sandbox-ledger/x/ift/types" + "github.com/stretchr/testify/require" + + "cosmossdk.io/collections" + "cosmossdk.io/math" + + sdk "github.com/cosmos/cosmos-sdk/types" + + gmptypes "github.com/cosmos/ibc-go/v11/modules/apps/27-gmp/types" + clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" + channeltypesv2 "github.com/cosmos/ibc-go/v11/modules/core/04-channel/v2/types" +) + +// TestCallbacks_IBCSendPacketCallback tests the IBCSendPacketCallback handler. +func TestCallbacks_IBCSendPacketCallback(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + // Should be a no-op and return nil + err := wfapp.IFTKeeper.IBCSendPacketCallback( + ctx, + "", // sourceChannel + "", // destChannel + clienttypes.Height{}, + 0, // timeoutTimestamp + nil, // data + "", // senderAddress + "", // receiverAddress + "", // memo + ) + require.NoError(t, err) +} + +// TestCallbacks_IBCOnAcknowledgementPacketCallback_Success tests successful acknowledgement handling. +func TestCallbacks_IBCOnAcknowledgementPacketCallback_Success(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID := createIBCClient(t, ctx, wfapp) + sequence := uint64(1) + + // Create token factory denom + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + + // Setup pending transfer + pending := types.PendingTransfer{ + Denom: testDenom, + ClientId: clientID, + Sequence: sequence, + Sender: userAddrA, + Amount: math.NewInt(1000000), + } + err := wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, sequence, pending) + require.NoError(t, err) + + // Create successful acknowledgement + ack := channeltypes.NewResultAcknowledgement([]byte("success")) + ackBytes, err := ack.Marshal() + require.NoError(t, err) + + // Create packet + packet := channeltypes.Packet{ + SourcePort: gmptypes.PortID, + SourceChannel: clientID, + Sequence: sequence, + } + + moduleAddr := wfapp.IFTKeeper.GetModuleAddress() + + // Call the callback + err = wfapp.IFTKeeper.IBCOnAcknowledgementPacketCallback( + ctx, + packet, + ackBytes, + moduleAddr, + moduleAddr.String(), + moduleAddr.String(), + gmptypes.Version, + ) + require.NoError(t, err) + + // Verify pending transfer was removed + exists, err := wfapp.IFTKeeper.PendingTransferStore.Has(ctx, collections.Join(clientID, sequence)) + require.NoError(t, err) + require.False(t, exists) +} + +// TestCallbacks_IBCOnAcknowledgementPacketCallback_Error tests error acknowledgement handling with refund. +func TestCallbacks_IBCOnAcknowledgementPacketCallback_Error(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID := createIBCClient(t, ctx, wfapp) + sequence := uint64(1) + + // Create token factory denom + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + + // Setup pending transfer + pending := types.PendingTransfer{ + Denom: testDenom, + ClientId: clientID, + Sequence: sequence, + Sender: userAddrA, + Amount: math.NewInt(1000000), + } + err := wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, sequence, pending) + require.NoError(t, err) + + // Create v2 error acknowledgement (32-byte hash sentinel) + ackBytes := channeltypesv2.ErrorAcknowledgement[:] + + // Create packet + packet := channeltypes.Packet{ + SourcePort: gmptypes.PortID, + SourceChannel: clientID, + Sequence: sequence, + } + + moduleAddr := wfapp.IFTKeeper.GetModuleAddress() + + // Get sender balance before + senderAddr := sdk.MustAccAddressFromBech32(userAddrA) + + // Call the callback + err = wfapp.IFTKeeper.IBCOnAcknowledgementPacketCallback( + ctx, + packet, + ackBytes, + moduleAddr, + moduleAddr.String(), + moduleAddr.String(), + gmptypes.Version, + ) + require.NoError(t, err) + + // Verify pending transfer was removed + exists, err := wfapp.IFTKeeper.PendingTransferStore.Has(ctx, collections.Join(clientID, sequence)) + require.NoError(t, err) + require.False(t, exists) + + // Verify tokens were refunded (minted back) + balance := wfapp.BankKeeper.GetBalance(ctx, senderAddr, testDenom) + require.True(t, balance.Amount.Equal(math.NewInt(1000000))) +} + +// TestCallbacks_IBCOnAcknowledgementPacketCallback_V2AckFormat tests v2 ack format handling. +// In IBC v2, error is signaled ONLY by the 32-byte ErrorAcknowledgement sentinel hash. +// Any other bytes, including v1-style error ack protobuf, are treated as success. +func TestCallbacks_IBCOnAcknowledgementPacketCallback_V2AckFormat(t *testing.T) { + cases := []struct { + name string + ack []byte + expectRefund bool + }{ + { + name: "success: raw bytes", + ack: []byte("success"), + expectRefund: false, + }, + { + name: "success: empty bytes", + ack: []byte{}, + expectRefund: false, + }, + { + name: "error: v2 ErrorAcknowledgement sentinel triggers refund", + ack: channeltypesv2.ErrorAcknowledgement[:], + expectRefund: true, + }, + { + name: "success: v1-style error ack is NOT treated as error in v2", + ack: func() []byte { + ack := channeltypes.NewErrorAcknowledgement(errors.New("some error")) + bytes, _ := ack.Marshal() + return bytes + }(), + expectRefund: false, + }, + { + name: "success: partial match of error sentinel", + ack: channeltypesv2.ErrorAcknowledgement[:16], + expectRefund: false, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID := createIBCClient(t, ctx, wfapp) + sequence := uint64(1) + + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + + pending := types.PendingTransfer{ + Denom: testDenom, + ClientId: clientID, + Sequence: sequence, + Sender: userAddrA, + Amount: math.NewInt(1000000), + } + err := wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, sequence, pending) + require.NoError(t, err) + + packet := channeltypes.Packet{ + SourcePort: gmptypes.PortID, + SourceChannel: clientID, + Sequence: sequence, + } + + moduleAddr := wfapp.IFTKeeper.GetModuleAddress() + senderAddr := sdk.MustAccAddressFromBech32(userAddrA) + + err = wfapp.IFTKeeper.IBCOnAcknowledgementPacketCallback( + ctx, + packet, + tc.ack, + moduleAddr, + moduleAddr.String(), + moduleAddr.String(), + gmptypes.Version, + ) + require.NoError(t, err) + + exists, err := wfapp.IFTKeeper.PendingTransferStore.Has(ctx, collections.Join(clientID, sequence)) + require.NoError(t, err) + require.False(t, exists, "pending transfer should be removed") + + balance := wfapp.BankKeeper.GetBalance(ctx, senderAddr, testDenom) + if tc.expectRefund { + require.True(t, balance.Amount.Equal(math.NewInt(1000000)), "tokens should be refunded") + } else { + require.True(t, balance.Amount.IsZero(), "tokens should NOT be refunded on success") + } + }) + } +} + +// TestCallbacks_IBCOnAcknowledgementPacketCallback_NoPendingTransfer tests no-op when no pending transfer exists. +func TestCallbacks_IBCOnAcknowledgementPacketCallback_NoPendingTransfer(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID := createIBCClient(t, ctx, wfapp) + + // Create successful acknowledgement + ack := channeltypes.NewResultAcknowledgement([]byte("success")) + ackBytes, err := ack.Marshal() + require.NoError(t, err) + + // Create packet without corresponding pending transfer + packet := channeltypes.Packet{ + SourcePort: gmptypes.PortID, + SourceChannel: clientID, + Sequence: 999, + } + + moduleAddr := wfapp.IFTKeeper.GetModuleAddress() + + // Should return nil (no-op for non-IFT packets) + err = wfapp.IFTKeeper.IBCOnAcknowledgementPacketCallback( + ctx, + packet, + ackBytes, + moduleAddr, + moduleAddr.String(), + moduleAddr.String(), + gmptypes.Version, + ) + require.NoError(t, err) +} + +// TestCallbacks_IBCOnAcknowledgementPacketCallback_NonIFTPacket tests that non-IFT packets are gracefully ignored. +// This is important because IFT is registered as the ContractKeeper for all GMP callbacks, +// but other applications may also use GMP. IFT must not interfere with their callbacks. +func TestCallbacks_IBCOnAcknowledgementPacketCallback_NonIFTPacket(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID := createIBCClient(t, ctx, wfapp) + + // Create successful acknowledgement + ack := channeltypes.NewResultAcknowledgement([]byte("success")) + ackBytes, err := ack.Marshal() + require.NoError(t, err) + + packet := channeltypes.Packet{ + SourcePort: gmptypes.PortID, + SourceChannel: clientID, + Sequence: 1, + } + + moduleAddr := wfapp.IFTKeeper.GetModuleAddress() + + cases := []struct { + name string + contractAddress string + packetSender string + version string + sourcePort string + }{ + { + name: "ignore: different contract address (other GMP app)", + contractAddress: userAddrA, + packetSender: userAddrA, + version: gmptypes.Version, + sourcePort: gmptypes.PortID, + }, + { + name: "ignore: different packet sender (other GMP app)", + contractAddress: moduleAddr.String(), + packetSender: userAddrA, + version: gmptypes.Version, + sourcePort: gmptypes.PortID, + }, + { + name: "ignore: different version", + contractAddress: moduleAddr.String(), + packetSender: moduleAddr.String(), + version: "other-version", + sourcePort: gmptypes.PortID, + }, + { + name: "ignore: different source port", + contractAddress: moduleAddr.String(), + packetSender: moduleAddr.String(), + version: gmptypes.Version, + sourcePort: "other-port", + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + packet.SourcePort = tc.sourcePort + + // Non-IFT packets should be gracefully ignored (return nil, no error) + err := wfapp.IFTKeeper.IBCOnAcknowledgementPacketCallback( + ctx, + packet, + ackBytes, + moduleAddr, + tc.contractAddress, + tc.packetSender, + tc.version, + ) + require.NoError(t, err, "non-IFT packets should be gracefully ignored, not cause errors") + }) + } +} + +// TestCallbacks_IBCOnTimeoutPacketCallback tests packet timeout handling with refund. +func TestCallbacks_IBCOnTimeoutPacketCallback(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID := createIBCClient(t, ctx, wfapp) + sequence := uint64(1) + + // Create token factory denom + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + + // Setup pending transfer + pending := types.PendingTransfer{ + Denom: testDenom, + ClientId: clientID, + Sequence: sequence, + Sender: userAddrA, + Amount: math.NewInt(500000), + } + err := wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, sequence, pending) + require.NoError(t, err) + + // Create packet + packet := channeltypes.Packet{ + SourcePort: gmptypes.PortID, + SourceChannel: clientID, + Sequence: sequence, + } + + moduleAddr := wfapp.IFTKeeper.GetModuleAddress() + senderAddr := sdk.MustAccAddressFromBech32(userAddrA) + + // Call the callback + err = wfapp.IFTKeeper.IBCOnTimeoutPacketCallback( + ctx, + packet, + moduleAddr, + moduleAddr.String(), + moduleAddr.String(), + gmptypes.Version, + ) + require.NoError(t, err) + + // Verify pending transfer was removed + exists, err := wfapp.IFTKeeper.PendingTransferStore.Has(ctx, collections.Join(clientID, sequence)) + require.NoError(t, err) + require.False(t, exists) + + // Verify tokens were refunded + balance := wfapp.BankKeeper.GetBalance(ctx, senderAddr, testDenom) + require.True(t, balance.Amount.Equal(math.NewInt(500000))) +} + +// TestCallbacks_IBCOnTimeoutPacketCallback_NoPendingTransfer tests no-op when no pending transfer exists. +func TestCallbacks_IBCOnTimeoutPacketCallback_NoPendingTransfer(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID := createIBCClient(t, ctx, wfapp) + + // Create packet without corresponding pending transfer + packet := channeltypes.Packet{ + SourcePort: gmptypes.PortID, + SourceChannel: clientID, + Sequence: 999, + } + + moduleAddr := wfapp.IFTKeeper.GetModuleAddress() + + // Should return nil (no-op for non-IFT packets) + err := wfapp.IFTKeeper.IBCOnTimeoutPacketCallback( + ctx, + packet, + moduleAddr, + moduleAddr.String(), + moduleAddr.String(), + gmptypes.Version, + ) + require.NoError(t, err) +} + +// TestCallbacks_IBCOnTimeoutPacketCallback_NonIFTPacket tests that non-IFT packets are gracefully ignored. +// This is important because IFT is registered as the ContractKeeper for all GMP callbacks, +// but other applications may also use GMP. IFT must not interfere with their callbacks. +func TestCallbacks_IBCOnTimeoutPacketCallback_NonIFTPacket(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID := createIBCClient(t, ctx, wfapp) + + packet := channeltypes.Packet{ + SourcePort: gmptypes.PortID, + SourceChannel: clientID, + Sequence: 1, + } + + moduleAddr := wfapp.IFTKeeper.GetModuleAddress() + + cases := []struct { + name string + contractAddress string + packetSender string + version string + sourcePort string + }{ + { + name: "ignore: different contract address (other GMP app)", + contractAddress: userAddrA, + packetSender: userAddrA, + version: gmptypes.Version, + sourcePort: gmptypes.PortID, + }, + { + name: "ignore: different packet sender (other GMP app)", + contractAddress: moduleAddr.String(), + packetSender: userAddrA, + version: gmptypes.Version, + sourcePort: gmptypes.PortID, + }, + { + name: "ignore: different version", + contractAddress: moduleAddr.String(), + packetSender: moduleAddr.String(), + version: "other-version", + sourcePort: gmptypes.PortID, + }, + { + name: "ignore: different source port", + contractAddress: moduleAddr.String(), + packetSender: moduleAddr.String(), + version: gmptypes.Version, + sourcePort: "other-port", + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + packet.SourcePort = tc.sourcePort + + // Non-IFT packets should be gracefully ignored (return nil, no error) + err := wfapp.IFTKeeper.IBCOnTimeoutPacketCallback( + ctx, + packet, + moduleAddr, + tc.contractAddress, + tc.packetSender, + tc.version, + ) + require.NoError(t, err, "non-IFT packets should be gracefully ignored, not cause errors") + }) + } +} + +// TestCallbacks_IBCReceivePacketCallback tests the IBCReceivePacketCallback handler. +func TestCallbacks_IBCReceivePacketCallback(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + // Should be a no-op and return nil + err := wfapp.IFTKeeper.IBCReceivePacketCallback( + ctx, + nil, // packet + nil, // ack + "", // relayer + "", // contractAddress + ) + require.NoError(t, err) +} + +// TestCallbacks_RefundPendingTransfer tests the RefundPendingTransfer function. +func TestCallbacks_RefundPendingTransfer(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID := createIBCClient(t, ctx, wfapp) + sequence := uint64(42) + + // Create token factory denom + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + + senderAddr := sdk.MustAccAddressFromBech32(userAddrA) + + // Setup pending transfer + pending := types.PendingTransfer{ + Denom: testDenom, + ClientId: clientID, + Sequence: sequence, + Sender: userAddrA, + Amount: math.NewInt(7500000), + } + err := wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, sequence, pending) + require.NoError(t, err) + + // Get balance before refund (should be 0) + balanceBefore := wfapp.BankKeeper.GetBalance(ctx, senderAddr, testDenom) + require.True(t, balanceBefore.Amount.IsZero()) + + // Refund + err = wfapp.IFTKeeper.RefundPendingTransfer(ctx, testDenom, clientID, sequence) + require.NoError(t, err) + + // Verify pending transfer was removed + exists, err := wfapp.IFTKeeper.PendingTransferStore.Has(ctx, collections.Join(clientID, sequence)) + require.NoError(t, err) + require.False(t, exists) + + // Verify tokens were minted back to sender + balanceAfter := wfapp.BankKeeper.GetBalance(ctx, senderAddr, testDenom) + require.True(t, balanceAfter.Amount.Equal(math.NewInt(7500000))) +} + +// TestCallbacks_RefundPendingTransfer_NotFound tests RefundPendingTransfer when transfer not found. +func TestCallbacks_RefundPendingTransfer_NotFound(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID := createIBCClient(t, ctx, wfapp) + + // Create token factory denom + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + + // Try to refund non-existent pending transfer + err := wfapp.IFTKeeper.RefundPendingTransfer(ctx, testDenom, clientID, 999) + require.ErrorIs(t, err, types.ErrPendingTransferNotFound) +} + +// TestCallbacks_MultiplePendingTransfers tests handling multiple pending transfers. +// Note: IBC sequences are unique per channel, so each pending transfer has a unique (clientId, sequence). +func TestCallbacks_MultiplePendingTransfers(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID := createIBCClient(t, ctx, wfapp) + + // Create token factory denoms + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom2) + + // Setup multiple pending transfers with unique sequences + pending1 := types.PendingTransfer{ + Denom: testDenom, + ClientId: clientID, + Sequence: 1, + Sender: userAddrA, + Amount: math.NewInt(100), + } + err := wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, 1, pending1) + require.NoError(t, err) + + pending2 := types.PendingTransfer{ + Denom: testDenom, + ClientId: clientID, + Sequence: 2, + Sender: userAddrB, + Amount: math.NewInt(200), + } + err = wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, 2, pending2) + require.NoError(t, err) + + pending3 := types.PendingTransfer{ + Denom: testDenom2, + ClientId: clientID, + Sequence: 3, // Unique sequence (IBC sequences are unique per channel) + Sender: userAddrA, + Amount: math.NewInt(300), + } + err = wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, 3, pending3) + require.NoError(t, err) + + moduleAddr := wfapp.IFTKeeper.GetModuleAddress() + + // Timeout packet for sequence 1 + packet1 := channeltypes.Packet{ + SourcePort: gmptypes.PortID, + SourceChannel: clientID, + Sequence: 1, + } + + err = wfapp.IFTKeeper.IBCOnTimeoutPacketCallback( + ctx, + packet1, + moduleAddr, + moduleAddr.String(), + moduleAddr.String(), + gmptypes.Version, + ) + require.NoError(t, err) + + // Verify pending1 was removed + exists, err := wfapp.IFTKeeper.PendingTransferStore.Has(ctx, collections.Join(clientID, uint64(1))) + require.NoError(t, err) + require.False(t, exists) + + // pending2 and pending3 should still exist + exists, err = wfapp.IFTKeeper.PendingTransferStore.Has(ctx, collections.Join(clientID, uint64(2))) + require.NoError(t, err) + require.True(t, exists) + + exists, err = wfapp.IFTKeeper.PendingTransferStore.Has(ctx, collections.Join(clientID, uint64(3))) + require.NoError(t, err) + require.True(t, exists) + + // Verify userAddrA got refunded for testDenom + senderAddrA := sdk.MustAccAddressFromBech32(userAddrA) + balance := wfapp.BankKeeper.GetBalance(ctx, senderAddrA, testDenom) + require.True(t, balance.Amount.Equal(math.NewInt(100))) +} diff --git a/prototypes/x/ift/keeper/genesis.go b/prototypes/x/ift/keeper/genesis.go new file mode 100644 index 00000000000..a11423efba6 --- /dev/null +++ b/prototypes/x/ift/keeper/genesis.go @@ -0,0 +1,67 @@ +package keeper + +import ( + "context" + + "github.com/cosmos/sandbox-ledger/x/ift/types" + + "cosmossdk.io/collections" +) + +// InitGenesis initializes the IFT module's state from a provided genesis state. +func (k Keeper) InitGenesis(ctx context.Context, genState types.GenesisState) { + // Default the params authority to the keeper's authority (gov module address) + // when not explicitly set in genesis. + if genState.Params.Authority == "" { + genState.Params.Authority = k.authority + } + + if err := k.ParamsStore.Set(ctx, genState.Params); err != nil { + panic(err) + } + + for _, genBridge := range genState.Bridges { + if err := k.IFTBridgeStore.Set(ctx, collections.Join(genBridge.Denom, genBridge.Bridge.ClientId), genBridge.Bridge); err != nil { + panic(err) + } + } + + for _, pending := range genState.PendingTransfers { + if err := k.SetPendingTransfer(ctx, pending.ClientId, pending.Sequence, pending); err != nil { + panic(err) + } + } +} + +// ExportGenesis returns the IFT module's exported genesis. +func (k Keeper) ExportGenesis(ctx context.Context) *types.GenesisState { + params, err := k.ParamsStore.Get(ctx) + if err != nil { + panic(err) + } + + var bridges []types.GenesisBridge + if err := k.IFTBridgeStore.Walk(ctx, nil, func(key collections.Pair[string, string], bridge types.IFTBridge) (bool, error) { + bridges = append(bridges, types.GenesisBridge{ + Denom: key.K1(), + Bridge: bridge, + }) + return false, nil + }); err != nil { + panic(err) + } + + var pendingTransfers []types.PendingTransfer + if err := k.PendingTransferStore.Walk(ctx, nil, func(_ collections.Pair[string, uint64], pending types.PendingTransfer) (bool, error) { + pendingTransfers = append(pendingTransfers, pending) + return false, nil + }); err != nil { + panic(err) + } + + return &types.GenesisState{ + Params: params, + Bridges: bridges, + PendingTransfers: pendingTransfers, + } +} diff --git a/prototypes/x/ift/keeper/genesis_test.go b/prototypes/x/ift/keeper/genesis_test.go new file mode 100644 index 00000000000..caac0f96b53 --- /dev/null +++ b/prototypes/x/ift/keeper/genesis_test.go @@ -0,0 +1,335 @@ +package keeper_test + +import ( + "testing" + + "github.com/cosmos/sandbox-ledger/x/ift/types" + "github.com/stretchr/testify/require" + + "cosmossdk.io/collections" + "cosmossdk.io/math" +) + +func TestGenesis_DefaultGenesis(t *testing.T) { + genesis := types.DefaultGenesis() + + require.NotNil(t, genesis) + require.NotNil(t, genesis.Params) + require.Empty(t, genesis.Params.Authority) + require.Empty(t, genesis.Bridges) + require.Empty(t, genesis.PendingTransfers) +} + +func TestGenesis_Validate(t *testing.T) { + cases := []struct { + name string + genesis types.GenesisState + err error + }{ + { + name: "valid default genesis", + genesis: *types.DefaultGenesis(), + }, + { + name: "valid genesis with bridges", + genesis: types.GenesisState{ + Params: types.Params{Authority: adminAddr}, + Bridges: []types.GenesisBridge{ + { + Denom: testDenom, + Bridge: types.IFTBridge{ + ClientId: "attestations-0", + CounterpartyIftAddress: remoteIFTAddrA, + IftSendCallConstructor: types.ConstructorEVM, + }, + }, + }, + PendingTransfers: []types.PendingTransfer{}, + }, + }, + { + name: "valid genesis with pending transfers", + genesis: types.GenesisState{ + Params: types.Params{Authority: adminAddr}, + Bridges: []types.GenesisBridge{}, + PendingTransfers: []types.PendingTransfer{ + { + Denom: testDenom, + ClientId: "attestations-0", + Sequence: 1, + Sender: userAddrA, + Amount: math.NewInt(1000), + }, + }, + }, + }, + { + name: "invalid bridge - empty denom", + genesis: types.GenesisState{ + Params: types.Params{Authority: adminAddr}, + Bridges: []types.GenesisBridge{ + { + Denom: "", + Bridge: types.IFTBridge{ + ClientId: "attestations-0", + CounterpartyIftAddress: remoteIFTAddrA, + IftSendCallConstructor: types.ConstructorEVM, + }, + }, + }, + }, + err: types.ErrInvalidDenom, + }, + { + name: "invalid bridge - empty client id", + genesis: types.GenesisState{ + Params: types.Params{Authority: adminAddr}, + Bridges: []types.GenesisBridge{ + { + Denom: testDenom, + Bridge: types.IFTBridge{ + ClientId: "", + CounterpartyIftAddress: remoteIFTAddrA, + IftSendCallConstructor: types.ConstructorEVM, + }, + }, + }, + }, + err: types.ErrInvalidClientID, + }, + { + name: "invalid pending transfer - empty denom", + genesis: types.GenesisState{ + Params: types.Params{Authority: adminAddr}, + Bridges: []types.GenesisBridge{}, + PendingTransfers: []types.PendingTransfer{ + { + Denom: "", + ClientId: "attestations-0", + Sequence: 1, + Sender: userAddrA, + Amount: math.NewInt(1000), + }, + }, + }, + err: types.ErrInvalidDenom, + }, + { + name: "invalid pending transfer - empty client id", + genesis: types.GenesisState{ + Params: types.Params{Authority: adminAddr}, + Bridges: []types.GenesisBridge{}, + PendingTransfers: []types.PendingTransfer{ + { + Denom: testDenom, + ClientId: "", + Sequence: 1, + Sender: userAddrA, + Amount: math.NewInt(1000), + }, + }, + }, + err: types.ErrInvalidClientID, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + err := tc.genesis.Validate() + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + } else { + require.NoError(t, err) + } + }) + } +} + +func TestGenesis_InitGenesis(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID1 := createIBCClient(t, ctx, wfapp) + clientID2 := createIBCClient(t, ctx, wfapp) + + genesis := types.GenesisState{ + Params: types.Params{Authority: adminAddr}, + Bridges: []types.GenesisBridge{ + { + Denom: testDenom, + Bridge: types.IFTBridge{ + ClientId: clientID1, + CounterpartyIftAddress: remoteIFTAddrA, + IftSendCallConstructor: types.ConstructorEVM, + }, + }, + { + Denom: testDenom2, + Bridge: types.IFTBridge{ + ClientId: clientID2, + CounterpartyIftAddress: remoteIFTAddrB, + IftSendCallConstructor: types.ConstructorCosmos, + }, + }, + }, + PendingTransfers: []types.PendingTransfer{ + { + Denom: testDenom, + ClientId: clientID1, + Sequence: 1, + Sender: userAddrA, + Amount: math.NewInt(1000), + }, + { + Denom: testDenom, + ClientId: clientID1, + Sequence: 2, + Sender: userAddrB, + Amount: math.NewInt(2000), + }, + }, + } + + // Initialize genesis + wfapp.IFTKeeper.InitGenesis(ctx, genesis) + + // Verify params + params, err := wfapp.IFTKeeper.ParamsStore.Get(ctx) + require.NoError(t, err) + require.Equal(t, adminAddr, params.Authority) + + // Verify bridges + bridge1, err := wfapp.IFTKeeper.IFTBridgeStore.Get(ctx, collections.Join(testDenom, clientID1)) + require.NoError(t, err) + require.Equal(t, remoteIFTAddrA, bridge1.CounterpartyIftAddress) + require.Equal(t, types.ConstructorEVM, bridge1.IftSendCallConstructor) + + bridge2, err := wfapp.IFTKeeper.IFTBridgeStore.Get(ctx, collections.Join(testDenom2, clientID2)) + require.NoError(t, err) + require.Equal(t, remoteIFTAddrB, bridge2.CounterpartyIftAddress) + require.Equal(t, types.ConstructorCosmos, bridge2.IftSendCallConstructor) + + // Verify pending transfers + pending1, err := wfapp.IFTKeeper.PendingTransferStore.Get(ctx, collections.Join(clientID1, uint64(1))) + require.NoError(t, err) + require.Equal(t, userAddrA, pending1.Sender) + require.True(t, math.NewInt(1000).Equal(pending1.Amount)) + + pending2, err := wfapp.IFTKeeper.PendingTransferStore.Get(ctx, collections.Join(clientID1, uint64(2))) + require.NoError(t, err) + require.Equal(t, userAddrB, pending2.Sender) + require.True(t, math.NewInt(2000).Equal(pending2.Amount)) +} + +func TestGenesis_ExportGenesis(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID1 := createIBCClient(t, ctx, wfapp) + clientID2 := createIBCClient(t, ctx, wfapp) + + // Set up state + err := wfapp.IFTKeeper.ParamsStore.Set(ctx, types.Params{Authority: adminAddr}) + require.NoError(t, err) + + bridge1 := types.IFTBridge{ + ClientId: clientID1, + CounterpartyIftAddress: remoteIFTAddrA, + IftSendCallConstructor: types.ConstructorEVM, + } + err = wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(testDenom, clientID1), bridge1) + require.NoError(t, err) + + bridge2 := types.IFTBridge{ + ClientId: clientID2, + CounterpartyIftAddress: remoteIFTAddrB, + IftSendCallConstructor: types.ConstructorCosmos, + } + err = wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(testDenom2, clientID2), bridge2) + require.NoError(t, err) + + pending := types.PendingTransfer{ + Denom: testDenom, + ClientId: clientID1, + Sequence: 42, + Sender: userAddrA, + Amount: math.NewInt(5000), + } + err = wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID1, 42, pending) + require.NoError(t, err) + + // Export genesis + exportedGenesis := wfapp.IFTKeeper.ExportGenesis(ctx) + + // Verify exported state + require.Equal(t, adminAddr, exportedGenesis.Params.Authority) + require.Len(t, exportedGenesis.Bridges, 2) + require.Len(t, exportedGenesis.PendingTransfers, 1) + + // Verify pending transfer + require.Equal(t, testDenom, exportedGenesis.PendingTransfers[0].Denom) + require.Equal(t, clientID1, exportedGenesis.PendingTransfers[0].ClientId) + require.Equal(t, uint64(42), exportedGenesis.PendingTransfers[0].Sequence) + require.Equal(t, userAddrA, exportedGenesis.PendingTransfers[0].Sender) + require.True(t, math.NewInt(5000).Equal(exportedGenesis.PendingTransfers[0].Amount)) +} + +func TestGenesis_InitExportRoundTrip(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID := createIBCClient(t, ctx, wfapp) + + originalGenesis := types.GenesisState{ + Params: types.Params{Authority: adminAddr}, + Bridges: []types.GenesisBridge{ + { + Denom: testDenom, + Bridge: types.IFTBridge{ + ClientId: clientID, + CounterpartyIftAddress: remoteIFTAddrA, + IftSendCallConstructor: types.ConstructorEVM, + }, + }, + }, + PendingTransfers: []types.PendingTransfer{ + { + Denom: testDenom, + ClientId: clientID, + Sequence: 1, + Sender: userAddrA, + Amount: math.NewInt(12345), + }, + }, + } + + // Initialize with genesis + wfapp.IFTKeeper.InitGenesis(ctx, originalGenesis) + + // Export genesis + exportedGenesis := wfapp.IFTKeeper.ExportGenesis(ctx) + + // Verify round-trip + require.Equal(t, originalGenesis.Params.Authority, exportedGenesis.Params.Authority) + require.Len(t, exportedGenesis.Bridges, 1) + require.Equal(t, originalGenesis.Bridges[0].Denom, exportedGenesis.Bridges[0].Denom) + require.Equal(t, originalGenesis.Bridges[0].Bridge.ClientId, exportedGenesis.Bridges[0].Bridge.ClientId) + require.Equal(t, originalGenesis.Bridges[0].Bridge.CounterpartyIftAddress, exportedGenesis.Bridges[0].Bridge.CounterpartyIftAddress) + require.Equal(t, originalGenesis.Bridges[0].Bridge.IftSendCallConstructor, exportedGenesis.Bridges[0].Bridge.IftSendCallConstructor) + + require.Len(t, exportedGenesis.PendingTransfers, 1) + require.Equal(t, originalGenesis.PendingTransfers[0].Denom, exportedGenesis.PendingTransfers[0].Denom) + require.Equal(t, originalGenesis.PendingTransfers[0].ClientId, exportedGenesis.PendingTransfers[0].ClientId) + require.Equal(t, originalGenesis.PendingTransfers[0].Sequence, exportedGenesis.PendingTransfers[0].Sequence) + require.Equal(t, originalGenesis.PendingTransfers[0].Sender, exportedGenesis.PendingTransfers[0].Sender) + require.True(t, originalGenesis.PendingTransfers[0].Amount.Equal(exportedGenesis.PendingTransfers[0].Amount)) +} + +func TestGenesis_EmptyGenesis(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + // Export genesis from fresh state (should match default genesis structure) + exportedGenesis := wfapp.IFTKeeper.ExportGenesis(ctx) + + // Should have default params set during setupIntegrationApp + require.NotEmpty(t, exportedGenesis.Params.Authority) + require.Empty(t, exportedGenesis.Bridges) + require.Empty(t, exportedGenesis.PendingTransfers) +} diff --git a/prototypes/x/ift/keeper/keeper.go b/prototypes/x/ift/keeper/keeper.go new file mode 100644 index 00000000000..cc4e09b18e2 --- /dev/null +++ b/prototypes/x/ift/keeper/keeper.go @@ -0,0 +1,127 @@ +package keeper + +import ( + "context" + "errors" + "fmt" + + "github.com/cosmos/sandbox-ledger/x/ift/types" + + "cosmossdk.io/collections" + "cosmossdk.io/core/address" + storetypes "cosmossdk.io/core/store" + "cosmossdk.io/log/v2" + + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +type Keeper struct { + cdc codec.BinaryCodec + storeService storetypes.KVStoreService + addressCodec address.Codec + authority string + + accountKeeper types.AccountKeeper + tokenFactoryKeeper types.TokenFactoryKeeper + gmpKeeper types.GMPKeeper + msgRouter types.MessageRouter + ibcClientKeeper types.IBCClientKeeper + ibcClientV2Keeper types.IBCClientV2Keeper + + Schema collections.Schema + ParamsStore collections.Item[types.Params] + IFTBridgeStore collections.Map[collections.Pair[string, string], types.IFTBridge] + PendingTransferStore collections.Map[collections.Pair[string, uint64], types.PendingTransfer] // keyed by (clientID, sequence) +} + +func NewKeeper( + cdc codec.BinaryCodec, + storeService storetypes.KVStoreService, + addressCodec address.Codec, + authority string, + accountKeeper types.AccountKeeper, + tokenFactoryKeeper types.TokenFactoryKeeper, + gmpKeeper types.GMPKeeper, + msgRouter types.MessageRouter, + ibcClientKeeper types.IBCClientKeeper, + ibcClientV2Keeper types.IBCClientV2Keeper, +) Keeper { + sb := collections.NewSchemaBuilder(storeService) + + k := Keeper{ + cdc: cdc, + storeService: storeService, + addressCodec: addressCodec, + authority: authority, + accountKeeper: accountKeeper, + tokenFactoryKeeper: tokenFactoryKeeper, + gmpKeeper: gmpKeeper, + msgRouter: msgRouter, + ibcClientKeeper: ibcClientKeeper, + ibcClientV2Keeper: ibcClientV2Keeper, + ParamsStore: collections.NewItem(sb, types.ParamsKey, "params", codec.CollValue[types.Params](cdc)), + IFTBridgeStore: collections.NewMap(sb, types.IFTBridgePrefix, "ift_bridges", collections.PairKeyCodec(collections.StringKey, collections.StringKey), codec.CollValue[types.IFTBridge](cdc)), + PendingTransferStore: collections.NewMap(sb, types.PendingTransferKey, "pending_transfers", + collections.PairKeyCodec(collections.StringKey, collections.Uint64Key), + codec.CollValue[types.PendingTransfer](cdc)), + } + + schema, err := sb.Build() + if err != nil { + panic(err) + } + k.Schema = schema + + return k +} + +func (Keeper) Logger(ctx context.Context) log.Logger { + sdkCtx := sdk.UnwrapSDKContext(ctx) + return sdkCtx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) +} + +func (k Keeper) GetAuthority() string { + return k.authority +} + +func (k Keeper) GetModuleAddress() sdk.AccAddress { + return k.accountKeeper.GetModuleAddress(types.ModuleName) +} + +// SetPendingTransfer saves the pending transfer keyed by (clientID, sequence) +func (k Keeper) SetPendingTransfer(ctx context.Context, clientID string, sequence uint64, pending types.PendingTransfer) error { + return k.PendingTransferStore.Set(ctx, collections.Join(clientID, sequence), pending) +} + +// RemovePendingTransfer removes the pending transfer by (clientID, sequence) +func (k Keeper) RemovePendingTransfer(ctx context.Context, clientID string, sequence uint64) error { + return k.PendingTransferStore.Remove(ctx, collections.Join(clientID, sequence)) +} + +// HasPendingTransfersForBridge checks if there are any pending transfers for a specific bridge. +// Uses prefix range to efficiently walk only entries for the given clientID. +func (k Keeper) HasPendingTransfersForBridge(ctx context.Context, denom, clientID string) (bool, error) { + rng := collections.NewPrefixedPairRange[string, uint64](clientID) + var found bool + err := k.PendingTransferStore.Walk(ctx, rng, func(_ collections.Pair[string, uint64], pending types.PendingTransfer) (bool, error) { + if pending.Denom == denom { + found = true + return true, nil // stop iteration + } + return false, nil + }) + return found, err +} + +// GetPendingTransferByClientSequence looks up a pending transfer by (clientID, sequence). +func (k Keeper) GetPendingTransferByClientSequence(ctx context.Context, clientID string, sequence uint64) (types.PendingTransfer, bool, error) { + pending, err := k.PendingTransferStore.Get(ctx, collections.Join(clientID, sequence)) + if err != nil { + if errors.Is(err, collections.ErrNotFound) { + return types.PendingTransfer{}, false, nil + } + return types.PendingTransfer{}, false, err + } + return pending, true, nil +} diff --git a/prototypes/x/ift/keeper/keeper_test.go b/prototypes/x/ift/keeper/keeper_test.go new file mode 100644 index 00000000000..d72afdcb9e2 --- /dev/null +++ b/prototypes/x/ift/keeper/keeper_test.go @@ -0,0 +1,359 @@ +package keeper_test + +import ( + "fmt" + "testing" + "time" + + dbm "github.com/cosmos/cosmos-db" + "github.com/cosmos/sandbox-ledger/app" + "github.com/cosmos/sandbox-ledger/testutil" + ifttypes "github.com/cosmos/sandbox-ledger/x/ift/types" + ethcrypto "github.com/ethereum/go-ethereum/crypto" + "github.com/stretchr/testify/require" + + "cosmossdk.io/collections" + "cosmossdk.io/log/v2" + "cosmossdk.io/math" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/runtime" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + consensusparamkeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" + consensusparamtypes "github.com/cosmos/cosmos-sdk/x/consensus/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + + cmtabcitypes "github.com/cometbft/cometbft/abci/types" + + clientv2types "github.com/cosmos/ibc-go/v11/modules/core/02-client/v2/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" + ibcattestations "github.com/cosmos/ibc-go/v11/modules/light-clients/attestations" +) + +const ( + // Test addresses + adminAddr = "cosmos1nsh9vj9znccakn6xwlhlwx92acdt79yeqrkz4y" + userAddrA = "cosmos1uu635yk0hz3cvrypnryrggltrjq7975jrmeg97" + userAddrB = "cosmos1y6xz2ggfc0pcsmyjlekh0j9pxh6hk87yfwcjct" + invalidAddr = "invalid" + + // Test denoms + testDenom = "testtoken" + testDenom2 = "testtoken2" + + // Remote contract addresses (EVM) + remoteIFTAddrA = "0x1111111111111111111111111111111111111111" + remoteIFTAddrB = "0x2222222222222222222222222222222222222222" + + // Remote Solana addresses (valid base58 encoded 32-byte public keys) + solanaIFTProgramID = "BPFLoaderUpgradeab1e11111111111111111111111" + solanaGMPProgramID = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" + solanaMintPubkey = "So11111111111111111111111111111111111111112" + solanaReceiverAddr = "11111111111111111111111111111111" +) + +func setupIntegrationApp(tb testing.TB) (*app.SandboxApp, sdk.Context) { + tb.Helper() + testutil.SafeSetAddressPrefixes() + + db := dbm.NewMemDB() + wfapp := app.NewApp(log.NewNopLogger(), db, nil, false, simtestutil.NewAppOptionsWithFlagHome(tb.TempDir()), baseapp.SetChainID("chain-id")) + wfapp.SetInitChainer(func(ctx sdk.Context, _ *cmtabcitypes.RequestInitChain) (*cmtabcitypes.ResponseInitChain, error) { + for _, mod := range wfapp.ModuleManager.OrderInitGenesis { + if m, ok := wfapp.ModuleManager.Modules[mod].(module.HasGenesis); ok { + m.InitGenesis(ctx, wfapp.AppCodec(), m.DefaultGenesis(wfapp.AppCodec())) + } + } + return &cmtabcitypes.ResponseInitChain{}, nil + }) + + consensusParamsKeeper := consensusparamkeeper.NewKeeper(wfapp.AppCodec(), runtime.NewKVStoreService(wfapp.GetKey(consensusparamtypes.StoreKey)), authtypes.NewModuleAddress("gov").String(), runtime.EventService{}) + wfapp.SetParamStore(consensusParamsKeeper.ParamsStore) + + if err := wfapp.LoadLatestVersion(); err != nil { + panic(fmt.Errorf("failed to load application version from store: %w", err)) + } + + _, err := wfapp.InitChain(&cmtabcitypes.RequestInitChain{ChainId: "chain-id", ConsensusParams: simtestutil.DefaultConsensusParams}) + require.NoError(tb, err) + + ctx := wfapp.NewContext(false). + WithChainID("chain-id"). + WithBlockTime(time.Now()). + WithBlockHeight(1) + + // Set IFT params with admin as authority + require.NoError(tb, wfapp.IFTKeeper.ParamsStore.Set(ctx, ifttypes.Params{ + Authority: authtypes.NewModuleAddress(govtypes.ModuleName).String(), + })) + + return wfapp, ctx +} + +// createIBCClient creates an attestations IBC client for use as a test +// counterparty in IFT tests. IFT only needs a valid client ID; it doesn't +// exercise the light-client verify paths, so a single-attestor client with +// quorum 1 is enough to satisfy CreateClient + SetClientCounterparty. +func createIBCClient(tb testing.TB, ctx sdk.Context, wfapp *app.SandboxApp) string { + tb.Helper() + + // Generate a fresh EOA address to use as the attestor — the value isn't + // verified during client creation, but must be a valid hex address per + // attestations.ClientState.Validate(). + privKey, err := ethcrypto.GenerateKey() + require.NoError(tb, err) + attestor := ethcrypto.PubkeyToAddress(privKey.PublicKey).Hex() + + clientStateBz := wfapp.AppCodec().MustMarshal(ibcattestations.NewClientState( + []string{attestor}, + 1, // min required signatures + 1, // latest height + )) + consensusStateBz := wfapp.AppCodec().MustMarshal(&ibcattestations.ConsensusState{ + Timestamp: uint64(time.Now().UnixNano()), + }) + + clientID, err := wfapp.IBCKeeper.ClientKeeper.CreateClient( + ctx, ibcexported.Attestations, clientStateBz, consensusStateBz, + ) + require.NoError(tb, err) + + wfapp.IBCKeeper.ClientV2Keeper.SetClientCounterparty(ctx, clientID, clientv2types.CounterpartyInfo{ClientId: clientID}) + wfapp.IBCKeeper.ChannelKeeperV2.SetNextSequenceSend(ctx, clientID, 1) + + return clientID +} + +//nolint:unparam // creator kept for test flexibility +func createTokenFactoryDenom(tb testing.TB, ctx sdk.Context, wfapp *app.SandboxApp, creator, denom string) { + tb.Helper() + err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creator, denom) + require.NoError(tb, err) +} + +//nolint:unparam // denom kept for test flexibility +func mintTokens(tb testing.TB, ctx sdk.Context, wfapp *app.SandboxApp, denom string, amount math.Int, to sdk.AccAddress) { + tb.Helper() + err := wfapp.TokenFactoryKeeper.MintTo(ctx, denom, amount, to) + require.NoError(tb, err) +} + +// TestKeeper_SetGetIFTBridge tests basic bridge storage operations +func TestKeeper_SetGetIFTBridge(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID := createIBCClient(t, ctx, wfapp) + + bridge := ifttypes.IFTBridge{ + ClientId: clientID, + CounterpartyIftAddress: remoteIFTAddrA, + IftSendCallConstructor: ifttypes.ConstructorEVM, + } + + // Set bridge + err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(testDenom, clientID), bridge) + require.NoError(t, err) + + // Get bridge + gotBridge, err := wfapp.IFTKeeper.IFTBridgeStore.Get(ctx, collections.Join(testDenom, clientID)) + require.NoError(t, err) + require.Equal(t, bridge.ClientId, gotBridge.ClientId) + require.Equal(t, bridge.CounterpartyIftAddress, gotBridge.CounterpartyIftAddress) + require.Equal(t, bridge.IftSendCallConstructor, gotBridge.IftSendCallConstructor) + + // Has bridge + exists, err := wfapp.IFTKeeper.IFTBridgeStore.Has(ctx, collections.Join(testDenom, clientID)) + require.NoError(t, err) + require.True(t, exists) + + // Remove bridge + err = wfapp.IFTKeeper.IFTBridgeStore.Remove(ctx, collections.Join(testDenom, clientID)) + require.NoError(t, err) + + // Verify removed + exists, err = wfapp.IFTKeeper.IFTBridgeStore.Has(ctx, collections.Join(testDenom, clientID)) + require.NoError(t, err) + require.False(t, exists) +} + +// TestKeeper_SetGetPendingTransfer tests pending transfer storage operations +func TestKeeper_SetGetPendingTransfer(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID := createIBCClient(t, ctx, wfapp) + sequence := uint64(1) + + pending := ifttypes.PendingTransfer{ + Denom: testDenom, + ClientId: clientID, + Sequence: sequence, + Sender: userAddrA, + Amount: math.NewInt(1000000), + } + + // Set pending transfer + err := wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, sequence, pending) + require.NoError(t, err) + + // Get pending transfer + gotPending, err := wfapp.IFTKeeper.PendingTransferStore.Get(ctx, collections.Join(clientID, sequence)) + require.NoError(t, err) + require.Equal(t, pending.Denom, gotPending.Denom) + require.Equal(t, pending.ClientId, gotPending.ClientId) + require.Equal(t, pending.Sequence, gotPending.Sequence) + require.Equal(t, pending.Sender, gotPending.Sender) + require.True(t, pending.Amount.Equal(gotPending.Amount)) + + // Has pending transfer + exists, err := wfapp.IFTKeeper.PendingTransferStore.Has(ctx, collections.Join(clientID, sequence)) + require.NoError(t, err) + require.True(t, exists) + + // Remove pending transfer + err = wfapp.IFTKeeper.RemovePendingTransfer(ctx, clientID, sequence) + require.NoError(t, err) + + // Verify removed + exists, err = wfapp.IFTKeeper.PendingTransferStore.Has(ctx, collections.Join(clientID, sequence)) + require.NoError(t, err) + require.False(t, exists) +} + +// TestKeeper_Params tests params storage +func TestKeeper_Params(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + params := ifttypes.Params{ + Authority: adminAddr, + } + + // Set params + err := wfapp.IFTKeeper.ParamsStore.Set(ctx, params) + require.NoError(t, err) + + // Get params + gotParams, err := wfapp.IFTKeeper.ParamsStore.Get(ctx) + require.NoError(t, err) + require.Equal(t, params.Authority, gotParams.Authority) +} + +// TestKeeper_HasPendingTransfersForBridge tests the pending transfer check for bridge removal +func TestKeeper_HasPendingTransfersForBridge(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID1 := createIBCClient(t, ctx, wfapp) + clientID2 := createIBCClient(t, ctx, wfapp) + + // Initially no pending transfers + hasPending, err := wfapp.IFTKeeper.HasPendingTransfersForBridge(ctx, testDenom, clientID1) + require.NoError(t, err) + require.False(t, hasPending, "should have no pending transfers initially") + + // Add a pending transfer for (testDenom, clientID1) + pending1 := ifttypes.PendingTransfer{ + Denom: testDenom, + ClientId: clientID1, + Sequence: 1, + Sender: userAddrA, + Amount: math.NewInt(1000000), + } + err = wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID1, 1, pending1) + require.NoError(t, err) + + // Now should have pending transfers for (testDenom, clientID1) + hasPending, err = wfapp.IFTKeeper.HasPendingTransfersForBridge(ctx, testDenom, clientID1) + require.NoError(t, err) + require.True(t, hasPending, "should have pending transfers after adding one") + + // Different client should not have pending transfers + hasPending, err = wfapp.IFTKeeper.HasPendingTransfersForBridge(ctx, testDenom, clientID2) + require.NoError(t, err) + require.False(t, hasPending, "different client should have no pending transfers") + + // Different denom should not have pending transfers + hasPending, err = wfapp.IFTKeeper.HasPendingTransfersForBridge(ctx, testDenom2, clientID1) + require.NoError(t, err) + require.False(t, hasPending, "different denom should have no pending transfers") + + // Add multiple pending transfers for same bridge + pending2 := ifttypes.PendingTransfer{ + Denom: testDenom, + ClientId: clientID1, + Sequence: 2, + Sender: userAddrB, + Amount: math.NewInt(2000000), + } + err = wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID1, 2, pending2) + require.NoError(t, err) + + // Still should have pending transfers + hasPending, err = wfapp.IFTKeeper.HasPendingTransfersForBridge(ctx, testDenom, clientID1) + require.NoError(t, err) + require.True(t, hasPending, "should have pending transfers with multiple entries") + + // Remove first pending transfer + err = wfapp.IFTKeeper.RemovePendingTransfer(ctx, clientID1, 1) + require.NoError(t, err) + + // Should still have pending (second one exists) + hasPending, err = wfapp.IFTKeeper.HasPendingTransfersForBridge(ctx, testDenom, clientID1) + require.NoError(t, err) + require.True(t, hasPending, "should still have pending after removing one") + + // Remove second pending transfer + err = wfapp.IFTKeeper.RemovePendingTransfer(ctx, clientID1, 2) + require.NoError(t, err) + + // Now should have no pending transfers + hasPending, err = wfapp.IFTKeeper.HasPendingTransfersForBridge(ctx, testDenom, clientID1) + require.NoError(t, err) + require.False(t, hasPending, "should have no pending transfers after removing all") +} + +// TestKeeper_GetPendingTransferByClientSequence tests the O(1) index lookup +func TestKeeper_GetPendingTransferByClientSequence(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID := createIBCClient(t, ctx, wfapp) + + // Initially not found + _, found, err := wfapp.IFTKeeper.GetPendingTransferByClientSequence(ctx, clientID, 1) + require.NoError(t, err) + require.False(t, found, "should not find non-existent transfer") + + // Add pending transfer + pending := ifttypes.PendingTransfer{ + Denom: testDenom, + ClientId: clientID, + Sequence: 1, + Sender: userAddrA, + Amount: math.NewInt(1000000), + } + err = wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, 1, pending) + require.NoError(t, err) + + // Now should find it via index + gotPending, found, err := wfapp.IFTKeeper.GetPendingTransferByClientSequence(ctx, clientID, 1) + require.NoError(t, err) + require.True(t, found, "should find transfer via index") + require.Equal(t, testDenom, gotPending.Denom) + require.Equal(t, clientID, gotPending.ClientId) + require.Equal(t, uint64(1), gotPending.Sequence) + require.Equal(t, userAddrA, gotPending.Sender) + + // Different sequence should not be found + _, found, err = wfapp.IFTKeeper.GetPendingTransferByClientSequence(ctx, clientID, 999) + require.NoError(t, err) + require.False(t, found, "should not find different sequence") + + // Remove and verify index is also cleaned up + err = wfapp.IFTKeeper.RemovePendingTransfer(ctx, clientID, 1) + require.NoError(t, err) + + _, found, err = wfapp.IFTKeeper.GetPendingTransferByClientSequence(ctx, clientID, 1) + require.NoError(t, err) + require.False(t, found, "should not find after removal") +} diff --git a/prototypes/x/ift/keeper/msg_server.go b/prototypes/x/ift/keeper/msg_server.go new file mode 100644 index 00000000000..4b4f0dae402 --- /dev/null +++ b/prototypes/x/ift/keeper/msg_server.go @@ -0,0 +1,415 @@ +package keeper + +import ( + "context" + "strconv" + "strings" + + "github.com/cosmos/sandbox-ledger/x/ift/types" + + "cosmossdk.io/collections" + errorsmod "cosmossdk.io/errors" + + sdk "github.com/cosmos/cosmos-sdk/types" + + gmptypes "github.com/cosmos/ibc-go/v11/modules/apps/27-gmp/types" +) + +var _ types.MsgServer = msgServer{} + +type msgServer struct { + k Keeper +} + +func NewMsgServerImpl(keeper Keeper) types.MsgServer { + return &msgServer{k: keeper} +} + +// RegisterIFTBridge registers a new IBC bridge to a counterparty IFT contract +func (m msgServer) RegisterIFTBridge(goCtx context.Context, msg *types.MsgRegisterIFTBridge) (*types.MsgRegisterIFTBridgeResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + params, err := m.k.ParamsStore.Get(ctx) + if err != nil { + return nil, err + } + + if msg.Signer != params.Authority { + return nil, errorsmod.Wrapf(types.ErrUnauthorized, "expected %s, got %s", params.Authority, msg.Signer) + } + + if msg.Denom == "" { + return nil, errorsmod.Wrap(types.ErrInvalidDenom, "denom cannot be empty") + } + if msg.ClientId == "" { + return nil, errorsmod.Wrap(types.ErrInvalidClientID, "client_id cannot be empty") + } + // Validate constructor and counterparty address + if err := types.ValidateConstructorString(msg.IftSendCallConstructor); err != nil { + return nil, errorsmod.Wrapf(types.ErrInvalidConstructorType, "invalid constructor: %s", err) + } + if err := types.ValidateCounterpartyAddress(msg.IftSendCallConstructor, msg.CounterpartyIftAddress); err != nil { + return nil, errorsmod.Wrapf(types.ErrInvalidReceiver, "invalid counterparty address: %s", err) + } + + // Validate IBC client exists + if _, found := m.k.ibcClientKeeper.GetClientState(ctx, msg.ClientId); !found { + return nil, errorsmod.Wrapf(types.ErrInvalidClientID, "IBC client %s not found", msg.ClientId) + } + + // Check if denom exists in token factory + if !m.k.tokenFactoryKeeper.HasDenom(ctx, msg.Denom) { + return nil, errorsmod.Wrapf(types.ErrDenomNotFound, "denom %s not found in token factory", msg.Denom) + } + + // Check if bridge already exists (allow updates) + isUpdate, err := m.k.IFTBridgeStore.Has(ctx, collections.Join(msg.Denom, msg.ClientId)) + if err != nil { + return nil, err + } + + bridge := types.IFTBridge{ + ClientId: msg.ClientId, + CounterpartyIftAddress: msg.CounterpartyIftAddress, + IftSendCallConstructor: msg.IftSendCallConstructor, + } + + if err := m.k.IFTBridgeStore.Set(ctx, collections.Join(msg.Denom, msg.ClientId), bridge); err != nil { + return nil, err + } + + eventType := types.EventTypeIFTBridgeRegistered + logAction := "registered" + if isUpdate { + eventType = types.EventTypeIFTBridgeUpdated + logAction = "updated" + } + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + eventType, + sdk.NewAttribute(types.AttributeKeyDenom, msg.Denom), + sdk.NewAttribute(types.AttributeKeyClientID, msg.ClientId), + sdk.NewAttribute(types.AttributeKeyCounterpartyIFTAddress, msg.CounterpartyIftAddress), + sdk.NewAttribute(types.AttributeKeyIFTSendCallConstructor, msg.IftSendCallConstructor), + ), + ) + + m.k.Logger(ctx).Info("IFT bridge "+logAction, + "denom", msg.Denom, + "client_id", msg.ClientId, + "counterparty_address", msg.CounterpartyIftAddress) + + return &types.MsgRegisterIFTBridgeResponse{}, nil +} + +// RemoveIFTBridge removes an existing IBC bridge +func (m msgServer) RemoveIFTBridge(goCtx context.Context, msg *types.MsgRemoveIFTBridge) (*types.MsgRemoveIFTBridgeResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + params, err := m.k.ParamsStore.Get(ctx) + if err != nil { + return nil, err + } + + if msg.Signer != params.Authority { + return nil, errorsmod.Wrapf(types.ErrUnauthorized, "expected %s, got %s", params.Authority, msg.Signer) + } + + // Check if bridge exists + exists, err := m.k.IFTBridgeStore.Has(ctx, collections.Join(msg.Denom, msg.ClientId)) + if err != nil { + return nil, err + } + if !exists { + return nil, errorsmod.Wrapf(types.ErrBridgeNotFound, "bridge for denom %s and client %s not found", msg.Denom, msg.ClientId) + } + + // Check for pending transfers - cannot remove bridge with in-flight transfers + hasPending, err := m.k.HasPendingTransfersForBridge(ctx, msg.Denom, msg.ClientId) + if err != nil { + return nil, err + } + if hasPending { + return nil, errorsmod.Wrapf(types.ErrBridgeHasPendingTransfers, + "cannot remove bridge for denom %s and client %s with pending transfers", msg.Denom, msg.ClientId) + } + + if err := m.k.IFTBridgeStore.Remove(ctx, collections.Join(msg.Denom, msg.ClientId)); err != nil { + return nil, err + } + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeIFTBridgeRemoved, + sdk.NewAttribute(types.AttributeKeyDenom, msg.Denom), + sdk.NewAttribute(types.AttributeKeyClientID, msg.ClientId), + ), + ) + + m.k.Logger(ctx).Info("IFT bridge removed", + "denom", msg.Denom, + "client_id", msg.ClientId) + + return &types.MsgRemoveIFTBridgeResponse{}, nil +} + +// IFTTransfer initiates a cross-chain token transfer +func (m msgServer) IFTTransfer(goCtx context.Context, msg *types.MsgIFTTransfer) (*types.MsgIFTTransferResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + if msg.Denom == "" { + return nil, errorsmod.Wrap(types.ErrInvalidDenom, "denom cannot be empty") + } + if msg.ClientId == "" { + return nil, errorsmod.Wrap(types.ErrInvalidClientID, "client_id cannot be empty") + } + if msg.Receiver == "" { + return nil, errorsmod.Wrap(types.ErrInvalidReceiver, "receiver cannot be empty") + } + if msg.Amount.IsNil() { + return nil, errorsmod.Wrap(types.ErrInvalidAmount, "amount cannot be nil") + } + if !msg.Amount.IsPositive() { + return nil, errorsmod.Wrapf(types.ErrInvalidAmount, "amount must be positive, got %s", msg.Amount) + } + + // Validate timeout is in the future (consistent with Solidity IFT) + blockTime := uint64(ctx.BlockTime().Unix()) + if msg.TimeoutTimestamp <= blockTime { + return nil, errorsmod.Wrapf(types.ErrInvalidTimeout, "timeout %d must be greater than block time %d", msg.TimeoutTimestamp, blockTime) + } + + sender, err := m.k.addressCodec.StringToBytes(msg.Signer) + if err != nil { + return nil, errorsmod.Wrapf(types.ErrInvalidSigner, "invalid sender address: %s", err) + } + + // Get bridge info + bridge, err := m.k.IFTBridgeStore.Get(ctx, collections.Join(msg.Denom, msg.ClientId)) + if err != nil { + return nil, errorsmod.Wrapf(types.ErrBridgeNotFound, "bridge for denom %s and client %s not found", msg.Denom, msg.ClientId) + } + + // Burn tokens from sender + if err := m.k.tokenFactoryKeeper.BurnFrom(ctx, msg.Denom, msg.Amount, sender); err != nil { + return nil, errorsmod.Wrapf(types.ErrBurnFailed, "failed to burn tokens: %s", err) + } + + counterpartyInfo, found := m.k.ibcClientV2Keeper.GetClientCounterparty(ctx, msg.ClientId) + if !found { + return nil, errorsmod.Wrapf(types.ErrInvalidClientID, "counterparty for client %s not found", msg.ClientId) + } + + // Construct mint call payload based on constructor type + var payload []byte + var encoding string + constructorType := types.ParseConstructorType(bridge.IftSendCallConstructor) + + switch constructorType { + case types.ConstructorSolana: + encoding = gmptypes.EncodingProtobuf + constructor, err := types.NewSolanaConstructor(bridge.IftSendCallConstructor, bridge.CounterpartyIftAddress, m.k.GetModuleAddress().String(), counterpartyInfo.ClientId) + if err != nil { + return nil, errorsmod.Wrapf(types.ErrConstructMintCallFailed, "failed to build solana constructor: %s", err) + } + receiver := strings.TrimSpace(msg.Receiver) + payload, err = constructor.ConstructMintCall(m.k.cdc, receiver, msg.Amount, "", "") + if err != nil { + return nil, errorsmod.Wrapf(types.ErrConstructMintCallFailed, "failed to construct mint call: %s", err) + } + + case types.ConstructorEVM: + var err error + payload, err = types.ConstructMintCall(m.k.cdc, msg.Receiver, msg.Amount, bridge.IftSendCallConstructor, "", "") + if err != nil { + return nil, errorsmod.Wrapf(types.ErrConstructMintCallFailed, "failed to construct mint call: %s", err) + } + + case types.ConstructorCosmos: + // For CosmosTx, we need to know the ICA address that will execute the message + accountID := gmptypes.NewAccountIdentifier(msg.ClientId, m.k.GetModuleAddress().String(), nil) + icaAddr, err := gmptypes.BuildAddressPredictable(&accountID) + if err != nil { + return nil, errorsmod.Wrapf(types.ErrConstructMintCallFailed, "failed to compute ICA address: %s", err) + } + icaAddress := icaAddr.String() + payload, err = types.ConstructMintCall(m.k.cdc, msg.Receiver, msg.Amount, bridge.IftSendCallConstructor, msg.Denom, icaAddress) + if err != nil { + return nil, errorsmod.Wrapf(types.ErrConstructMintCallFailed, "failed to construct mint call: %s", err) + } + + default: + return nil, errorsmod.Wrapf(types.ErrInvalidConstructorType, "unknown constructor type: %s", constructorType) + } + + // Send via ICS27-GMP + sendMsg := &gmptypes.MsgSendCall{ + Sender: m.k.GetModuleAddress().String(), + SourceClient: bridge.ClientId, + Receiver: bridge.CounterpartyIftAddress, + Salt: nil, + Payload: payload, + TimeoutTimestamp: msg.TimeoutTimestamp, + Memo: "", + Encoding: encoding, + } + + handler := m.k.msgRouter.Handler(sendMsg) + if handler == nil { + return nil, errorsmod.Wrap(types.ErrSendCallFailed, "no handler for MsgSendCall") + } + + res, err := handler(ctx, sendMsg) + if err != nil { + return nil, errorsmod.Wrapf(types.ErrSendCallFailed, "failed to send GMP call: %s", err) + } + + // Propagate events from the GMP handler (critical for relayer to detect send_packet) + ctx.EventManager().EmitEvents(res.GetEvents()) + + // Extract sequence from response - fail if we cannot get the sequence + // since callbacks need it to match pending transfers + if len(res.MsgResponses) == 0 { + return nil, errorsmod.Wrap(types.ErrSendCallFailed, "no response from GMP send call") + } + var sendResp gmptypes.MsgSendCallResponse + if err := sendResp.Unmarshal(res.MsgResponses[0].Value); err != nil { + return nil, errorsmod.Wrapf(types.ErrSendCallFailed, "failed to unmarshal GMP response: %s", err) + } + sequence := sendResp.Sequence + + // Store pending transfer + pending := types.PendingTransfer{ + Denom: msg.Denom, + ClientId: msg.ClientId, + Sequence: sequence, + Sender: msg.Signer, + Amount: msg.Amount, + } + + if err := m.k.SetPendingTransfer(ctx, msg.ClientId, sequence, pending); err != nil { + return nil, err + } + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeIFTTransferInitiated, + sdk.NewAttribute(types.AttributeKeyDenom, msg.Denom), + sdk.NewAttribute(types.AttributeKeyClientID, msg.ClientId), + sdk.NewAttribute(types.AttributeKeySequence, strconv.FormatUint(sequence, 10)), + sdk.NewAttribute(types.AttributeKeySender, msg.Signer), + sdk.NewAttribute(types.AttributeKeyReceiver, msg.Receiver), + sdk.NewAttribute(types.AttributeKeyAmount, msg.Amount.String()), + ), + ) + + m.k.Logger(ctx).Info("IFT transfer initiated", + "denom", msg.Denom, + "client_id", msg.ClientId, + "sequence", sequence, + "sender", msg.Signer, + "receiver", msg.Receiver, + "amount", msg.Amount.String()) + + return &types.MsgIFTTransferResponse{Sequence: sequence}, nil +} + +// IFTMint mints tokens in response to a cross-chain transfer +func (m msgServer) IFTMint(goCtx context.Context, msg *types.MsgIFTMint) (*types.MsgIFTMintResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + if msg.Denom == "" { + return nil, errorsmod.Wrap(types.ErrInvalidDenom, "denom cannot be empty") + } + if msg.Amount.IsNil() { + return nil, errorsmod.Wrap(types.ErrInvalidAmount, "amount cannot be nil") + } + if !msg.Amount.IsPositive() { + return nil, errorsmod.Wrapf(types.ErrInvalidAmount, "amount must be positive, got %s", msg.Amount) + } + + // Validate denom exists in token factory + if !m.k.tokenFactoryKeeper.HasDenom(ctx, msg.Denom) { + return nil, errorsmod.Wrapf(types.ErrDenomNotFound, "denom %s not found in token factory", msg.Denom) + } + + signer, err := m.k.addressCodec.StringToBytes(msg.Signer) + if err != nil { + return nil, errorsmod.Wrapf(types.ErrInvalidSigner, "invalid signer address: %s", err) + } + + receiver, err := m.k.addressCodec.StringToBytes(msg.Receiver) + if err != nil { + return nil, errorsmod.Wrapf(types.ErrInvalidReceiver, "invalid receiver address: %s", err) + } + + // Get the ICS27-GMP account for the signer (reverse lookup) + ics27Account, err := m.k.gmpKeeper.GetAccount(ctx, signer) + if err != nil { + return nil, errorsmod.Wrapf(types.ErrUnauthorizedSender, "failed to get ICS27 account: %s", err) + } + + accountID := ics27Account.AccountId + + // Get the bridge for this denom and client + bridge, err := m.k.IFTBridgeStore.Get(ctx, collections.Join(msg.Denom, accountID.ClientId)) + if err != nil { + return nil, errorsmod.Wrapf(types.ErrBridgeNotFound, "bridge for denom %s and client %s not found", msg.Denom, accountID.ClientId) + } + + // Validate sender is the counterparty IFT address + if bridge.CounterpartyIftAddress != accountID.Sender { + return nil, errorsmod.Wrapf(types.ErrUnauthorizedSender, "expected sender %s, got %s", bridge.CounterpartyIftAddress, accountID.Sender) + } + + // Validate no salt was used (prevents address spoofing) + if len(accountID.Salt) > 0 { + return nil, errorsmod.Wrap(types.ErrUnexpectedSalt, "IFT does not allow salted ICS27 accounts") + } + + // Mint tokens to receiver + if err := m.k.tokenFactoryKeeper.MintTo(ctx, msg.Denom, msg.Amount, receiver); err != nil { + return nil, errorsmod.Wrapf(types.ErrMintFailed, "failed to mint tokens: %s", err) + } + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeIFTMintReceived, + sdk.NewAttribute(types.AttributeKeyDenom, msg.Denom), + sdk.NewAttribute(types.AttributeKeyClientID, accountID.ClientId), + sdk.NewAttribute(types.AttributeKeyReceiver, msg.Receiver), + sdk.NewAttribute(types.AttributeKeyAmount, msg.Amount.String()), + ), + ) + + m.k.Logger(ctx).Info("IFT mint received", + "denom", msg.Denom, + "client_id", accountID.ClientId, + "receiver", msg.Receiver, + "amount", msg.Amount.String()) + + return &types.MsgIFTMintResponse{}, nil +} + +// UpdateParams updates the module parameters +func (m msgServer) UpdateParams(goCtx context.Context, msg *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + if m.k.GetAuthority() != msg.Authority { + return nil, errorsmod.Wrapf(types.ErrUnauthorized, "expected %s, got %s", m.k.GetAuthority(), msg.Authority) + } + + // Validate new authority address format + if _, err := m.k.addressCodec.StringToBytes(msg.Params.Authority); err != nil { + return nil, errorsmod.Wrapf(types.ErrInvalidSigner, "invalid new authority address: %s", err) + } + + if err := m.k.ParamsStore.Set(ctx, msg.Params); err != nil { + return nil, err + } + + m.k.Logger(ctx).Info("IFT params updated", "authority", msg.Params.Authority) + + return &types.MsgUpdateParamsResponse{}, nil +} diff --git a/prototypes/x/ift/keeper/msg_server_test.go b/prototypes/x/ift/keeper/msg_server_test.go new file mode 100644 index 00000000000..7d99569e286 --- /dev/null +++ b/prototypes/x/ift/keeper/msg_server_test.go @@ -0,0 +1,1147 @@ +package keeper_test + +import ( + "math/big" + "testing" + "time" + + "github.com/cosmos/sandbox-ledger/app" + "github.com/cosmos/sandbox-ledger/x/ift/keeper" + "github.com/cosmos/sandbox-ledger/x/ift/types" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/stretchr/testify/require" + + "cosmossdk.io/collections" + "cosmossdk.io/math" + + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + + gmptypes "github.com/cosmos/ibc-go/v11/modules/apps/27-gmp/types" + channelv2types "github.com/cosmos/ibc-go/v11/modules/core/04-channel/v2/types" +) + +// TestMsgServer_RegisterIFTBridge tests the RegisterIFTBridge message handler. +func TestMsgServer_RegisterIFTBridge(t *testing.T) { + var ( + signer string + denom string + clientID string + counterpartyAddress string + ) + + cases := []struct { + name string + err error + malleate func(wfapp *app.SandboxApp, ctx sdk.Context) + }{ + { + name: "success with evm constructor", + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) {}, + }, + { + name: "success with cosmos constructor", + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { + // Use different denom to avoid duplicate + denom = testDenom2 + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, denom) + }, + }, + { + name: "failure: unauthorized - not authority", + err: types.ErrUnauthorized, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { + signer = userAddrA + }, + }, + { + name: "failure: denom not found in token factory", + err: types.ErrDenomNotFound, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { + denom = "nonexistent" + }, + }, + { + name: "success: bridge update (override existing)", + err: nil, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { + // Pre-register the bridge with different counterparty address + bridge := types.IFTBridge{ + ClientId: clientID, + CounterpartyIftAddress: "0x1111111111111111111111111111111111111111", + IftSendCallConstructor: types.ConstructorEVM, + } + err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(denom, clientID), bridge) + require.NoError(t, err) + }, + }, + { + name: "failure: invalid constructor type", + err: types.ErrInvalidConstructorType, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { + // Will be set via message field + }, + }, + { + name: "failure: IBC client not found", + err: types.ErrInvalidClientID, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { + clientID = "nonexistent-client" + }, + }, + { + name: "failure: empty counterparty address", + err: types.ErrInvalidReceiver, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { + counterpartyAddress = "" + }, + }, + { + name: "failure: invalid EVM counterparty address format", + err: types.ErrInvalidReceiver, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { + counterpartyAddress = "not-a-valid-evm-address" + }, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) + + // Reset defaults + signer = authtypes.NewModuleAddress(govtypes.ModuleName).String() + denom = testDenom + clientID = createIBCClient(t, ctx, wfapp) + counterpartyAddress = remoteIFTAddrA + + // Create token factory denom + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + + tc.malleate(wfapp, ctx) + + constructorType := types.ConstructorEVM + if tc.name == "success with cosmos constructor" { + constructorType = types.ConstructorCosmos + } + if tc.name == "failure: invalid constructor type" { + constructorType = "invalid" + } + + msg := &types.MsgRegisterIFTBridge{ + Signer: signer, + Denom: denom, + ClientId: clientID, + CounterpartyIftAddress: counterpartyAddress, + IftSendCallConstructor: constructorType, + } + + _, err := ms.RegisterIFTBridge(ctx, msg) + + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + return + } + + require.NoError(t, err) + + // Verify bridge was stored + bridge, err := wfapp.IFTKeeper.IFTBridgeStore.Get(ctx, collections.Join(denom, clientID)) + require.NoError(t, err) + require.Equal(t, clientID, bridge.ClientId) + require.Equal(t, counterpartyAddress, bridge.CounterpartyIftAddress) + require.Equal(t, constructorType, bridge.IftSendCallConstructor) + }) + } +} + +// TestMsgServer_RemoveIFTBridge tests the RemoveIFTBridge message handler. +func TestMsgServer_RemoveIFTBridge(t *testing.T) { + var ( + signer string + denom string + clientID string + ) + + cases := []struct { + name string + err error + malleate func(wfapp *app.SandboxApp, ctx sdk.Context) + }{ + { + name: "success", + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) {}, + }, + { + name: "failure: unauthorized", + err: types.ErrUnauthorized, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { + signer = userAddrA + }, + }, + { + name: "failure: bridge not found", + err: types.ErrBridgeNotFound, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { + // Remove the bridge before the test + err := wfapp.IFTKeeper.IFTBridgeStore.Remove(ctx, collections.Join(denom, clientID)) + require.NoError(t, err) + }, + }, + { + name: "failure: has pending transfers", + err: types.ErrBridgeHasPendingTransfers, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { + // Create a pending transfer for this bridge + pending := types.PendingTransfer{ + Denom: denom, + ClientId: clientID, + Sequence: 1, + Sender: userAddrA, + Amount: math.NewInt(1000000), + } + err := wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, 1, pending) + require.NoError(t, err) + }, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) + + // Reset defaults + signer = authtypes.NewModuleAddress(govtypes.ModuleName).String() + denom = testDenom + clientID = createIBCClient(t, ctx, wfapp) + + // Create token factory denom + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + + // Pre-register bridge + bridge := types.IFTBridge{ + ClientId: clientID, + CounterpartyIftAddress: remoteIFTAddrA, + IftSendCallConstructor: types.ConstructorEVM, + } + err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(denom, clientID), bridge) + require.NoError(t, err) + + tc.malleate(wfapp, ctx) + + msg := &types.MsgRemoveIFTBridge{ + Signer: signer, + Denom: denom, + ClientId: clientID, + } + + _, err = ms.RemoveIFTBridge(ctx, msg) + + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + return + } + + require.NoError(t, err) + + // Verify bridge was removed + exists, err := wfapp.IFTKeeper.IFTBridgeStore.Has(ctx, collections.Join(denom, clientID)) + require.NoError(t, err) + require.False(t, exists) + }) + } +} + +// TestMsgServer_IFTTransfer tests the IFTTransfer message handler. +func TestMsgServer_IFTTransfer(t *testing.T) { + var ( + signer string + denom string + clientID string + receiver string + amount math.Int + ) + + cases := []struct { + name string + err error + malleate func(wfapp *app.SandboxApp, ctx sdk.Context) + }{ + // Note: success case requires full GMP infrastructure which is tested in e2e tests + { + name: "failure: invalid denom - empty", + err: types.ErrInvalidDenom, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { + denom = "" + }, + }, + { + name: "failure: invalid client id - empty", + err: types.ErrInvalidClientID, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { + clientID = "" + }, + }, + { + name: "failure: invalid receiver - empty", + err: types.ErrInvalidReceiver, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { + receiver = "" + }, + }, + { + name: "failure: invalid amount - zero", + err: types.ErrInvalidAmount, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { + amount = math.ZeroInt() + }, + }, + { + name: "failure: invalid sender address", + err: types.ErrInvalidSigner, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { + signer = invalidAddr + }, + }, + { + name: "failure: bridge not found", + err: types.ErrBridgeNotFound, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { + // Remove bridge + err := wfapp.IFTKeeper.IFTBridgeStore.Remove(ctx, collections.Join(denom, clientID)) + require.NoError(t, err) + }, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) + + // Reset defaults + signer = userAddrA + denom = testDenom + receiver = remoteIFTAddrA + amount = math.NewInt(1000000) + + // Setup + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + clientID = createIBCClient(t, ctx, wfapp) + + // Register bridge + bridge := types.IFTBridge{ + ClientId: clientID, + CounterpartyIftAddress: remoteIFTAddrB, + IftSendCallConstructor: types.ConstructorEVM, + } + err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(denom, clientID), bridge) + require.NoError(t, err) + + // Mint tokens to sender + senderAddr := sdk.MustAccAddressFromBech32(userAddrA) + mintTokens(t, ctx, wfapp, testDenom, math.NewInt(2000000), senderAddr) + + tc.malleate(wfapp, ctx) + + timeout := uint64(time.Now().Add(30 * time.Second).Unix()) + msg := &types.MsgIFTTransfer{ + Signer: signer, + Denom: denom, + ClientId: clientID, + Receiver: receiver, + Amount: amount, + TimeoutTimestamp: timeout, + } + + resp, err := ms.IFTTransfer(ctx, msg) + + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + return + } + + require.NoError(t, err) + require.NotNil(t, resp) + require.Positive(t, resp.Sequence) + + // Verify pending transfer was stored + pending, err := wfapp.IFTKeeper.PendingTransferStore.Get(ctx, collections.Join(clientID, resp.Sequence)) + require.NoError(t, err) + require.Equal(t, denom, pending.Denom) + require.Equal(t, clientID, pending.ClientId) + require.Equal(t, resp.Sequence, pending.Sequence) + require.Equal(t, signer, pending.Sender) + require.True(t, amount.Equal(pending.Amount)) + }) + } +} + +// TestMsgServer_UpdateParams tests the UpdateParams message handler. +func TestMsgServer_UpdateParams(t *testing.T) { + cases := []struct { + name string + authority string + newAuthority string + err error + }{ + { + name: "success", + authority: authtypes.NewModuleAddress(govtypes.ModuleName).String(), + newAuthority: userAddrB, + }, + { + name: "failure: unauthorized", + authority: userAddrA, + newAuthority: userAddrB, + err: types.ErrUnauthorized, + }, + { + name: "failure: invalid new authority format", + authority: authtypes.NewModuleAddress(govtypes.ModuleName).String(), + newAuthority: "invalid-address", + err: types.ErrInvalidSigner, + }, + { + name: "failure: empty new authority", + authority: authtypes.NewModuleAddress(govtypes.ModuleName).String(), + newAuthority: "", + err: types.ErrInvalidSigner, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) + + msg := &types.MsgUpdateParams{ + Authority: tc.authority, + Params: types.Params{ + Authority: tc.newAuthority, + }, + } + + _, err := ms.UpdateParams(ctx, msg) + + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + return + } + + require.NoError(t, err) + + // Verify params were updated + params, err := wfapp.IFTKeeper.ParamsStore.Get(ctx) + require.NoError(t, err) + require.Equal(t, tc.newAuthority, params.Authority) + }) + } +} + +// TestMsgServer_IFTMint_ValidationErrors tests IFTMint validation errors. +func TestMsgServer_IFTMint_ValidationErrors(t *testing.T) { + cases := []struct { + name string + denom string + amount math.Int + err error + }{ + { + name: "failure: invalid denom - empty", + denom: "", + amount: math.NewInt(1000), + err: types.ErrInvalidDenom, + }, + { + name: "failure: invalid amount - zero", + denom: testDenom, + amount: math.ZeroInt(), + err: types.ErrInvalidAmount, + }, + { + name: "failure: invalid amount - negative", + denom: testDenom, + amount: math.NewInt(-100), + err: types.ErrInvalidAmount, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) + + msg := &types.MsgIFTMint{ + Signer: userAddrA, + Denom: tc.denom, + Receiver: userAddrB, + Amount: tc.amount, + } + + _, err := ms.IFTMint(ctx, msg) + require.ErrorIs(t, err, tc.err) + }) + } +} + +// TestMsgServer_IFTMint_InvalidSigner tests invalid signer addresses +func TestMsgServer_IFTMint_InvalidSigner(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) + + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + + msg := &types.MsgIFTMint{ + Signer: invalidAddr, + Denom: testDenom, + Receiver: userAddrB, + Amount: math.NewInt(1000), + } + + _, err := ms.IFTMint(ctx, msg) + require.ErrorIs(t, err, types.ErrInvalidSigner) +} + +// TestMsgServer_IFTMint_InvalidReceiver tests invalid receiver addresses +func TestMsgServer_IFTMint_InvalidReceiver(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) + + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + + msg := &types.MsgIFTMint{ + Signer: userAddrA, + Denom: testDenom, + Receiver: invalidAddr, + Amount: math.NewInt(1000), + } + + _, err := ms.IFTMint(ctx, msg) + require.ErrorIs(t, err, types.ErrInvalidReceiver) +} + +// TestMsgServer_IFTMint_UnauthorizedSender tests that non-ICS27 accounts cannot mint +func TestMsgServer_IFTMint_UnauthorizedSender(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) + + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + + // Use a regular account (not an ICS27 account) + msg := &types.MsgIFTMint{ + Signer: userAddrA, // Regular account, not ICS27 + Denom: testDenom, + Receiver: userAddrB, + Amount: math.NewInt(1000), + } + + _, err := ms.IFTMint(ctx, msg) + // Should fail because userAddrA is not an ICS27 account + require.ErrorIs(t, err, types.ErrUnauthorizedSender) +} + +// TestMsgServer_IFTMint_WrongCounterpartySender tests that GMP ICA with wrong sender cannot mint +func TestMsgServer_IFTMint_WrongCounterpartySender(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) + + clientID := createIBCClient(t, ctx, wfapp) + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + + // Register bridge with counterparty address remoteIFTAddrA + signer := authtypes.NewModuleAddress(govtypes.ModuleName).String() + _, err := ms.RegisterIFTBridge(ctx, &types.MsgRegisterIFTBridge{ + Signer: signer, + Denom: testDenom, + ClientId: clientID, + CounterpartyIftAddress: remoteIFTAddrA, + IftSendCallConstructor: types.ConstructorEVM, + }) + require.NoError(t, err) + + // Create a GMP ICA with WRONG sender address (remoteIFTAddrB instead of remoteIFTAddrA) + wrongSenderAccountID := gmptypes.NewAccountIdentifier(clientID, remoteIFTAddrB, nil) + icaAddr, err := gmptypes.BuildAddressPredictable(&wrongSenderAccountID) + require.NoError(t, err) + + // Register the ICA in GMP keeper + ics27Account := gmptypes.NewICS27Account(icaAddr.String(), &wrongSenderAccountID) + err = wfapp.GMPKeeper.AccountsByAddress.Set(ctx, icaAddr, ics27Account) + require.NoError(t, err) + + // Try to mint using the ICA with wrong sender + msg := &types.MsgIFTMint{ + Signer: icaAddr.String(), + Denom: testDenom, + Receiver: userAddrB, + Amount: math.NewInt(1000), + } + + _, err = ms.IFTMint(ctx, msg) + // Should fail because ICA sender doesn't match bridge's CounterpartyIftAddress + require.ErrorIs(t, err, types.ErrUnauthorizedSender) +} + +// TestMsgServer_IFTMint_UnexpectedSalt tests that ICS27 accounts with salt cannot mint +func TestMsgServer_IFTMint_UnexpectedSalt(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) + + clientID := createIBCClient(t, ctx, wfapp) + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + + // Register bridge + signer := authtypes.NewModuleAddress(govtypes.ModuleName).String() + _, err := ms.RegisterIFTBridge(ctx, &types.MsgRegisterIFTBridge{ + Signer: signer, + Denom: testDenom, + ClientId: clientID, + CounterpartyIftAddress: remoteIFTAddrA, + IftSendCallConstructor: types.ConstructorEVM, + }) + require.NoError(t, err) + + // Create a GMP ICA with salt (not allowed for IFT) + salt := []byte("unexpected-salt") + accountIDWithSalt := gmptypes.NewAccountIdentifier(clientID, remoteIFTAddrA, salt) + icaAddr, err := gmptypes.BuildAddressPredictable(&accountIDWithSalt) + require.NoError(t, err) + + // Register the ICA in GMP keeper + ics27Account := gmptypes.NewICS27Account(icaAddr.String(), &accountIDWithSalt) + err = wfapp.GMPKeeper.AccountsByAddress.Set(ctx, icaAddr, ics27Account) + require.NoError(t, err) + + // Try to mint using the ICA with salt + msg := &types.MsgIFTMint{ + Signer: icaAddr.String(), + Denom: testDenom, + Receiver: userAddrB, + Amount: math.NewInt(1000), + } + + _, err = ms.IFTMint(ctx, msg) + require.ErrorIs(t, err, types.ErrUnexpectedSalt) +} + +// TestMsgServer_RegisterIFTBridge_MultipleBridges tests registering multiple bridges for the same denom +func TestMsgServer_RegisterIFTBridge_MultipleBridges(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) + + signer := authtypes.NewModuleAddress(govtypes.ModuleName).String() + denom := testDenom + + // Create token factory denom + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, denom) + + // Create two different IBC clients + clientID1 := createIBCClient(t, ctx, wfapp) + clientID2 := createIBCClient(t, ctx, wfapp) + + // Register first bridge + msg1 := &types.MsgRegisterIFTBridge{ + Signer: signer, + Denom: denom, + ClientId: clientID1, + CounterpartyIftAddress: remoteIFTAddrA, + IftSendCallConstructor: types.ConstructorEVM, + } + _, err := ms.RegisterIFTBridge(ctx, msg1) + require.NoError(t, err) + + // Register second bridge for same denom but different client + msg2 := &types.MsgRegisterIFTBridge{ + Signer: signer, + Denom: denom, + ClientId: clientID2, + CounterpartyIftAddress: remoteIFTAddrB, + IftSendCallConstructor: types.ConstructorCosmos, + } + _, err = ms.RegisterIFTBridge(ctx, msg2) + require.NoError(t, err) + + // Verify both bridges exist + bridge1, err := wfapp.IFTKeeper.IFTBridgeStore.Get(ctx, collections.Join(denom, clientID1)) + require.NoError(t, err) + require.Equal(t, remoteIFTAddrA, bridge1.CounterpartyIftAddress) + + bridge2, err := wfapp.IFTKeeper.IFTBridgeStore.Get(ctx, collections.Join(denom, clientID2)) + require.NoError(t, err) + require.Equal(t, remoteIFTAddrB, bridge2.CounterpartyIftAddress) +} + +// TestMsgServer_IFTTransfer_InsufficientBalance tests transfer with insufficient balance +func TestMsgServer_IFTTransfer_InsufficientBalance(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) + + signer := userAddrA + denom := testDenom + receiver := remoteIFTAddrA + + // Setup + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + clientID := createIBCClient(t, ctx, wfapp) + + // Register bridge + bridge := types.IFTBridge{ + ClientId: clientID, + CounterpartyIftAddress: remoteIFTAddrB, + IftSendCallConstructor: types.ConstructorEVM, + } + err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(denom, clientID), bridge) + require.NoError(t, err) + + // Mint only 100 tokens + senderAddr := sdk.MustAccAddressFromBech32(signer) + mintTokens(t, ctx, wfapp, testDenom, math.NewInt(100), senderAddr) + + // Try to transfer 1000 tokens (more than balance) + timeout := uint64(time.Now().Add(30 * time.Second).Unix()) + msg := &types.MsgIFTTransfer{ + Signer: signer, + Denom: denom, + ClientId: clientID, + Receiver: receiver, + Amount: math.NewInt(1000), + TimeoutTimestamp: timeout, + } + + _, err = ms.IFTTransfer(ctx, msg) + // Should fail due to insufficient funds + require.Error(t, err) + require.ErrorIs(t, err, types.ErrBurnFailed) +} + +// TestMsgServer_IFTMint_Success tests successful token minting via GMP ICA +func TestMsgServer_IFTMint_Success(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) + + clientID := createIBCClient(t, ctx, wfapp) + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + + // Register bridge with specific counterparty address + authority := authtypes.NewModuleAddress(govtypes.ModuleName).String() + _, err := ms.RegisterIFTBridge(ctx, &types.MsgRegisterIFTBridge{ + Signer: authority, + Denom: testDenom, + ClientId: clientID, + CounterpartyIftAddress: remoteIFTAddrA, + IftSendCallConstructor: types.ConstructorEVM, + }) + require.NoError(t, err) + + // Create a valid GMP ICA with matching counterparty address (no salt) + accountID := gmptypes.NewAccountIdentifier(clientID, remoteIFTAddrA, nil) + icaAddr, err := gmptypes.BuildAddressPredictable(&accountID) + require.NoError(t, err) + + // Register the ICA in GMP keeper + ics27Account := gmptypes.NewICS27Account(icaAddr.String(), &accountID) + err = wfapp.GMPKeeper.AccountsByAddress.Set(ctx, icaAddr, ics27Account) + require.NoError(t, err) + + // Mint tokens via IFTMint + mintAmount := math.NewInt(1000000) + receiver, err := sdk.AccAddressFromBech32(userAddrB) + require.NoError(t, err) + + msg := &types.MsgIFTMint{ + Signer: icaAddr.String(), + Denom: testDenom, + Receiver: userAddrB, + Amount: mintAmount, + } + + _, err = ms.IFTMint(ctx, msg) + require.NoError(t, err) + + // Verify tokens were minted to receiver + balance := wfapp.BankKeeper.GetBalance(ctx, receiver, testDenom) + require.True(t, balance.Amount.Equal(mintAmount), "expected %s, got %s", mintAmount, balance.Amount) + + // Verify event was emitted + events := ctx.EventManager().Events() + var foundMintEvent bool + for _, event := range events { + if event.Type == types.EventTypeIFTMintReceived { + foundMintEvent = true + break + } + } + require.True(t, foundMintEvent, "IFT mint received event should be emitted") +} + +// TestMsgServer_IFTMint_BridgeNotFound tests that IFTMint fails when no bridge exists +func TestMsgServer_IFTMint_BridgeNotFound(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) + + clientID := createIBCClient(t, ctx, wfapp) + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + + // Create a GMP ICA but do NOT register bridge + accountID := gmptypes.NewAccountIdentifier(clientID, remoteIFTAddrA, nil) + icaAddr, err := gmptypes.BuildAddressPredictable(&accountID) + require.NoError(t, err) + + ics27Account := gmptypes.NewICS27Account(icaAddr.String(), &accountID) + err = wfapp.GMPKeeper.AccountsByAddress.Set(ctx, icaAddr, ics27Account) + require.NoError(t, err) + + msg := &types.MsgIFTMint{ + Signer: icaAddr.String(), + Denom: testDenom, + Receiver: userAddrB, + Amount: math.NewInt(1000), + } + + _, err = ms.IFTMint(ctx, msg) + require.ErrorIs(t, err, types.ErrBridgeNotFound) +} + +// TestMsgServer_IFTTransfer_EventPropagation tests that send_packet events from +// the GMP handler are properly propagated to the context's EventManager. +// This is critical for the relayer to detect outgoing packets. +func TestMsgServer_IFTTransfer_EventPropagation(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) + + signer := userAddrA + denom := testDenom + receiver := remoteIFTAddrA + + // Setup + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + clientID := createIBCClient(t, ctx, wfapp) + + // Register bridge + bridge := types.IFTBridge{ + ClientId: clientID, + CounterpartyIftAddress: remoteIFTAddrB, + IftSendCallConstructor: types.ConstructorEVM, + } + err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(denom, clientID), bridge) + require.NoError(t, err) + + // Mint tokens to sender + senderAddr := sdk.MustAccAddressFromBech32(signer) + mintTokens(t, ctx, wfapp, testDenom, math.NewInt(2000000), senderAddr) + + timeout := uint64(time.Now().Add(30 * time.Second).Unix()) + msg := &types.MsgIFTTransfer{ + Signer: signer, + Denom: denom, + ClientId: clientID, + Receiver: receiver, + Amount: math.NewInt(1000000), + TimeoutTimestamp: timeout, + } + + resp, err := ms.IFTTransfer(ctx, msg) + require.NoError(t, err) + require.NotNil(t, resp) + require.Positive(t, resp.Sequence) + + // Verify that send_packet event is present with encoded_packet_hex attribute + // This is what the relayer uses to detect outgoing packets + events := ctx.EventManager().Events() + var foundSendPacket bool + var foundEncodedPacketHex bool + + for _, event := range events { + if event.Type == channelv2types.EventTypeSendPacket { + foundSendPacket = true + for _, attr := range event.Attributes { + if attr.Key == channelv2types.AttributeKeyEncodedPacketHex { + foundEncodedPacketHex = true + require.NotEmpty(t, attr.Value, "encoded_packet_hex should not be empty") + break + } + } + break + } + } + + require.True(t, foundSendPacket, "send_packet event should be emitted") + require.True(t, foundEncodedPacketHex, "send_packet event should have encoded_packet_hex attribute") +} + +// TestConstructMintCall_EVM tests the EVM mint call constructor +func TestConstructMintCall_EVM(t *testing.T) { + wfapp, _ := setupIntegrationApp(t) + + evmReceiver := "0x1234567890abcdef1234567890abcdef12345678" + amount := math.NewInt(1000000) + + payload, err := types.ConstructMintCall(wfapp.AppCodec(), evmReceiver, amount, types.ConstructorEVM, "", "") + require.NoError(t, err) + require.NotEmpty(t, payload) + + // Verify function selector + expectedSelector := crypto.Keccak256([]byte("iftMint(address,uint256)"))[:4] + require.Equal(t, expectedSelector, payload[:4], "function selector mismatch") + + // Verify ABI-encoded address (32 bytes: 12 zero bytes + 20 address bytes) + addressBytes := payload[4:36] + require.Equal(t, make([]byte, 12), addressBytes[:12], "address should be left-padded with zeros") + expectedAddr := common.HexToAddress(evmReceiver) + require.Equal(t, expectedAddr.Bytes(), addressBytes[12:], "address should match") + + // Verify ABI-encoded amount (32 bytes: big-endian uint256) + amountBytes := payload[36:68] + decodedAmount := new(big.Int).SetBytes(amountBytes) + require.Equal(t, amount.BigInt().String(), decodedAmount.String(), "amount should match") +} + +// TestConstructMintCall_CosmosTx tests the CosmosTx mint call constructor +func TestConstructMintCall_CosmosTx(t *testing.T) { + wfapp, _ := setupIntegrationApp(t) + + cosmosReceiver := userAddrB + amount := math.NewInt(1000000) + icaAddress := userAddrA + + payload, err := types.ConstructMintCall(wfapp.AppCodec(), cosmosReceiver, amount, types.ConstructorCosmos, testDenom, icaAddress) + require.NoError(t, err) + require.NotEmpty(t, payload) + + // Verify we can decode the CosmosTx + var cosmosTx gmptypes.CosmosTx + err = cosmosTx.Unmarshal(payload) + require.NoError(t, err, "should be valid CosmosTx protobuf") + require.Len(t, cosmosTx.Messages, 1, "CosmosTx should contain exactly one message") + + // Verify the message is a MsgIFTMint + var mintMsg types.MsgIFTMint + err = wfapp.AppCodec().Unmarshal(cosmosTx.Messages[0].Value, &mintMsg) + require.NoError(t, err, "should be valid MsgIFTMint") + require.Equal(t, icaAddress, mintMsg.Signer) + require.Equal(t, testDenom, mintMsg.Denom) + require.Equal(t, cosmosReceiver, mintMsg.Receiver) + require.True(t, amount.Equal(mintMsg.Amount)) +} + +// TestConstructMintCall_InvalidConstructor tests invalid constructor type +func TestConstructMintCall_InvalidConstructor(t *testing.T) { + wfapp, _ := setupIntegrationApp(t) + + _, err := types.ConstructMintCall(wfapp.AppCodec(), userAddrB, math.NewInt(1000), "invalid", testDenom, userAddrA) + require.Error(t, err) + require.Contains(t, err.Error(), "invalid constructor type") +} + +// TestMsgServer_RegisterIFTBridge_InvalidClientID tests that registering a bridge with empty client ID fails +func TestMsgServer_RegisterIFTBridge_InvalidClientID(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) + + signer := authtypes.NewModuleAddress(govtypes.ModuleName).String() + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + + msg := &types.MsgRegisterIFTBridge{ + Signer: signer, + Denom: testDenom, + ClientId: "", + CounterpartyIftAddress: remoteIFTAddrA, + IftSendCallConstructor: types.ConstructorEVM, + } + + _, err := ms.RegisterIFTBridge(ctx, msg) + require.ErrorIs(t, err, types.ErrInvalidClientID) +} + +// TestMsgServer_IFTMint_DenomNotInTokenFactory tests that IFTMint fails when denom doesn't exist in token factory +func TestMsgServer_IFTMint_DenomNotInTokenFactory(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) + + clientID := createIBCClient(t, ctx, wfapp) + nonExistentDenom := "nonexistent" + + // Register bridge directly (bypassing RegisterIFTBridge validation) + bridge := types.IFTBridge{ + ClientId: clientID, + CounterpartyIftAddress: remoteIFTAddrA, + IftSendCallConstructor: types.ConstructorEVM, + } + err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(nonExistentDenom, clientID), bridge) + require.NoError(t, err) + + // Create GMP ICA + accountID := gmptypes.NewAccountIdentifier(clientID, remoteIFTAddrA, nil) + icaAddr, err := gmptypes.BuildAddressPredictable(&accountID) + require.NoError(t, err) + + ics27Account := gmptypes.NewICS27Account(icaAddr.String(), &accountID) + err = wfapp.GMPKeeper.AccountsByAddress.Set(ctx, icaAddr, ics27Account) + require.NoError(t, err) + + msg := &types.MsgIFTMint{ + Signer: icaAddr.String(), + Denom: nonExistentDenom, + Receiver: userAddrB, + Amount: math.NewInt(1000), + } + + _, err = ms.IFTMint(ctx, msg) + require.ErrorIs(t, err, types.ErrDenomNotFound) +} + +// TestMsgServer_RemoveIFTBridge_EmptyDenom tests that removing bridge with empty denom fails +func TestMsgServer_RemoveIFTBridge_EmptyDenom(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) + + signer := authtypes.NewModuleAddress(govtypes.ModuleName).String() + clientID := createIBCClient(t, ctx, wfapp) + + msg := &types.MsgRemoveIFTBridge{ + Signer: signer, + Denom: "", + ClientId: clientID, + } + + _, err := ms.RemoveIFTBridge(ctx, msg) + require.ErrorIs(t, err, types.ErrBridgeNotFound) +} + +// TestMsgServer_IFTTransfer_SolanaEncoding tests that Solana transfers use protobuf encoding +func TestMsgServer_IFTTransfer_SolanaEncoding(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) + + signer := userAddrA + denom := testDenom + receiver := solanaReceiverAddr + + // Setup + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + clientID := createIBCClient(t, ctx, wfapp) + + // Register Solana bridge with JSON constructor + solanaConstructor := `{"solana":{"gmp_program_id":"` + solanaGMPProgramID + `","mint_pubkey":"` + solanaMintPubkey + `"}}` + bridge := types.IFTBridge{ + ClientId: clientID, + CounterpartyIftAddress: solanaIFTProgramID, + IftSendCallConstructor: solanaConstructor, + } + err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(denom, clientID), bridge) + require.NoError(t, err) + + // Mint tokens to sender + senderAddr := sdk.MustAccAddressFromBech32(signer) + mintTokens(t, ctx, wfapp, testDenom, math.NewInt(2000000), senderAddr) + + timeout := uint64(time.Now().Add(30 * time.Second).Unix()) + msg := &types.MsgIFTTransfer{ + Signer: signer, + Denom: denom, + ClientId: clientID, + Receiver: receiver, + Amount: math.NewInt(1000000), + TimeoutTimestamp: timeout, + } + + resp, err := ms.IFTTransfer(ctx, msg) + require.NoError(t, err) + require.NotNil(t, resp) + require.Positive(t, resp.Sequence) + + // Verify send_packet event exists (encoding is used internally by GMP) + events := ctx.EventManager().Events() + var foundSendPacket bool + for _, event := range events { + if event.Type == channelv2types.EventTypeSendPacket { + foundSendPacket = true + break + } + } + require.True(t, foundSendPacket, "send_packet event should be emitted for Solana transfer") +} + +// TestMsgServer_IFTTransfer_TimeoutValidation tests timeout validation +func TestMsgServer_IFTTransfer_TimeoutValidation(t *testing.T) { + cases := []struct { + name string + timeoutOffset time.Duration + expectErr bool + expectedErrType error + }{ + { + name: "timeout in past", + timeoutOffset: -1 * time.Hour, + expectErr: true, + expectedErrType: types.ErrInvalidTimeout, + }, + { + name: "timeout equals block time", + timeoutOffset: 0, + expectErr: true, + expectedErrType: types.ErrInvalidTimeout, + }, + { + name: "timeout 1 second in future", + timeoutOffset: 1 * time.Second, + expectErr: false, + }, + { + name: "timeout 15 minutes in future", + timeoutOffset: 15 * time.Minute, + expectErr: false, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) + + signer := userAddrA + denom := testDenom + receiver := remoteIFTAddrA + + createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) + clientID := createIBCClient(t, ctx, wfapp) + + bridge := types.IFTBridge{ + ClientId: clientID, + CounterpartyIftAddress: remoteIFTAddrB, + IftSendCallConstructor: types.ConstructorEVM, + } + err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(denom, clientID), bridge) + require.NoError(t, err) + + senderAddr := sdk.MustAccAddressFromBech32(signer) + mintTokens(t, ctx, wfapp, testDenom, math.NewInt(2000000), senderAddr) + + timeout := uint64(ctx.BlockTime().Add(tc.timeoutOffset).Unix()) + msg := &types.MsgIFTTransfer{ + Signer: signer, + Denom: denom, + ClientId: clientID, + Receiver: receiver, + Amount: math.NewInt(1000000), + TimeoutTimestamp: timeout, + } + + _, err = ms.IFTTransfer(ctx, msg) + + if tc.expectErr { + require.Error(t, err) + if tc.expectedErrType != nil { + require.ErrorIs(t, err, tc.expectedErrType) + } + } else { + require.NoError(t, err) + } + }) + } +} diff --git a/prototypes/x/ift/keeper/query.go b/prototypes/x/ift/keeper/query.go new file mode 100644 index 00000000000..752ab84bd9f --- /dev/null +++ b/prototypes/x/ift/keeper/query.go @@ -0,0 +1,80 @@ +package keeper + +import ( + "context" + + "github.com/cosmos/sandbox-ledger/x/ift/types" + + "cosmossdk.io/collections" +) + +var _ types.QueryServer = Keeper{} + +// IFTBridge queries the IFT bridge information for a specific denom and client_id +func (k Keeper) IFTBridge(ctx context.Context, req *types.QueryIFTBridgeRequest) (*types.QueryIFTBridgeResponse, error) { + bridge, err := k.IFTBridgeStore.Get(ctx, collections.Join(req.Denom, req.ClientId)) + if err != nil { + return nil, err + } + + return &types.QueryIFTBridgeResponse{Bridge: bridge}, nil +} + +// IFTBridges queries all IFT bridges +func (k Keeper) IFTBridges(ctx context.Context, _ *types.QueryIFTBridgesRequest) (*types.QueryIFTBridgesResponse, error) { + var bridges []types.DenomBridge + + err := k.IFTBridgeStore.Walk(ctx, nil, func(key collections.Pair[string, string], bridge types.IFTBridge) (bool, error) { + bridges = append(bridges, types.DenomBridge{ + Denom: key.K1(), + Bridge: bridge, + }) + return false, nil + }) + if err != nil { + return nil, err + } + + return &types.QueryIFTBridgesResponse{Bridges: bridges}, nil +} + +// IFTBridgesByDenom queries all IFT bridges for a specific denom +func (k Keeper) IFTBridgesByDenom(ctx context.Context, req *types.QueryIFTBridgesByDenomRequest) (*types.QueryIFTBridgesByDenomResponse, error) { + var bridges []types.IFTBridge + + rng := collections.NewPrefixedPairRange[string, string](req.Denom) + err := k.IFTBridgeStore.Walk(ctx, rng, func(_ collections.Pair[string, string], bridge types.IFTBridge) (bool, error) { + bridges = append(bridges, bridge) + return false, nil + }) + if err != nil { + return nil, err + } + + return &types.QueryIFTBridgesByDenomResponse{Bridges: bridges}, nil +} + +// PendingTransfer queries a pending transfer +func (k Keeper) PendingTransfer(ctx context.Context, req *types.QueryPendingTransferRequest) (*types.QueryPendingTransferResponse, error) { + pending, err := k.PendingTransferStore.Get(ctx, collections.Join(req.ClientId, req.Sequence)) + if err != nil { + return nil, err + } + + // Validate denom matches if specified + if req.Denom != "" && pending.Denom != req.Denom { + return nil, collections.ErrNotFound + } + + return &types.QueryPendingTransferResponse{PendingTransfer: pending}, nil +} + +// Params queries the module parameters +func (k Keeper) Params(ctx context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + params, err := k.ParamsStore.Get(ctx) + if err != nil { + return nil, err + } + + return &types.QueryParamsResponse{Params: params}, nil +} diff --git a/prototypes/x/ift/keeper/query_test.go b/prototypes/x/ift/keeper/query_test.go new file mode 100644 index 00000000000..4dbb31d1401 --- /dev/null +++ b/prototypes/x/ift/keeper/query_test.go @@ -0,0 +1,189 @@ +package keeper_test + +import ( + "testing" + + "github.com/cosmos/sandbox-ledger/x/ift/types" + "github.com/stretchr/testify/require" + + "cosmossdk.io/collections" + "cosmossdk.io/math" +) + +func TestQuery_IFTBridge(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID := createIBCClient(t, ctx, wfapp) + + bridge := types.IFTBridge{ + ClientId: clientID, + CounterpartyIftAddress: remoteIFTAddrA, + IftSendCallConstructor: types.ConstructorEVM, + } + err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(testDenom, clientID), bridge) + require.NoError(t, err) + + // Query bridge + resp, err := wfapp.IFTKeeper.IFTBridge(ctx, &types.QueryIFTBridgeRequest{ + Denom: testDenom, + ClientId: clientID, + }) + require.NoError(t, err) + require.Equal(t, clientID, resp.Bridge.ClientId) + require.Equal(t, remoteIFTAddrA, resp.Bridge.CounterpartyIftAddress) + require.Equal(t, types.ConstructorEVM, resp.Bridge.IftSendCallConstructor) +} + + + +func TestQuery_IFTBridges(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID1 := createIBCClient(t, ctx, wfapp) + clientID2 := createIBCClient(t, ctx, wfapp) + + bridge1 := types.IFTBridge{ + ClientId: clientID1, + CounterpartyIftAddress: remoteIFTAddrA, + IftSendCallConstructor: types.ConstructorEVM, + } + err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(testDenom, clientID1), bridge1) + require.NoError(t, err) + + bridge2 := types.IFTBridge{ + ClientId: clientID2, + CounterpartyIftAddress: remoteIFTAddrB, + IftSendCallConstructor: types.ConstructorCosmos, + } + err = wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(testDenom2, clientID2), bridge2) + require.NoError(t, err) + + // Query all bridges + resp, err := wfapp.IFTKeeper.IFTBridges(ctx, &types.QueryIFTBridgesRequest{}) + require.NoError(t, err) + require.Len(t, resp.Bridges, 2) +} + +func TestQuery_IFTBridges_Empty(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + // Query all bridges (should be empty) + resp, err := wfapp.IFTKeeper.IFTBridges(ctx, &types.QueryIFTBridgesRequest{}) + require.NoError(t, err) + require.Empty(t, resp.Bridges) +} + +func TestQuery_IFTBridgesByDenom(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID1 := createIBCClient(t, ctx, wfapp) + clientID2 := createIBCClient(t, ctx, wfapp) + clientID3 := createIBCClient(t, ctx, wfapp) + + // Register two bridges for testDenom + bridge1 := types.IFTBridge{ + ClientId: clientID1, + CounterpartyIftAddress: remoteIFTAddrA, + IftSendCallConstructor: types.ConstructorEVM, + } + err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(testDenom, clientID1), bridge1) + require.NoError(t, err) + + bridge2 := types.IFTBridge{ + ClientId: clientID2, + CounterpartyIftAddress: remoteIFTAddrB, + IftSendCallConstructor: types.ConstructorCosmos, + } + err = wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(testDenom, clientID2), bridge2) + require.NoError(t, err) + + // Register one bridge for testDenom2 + bridge3 := types.IFTBridge{ + ClientId: clientID3, + CounterpartyIftAddress: remoteIFTAddrA, + IftSendCallConstructor: types.ConstructorEVM, + } + err = wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(testDenom2, clientID3), bridge3) + require.NoError(t, err) + + // Query bridges for testDenom only + resp, err := wfapp.IFTKeeper.IFTBridgesByDenom(ctx, &types.QueryIFTBridgesByDenomRequest{ + Denom: testDenom, + }) + require.NoError(t, err) + require.Len(t, resp.Bridges, 2) + + // Query bridges for testDenom2 only + resp, err = wfapp.IFTKeeper.IFTBridgesByDenom(ctx, &types.QueryIFTBridgesByDenomRequest{ + Denom: testDenom2, + }) + require.NoError(t, err) + require.Len(t, resp.Bridges, 1) + require.Equal(t, clientID3, resp.Bridges[0].ClientId) +} + +func TestQuery_IFTBridgesByDenom_NotFound(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + // Query bridges for nonexistent denom (should return empty, not error) + resp, err := wfapp.IFTKeeper.IFTBridgesByDenom(ctx, &types.QueryIFTBridgesByDenomRequest{ + Denom: "nonexistent", + }) + require.NoError(t, err) + require.Empty(t, resp.Bridges) +} + +func TestQuery_PendingTransfer(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + clientID := createIBCClient(t, ctx, wfapp) + sequence := uint64(42) + + pending := types.PendingTransfer{ + Denom: testDenom, + ClientId: clientID, + Sequence: sequence, + Sender: userAddrA, + Amount: math.NewInt(1000000), + } + err := wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, sequence, pending) + require.NoError(t, err) + + // Query pending transfer + resp, err := wfapp.IFTKeeper.PendingTransfer(ctx, &types.QueryPendingTransferRequest{ + Denom: testDenom, + ClientId: clientID, + Sequence: sequence, + }) + require.NoError(t, err) + require.Equal(t, testDenom, resp.PendingTransfer.Denom) + require.Equal(t, clientID, resp.PendingTransfer.ClientId) + require.Equal(t, sequence, resp.PendingTransfer.Sequence) + require.Equal(t, userAddrA, resp.PendingTransfer.Sender) + require.True(t, pending.Amount.Equal(resp.PendingTransfer.Amount)) +} + +func TestQuery_Params(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + // Query params (already set in setup) + resp, err := wfapp.IFTKeeper.Params(ctx, &types.QueryParamsRequest{}) + require.NoError(t, err) + require.NotEmpty(t, resp.Params.Authority) +} + +func TestQuery_Params_UpdateAndQuery(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + // Update params + newParams := types.Params{ + Authority: userAddrA, + } + err := wfapp.IFTKeeper.ParamsStore.Set(ctx, newParams) + require.NoError(t, err) + + // Query updated params + resp, err := wfapp.IFTKeeper.Params(ctx, &types.QueryParamsRequest{}) + require.NoError(t, err) + require.Equal(t, userAddrA, resp.Params.Authority) +} diff --git a/prototypes/x/ift/module.go b/prototypes/x/ift/module.go new file mode 100644 index 00000000000..f4633c6bffc --- /dev/null +++ b/prototypes/x/ift/module.go @@ -0,0 +1,125 @@ +package ift + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/cosmos/sandbox-ledger/x/ift/keeper" + "github.com/cosmos/sandbox-ledger/x/ift/types" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + + autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" + "cosmossdk.io/core/appmodule" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" +) + +var ( + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.HasGenesis = (*AppModule)(nil) + _ module.HasServices = (*AppModule)(nil) + _ appmodule.AppModule = (*AppModule)(nil) + _ appmodule.HasBeginBlocker = (*AppModule)(nil) + _ appmodule.HasEndBlocker = (*AppModule)(nil) +) + +// AppModuleBasic defines the basic application module used by the IFT module. +type AppModuleBasic struct { + cdc codec.Codec +} + +// Name returns the IFT module's name. +func (AppModuleBasic) Name() string { return types.ModuleName } + +// RegisterLegacyAminoCodec registers the IFT module's types on the LegacyAmino codec. +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + types.RegisterLegacyAminoCodec(cdc) +} + +// RegisterInterfaces registers the module's interface types +func (AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) { + types.RegisterInterfaces(registry) +} + +// DefaultGenesis returns default genesis state as raw bytes for the IFT module. +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesis()) +} + +// ValidateGenesis performs genesis state validation for the IFT module. +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, _ client.TxEncodingConfig, bz json.RawMessage) error { + var data types.GenesisState + if err := cdc.UnmarshalJSON(bz, &data); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + return data.Validate() +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the IFT module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + if err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil { + panic(err) + } +} + +// AppModule implements an application module for the IFT module. +type AppModule struct { + AppModuleBasic + keeper keeper.Keeper +} + +// NewAppModule creates a new AppModule object. +func NewAppModule(cdc codec.Codec, k keeper.Keeper) AppModule { + return AppModule{ + AppModuleBasic: AppModuleBasic{cdc: cdc}, + keeper: k, + } +} + +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (AppModule) IsOnePerModuleType() {} + +// IsAppModule implements the appmodule.AppModule interface. +func (AppModule) IsAppModule() {} + +// RegisterServices registers module services. +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) + types.RegisterQueryServer(cfg.QueryServer(), am.keeper) +} + +// InitGenesis performs genesis initialization for the IFT module. +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json.RawMessage) { + var genesisState types.GenesisState + cdc.MustUnmarshalJSON(data, &genesisState) + am.keeper.InitGenesis(ctx, genesisState) +} + +// ExportGenesis returns the exported genesis state as raw bytes for the IFT module. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + gs := am.keeper.ExportGenesis(ctx) + return cdc.MustMarshalJSON(gs) +} + +// ConsensusVersion returns the current module consensus version. +func (AppModule) ConsensusVersion() uint64 { return 1 } + +// BeginBlock returns the begin blocker for the IFT module. +func (AppModule) BeginBlock(_ context.Context) error { + return nil +} + +// EndBlock returns the end blocker for the IFT module. +func (AppModule) EndBlock(_ context.Context) error { + return nil +} + +// AutoCLIOptions implements the autocli.HasAutoCLIConfig interface. +func (AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { + return types.AutoCLIOptions() +} diff --git a/prototypes/x/ift/module_test.go b/prototypes/x/ift/module_test.go new file mode 100644 index 00000000000..18f799b0594 --- /dev/null +++ b/prototypes/x/ift/module_test.go @@ -0,0 +1,28 @@ +package ift_test + +import ( + "testing" + + "github.com/cosmos/sandbox-ledger/x/ift" + "github.com/cosmos/sandbox-ledger/x/ift/types" + "github.com/stretchr/testify/require" +) + +func TestAutoCLIOptions(t *testing.T) { + module := ift.AppModule{} + opts := module.AutoCLIOptions() + + require.NotNil(t, opts) + require.NotNil(t, opts.Query) + require.NotNil(t, opts.Tx) +} + +func TestAppModuleName(t *testing.T) { + module := ift.AppModule{} + require.Equal(t, types.ModuleName, module.Name()) +} + +func TestAppModuleConsensusVersion(t *testing.T) { + module := ift.AppModule{} + require.Equal(t, uint64(1), module.ConsensusVersion()) +} diff --git a/prototypes/x/ift/types/autocli.go b/prototypes/x/ift/types/autocli.go new file mode 100644 index 00000000000..dce38f26f2d --- /dev/null +++ b/prototypes/x/ift/types/autocli.go @@ -0,0 +1,100 @@ +package types + +import ( + autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" +) + +// AutoCLIOptions implements the autocli.HasAutoCLIConfig interface. +func AutoCLIOptions() *autocliv1.ModuleOptions { + return &autocliv1.ModuleOptions{ + Query: &autocliv1.ServiceCommandDescriptor{ + Service: Query_serviceDesc.ServiceName, + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "Params", + Use: "params", + Short: "Query the IFT module parameters", + }, + { + RpcMethod: "IFTBridge", + Use: "bridge [denom] [client_id]", + Short: "Query an IFT bridge by denom and client-id", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{ + {ProtoField: "denom"}, + {ProtoField: "client_id"}, + }, + }, + { + RpcMethod: "IFTBridges", + Use: "bridges", + Short: "Query all IFT bridges", + }, + { + RpcMethod: "IFTBridgesByDenom", + Use: "bridges-by-denom [denom]", + Short: "Query all IFT bridges for a specific denom", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{ + {ProtoField: "denom"}, + }, + }, + { + RpcMethod: "PendingTransfer", + Use: "pending-transfer [denom] [client_id] [sequence]", + Short: "Query a pending IFT transfer", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{ + {ProtoField: "denom"}, + {ProtoField: "client_id"}, + {ProtoField: "sequence"}, + }, + }, + }, + }, + Tx: &autocliv1.ServiceCommandDescriptor{ + Service: Msg_serviceDesc.ServiceName, + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "RegisterIFTBridge", + Use: "register-bridge [denom] [client_id] [counterparty_ift_address] [ift_send_call_constructor]", + Short: "Register a new IFT bridge", + Long: "Register a new IFT bridge to a counterparty chain. Constructor type must be either \"evm\" or \"cosmostx\".", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{ + {ProtoField: "denom"}, + {ProtoField: "client_id"}, + {ProtoField: "counterparty_ift_address"}, + {ProtoField: "ift_send_call_constructor"}, + }, + }, + { + RpcMethod: "RemoveIFTBridge", + Use: "remove-bridge [denom] [client_id]", + Short: "Remove an existing IFT bridge", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{ + {ProtoField: "denom"}, + {ProtoField: "client_id"}, + }, + }, + { + RpcMethod: "IFTTransfer", + Use: "transfer [denom] [client_id] [receiver] [amount] [timeout_timestamp]", + Short: "Initiate a cross-chain IFT transfer", + Long: "Initiate a cross-chain token transfer via IFT. Timeout timestamp is in seconds since epoch.", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{ + {ProtoField: "denom"}, + {ProtoField: "client_id"}, + {ProtoField: "receiver"}, + {ProtoField: "amount"}, + {ProtoField: "timeout_timestamp"}, + }, + }, + { + RpcMethod: "IFTMint", + Skip: true, // Internal: only callable by ICS27-GMP interchain accounts + }, + { + RpcMethod: "UpdateParams", + Skip: true, // Governance-only: restricted to module authority + }, + }, + }, + } +} diff --git a/prototypes/x/ift/types/codec.go b/prototypes/x/ift/types/codec.go new file mode 100644 index 00000000000..dcd9dca88de --- /dev/null +++ b/prototypes/x/ift/types/codec.go @@ -0,0 +1,32 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/codec/legacy" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" +) + +// RegisterLegacyAminoCodec registers the necessary x/ift interfaces and concrete types +// on the provided LegacyAmino codec. These types are used for Amino JSON serialization. +func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + legacy.RegisterAminoMsg(cdc, &MsgRegisterIFTBridge{}, "sandbox/ift/MsgRegisterIFTBridge") + legacy.RegisterAminoMsg(cdc, &MsgRemoveIFTBridge{}, "sandbox/ift/MsgRemoveIFTBridge") + legacy.RegisterAminoMsg(cdc, &MsgIFTTransfer{}, "sandbox/ift/MsgIFTTransfer") + legacy.RegisterAminoMsg(cdc, &MsgIFTMint{}, "sandbox/ift/MsgIFTMint") + legacy.RegisterAminoMsg(cdc, &MsgUpdateParams{}, "sandbox/ift/MsgUpdateParams") +} + +// RegisterInterfaces registers the x/ift interfaces types with the interface registry +func RegisterInterfaces(registry codectypes.InterfaceRegistry) { + registry.RegisterImplementations((*sdk.Msg)(nil), + &MsgRegisterIFTBridge{}, + &MsgRemoveIFTBridge{}, + &MsgIFTTransfer{}, + &MsgIFTMint{}, + &MsgUpdateParams{}, + ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) +} diff --git a/prototypes/x/ift/types/constructor.go b/prototypes/x/ift/types/constructor.go new file mode 100644 index 00000000000..00902a20d00 --- /dev/null +++ b/prototypes/x/ift/types/constructor.go @@ -0,0 +1,106 @@ +package types + +import ( + "encoding/json" + "strings" +) + +const ( + ConstructorEVM = "evm" + ConstructorCosmos = "cosmos" + ConstructorSolana = "solana" +) + +// SolanaOptions represents the Solana-specific options in the constructor string. +// Format: {"solana":{"gmp_program_id":"...","mint_pubkey":"..."}} +type SolanaOptions struct { + GMPProgramID string `json:"gmp_program_id"` + MintPubKey string `json:"mint_pubkey"` // SPL token mint public key +} + +// ValidateCounterpartyAddress validates the counterparty IFT contract address format +// based on the constructor type. +func ValidateCounterpartyAddress(constructorType, address string) error { + baseType := ParseConstructorType(constructorType) + switch baseType { + case ConstructorEVM: + return EVMConstructor{}.ValidateCounterpartyAddress(address) + case ConstructorCosmos: + return CosmosTxConstructor{}.ValidateCounterpartyAddress(address) + case ConstructorSolana: + return ValidateSolanaAddress(address) + default: + return ErrInvalidConstructorType.Wrapf("unknown: %s", constructorType) + } +} + +// ParseConstructorType extracts the constructor type from the constructor string. +// For JSON format (e.g., {"solana":{...}}), returns the top-level key. +// For plain strings (e.g., "evm", "cosmos"), returns the string as-is. +func ParseConstructorType(constructorStr string) string { + if strings.HasPrefix(constructorStr, "{") { + var wrapper map[string]json.RawMessage + if json.Unmarshal([]byte(constructorStr), &wrapper) == nil { + for key := range wrapper { + return key + } + } + } + return constructorStr +} + +// ParseSolanaConfig extracts the Solana options from a constructor string. +// Expects JSON format: {"solana":{"gmp_program_id":"...","mint_pubkey":"..."}} +// Returns ErrNotSolanaConstructor if the constructor is not a Solana constructor. +func ParseSolanaConfig(constructorStr string) (*SolanaOptions, error) { + var wrapper map[string]*SolanaOptions + if err := json.Unmarshal([]byte(constructorStr), &wrapper); err != nil { + return nil, ErrInvalidConstructorType.Wrapf("invalid JSON: %s", err) + } + + cfg, ok := wrapper[ConstructorSolana] + if !ok { + return nil, ErrNotSolanaConstructor + } + + return cfg, nil +} + +// ValidConstructorTypes returns all valid constructor type identifiers +func ValidConstructorTypes() []string { + return []string{ConstructorEVM, ConstructorCosmos, ConstructorSolana} +} + +// ValidateConstructorString validates a constructor string. +// For EVM and Cosmos constructors, it just validates the type is known. +// For Solana constructors, it also validates the embedded configuration. +func ValidateConstructorString(constructorStr string) error { + constructorType := ParseConstructorType(constructorStr) + switch constructorType { + case ConstructorEVM, ConstructorCosmos: + return nil + case ConstructorSolana: + _, err := ValidateSolanaConstructorString(constructorStr) + return err + default: + return ErrInvalidConstructorType.Wrapf("unknown: %s", constructorType) + } +} + +// ValidateSolanaConstructorString validates and parses a Solana constructor string. +// Returns the parsed config or error if invalid. +func ValidateSolanaConstructorString(constructorStr string) (*SolanaOptions, error) { + cfg, err := ParseSolanaConfig(constructorStr) + if err != nil { + return nil, err + } + + if err := ValidateSolanaAddress(cfg.GMPProgramID); err != nil { + return nil, ErrInvalidSolanaAddress.Wrapf("invalid gmp_program_id: %s", err) + } + if err := ValidateSolanaAddress(cfg.MintPubKey); err != nil { + return nil, ErrInvalidSolanaAddress.Wrapf("invalid mint_pubkey: %s", err) + } + + return cfg, nil +} diff --git a/prototypes/x/ift/types/constructor_cosmostx.go b/prototypes/x/ift/types/constructor_cosmostx.go new file mode 100644 index 00000000000..6bdfa51698f --- /dev/null +++ b/prototypes/x/ift/types/constructor_cosmostx.go @@ -0,0 +1,63 @@ +package types + +import ( + "strings" + + "github.com/cosmos/gogoproto/proto" + + "cosmossdk.io/math" + + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/types/bech32" + + gmptypes "github.com/cosmos/ibc-go/v11/modules/apps/27-gmp/types" +) + +// CosmosTxConstructor handles mint call construction for Cosmos SDK chains +type CosmosTxConstructor struct{} + +func (CosmosTxConstructor) ValidateCounterpartyAddress(address string) error { + // Cosmos addresses are validated as bech32, but the counterparty IFT address + // is typically the module account which we cannot validate format-wise + // since bech32 prefix varies by chain + if strings.TrimSpace(address) == "" { + return ErrInvalidReceiver + } + return nil +} + +// validateBech32Address validates that an address is valid bech32 format +// with correct data length, without requiring a specific prefix +func validateBech32Address(address string) error { + if strings.TrimSpace(address) == "" { + return ErrInvalidReceiver.Wrap("address cannot be empty") + } + + _, data, err := bech32.DecodeAndConvert(address) + if err != nil { + return ErrInvalidReceiver.Wrapf("invalid bech32: %s", err) + } + + // Standard Cosmos addresses are 20 bytes + const addrLen = 20 + if len(data) != addrLen { + return ErrInvalidReceiver.Wrapf("invalid address length: expected %d bytes, got %d", addrLen, len(data)) + } + + return nil +} + +func (CosmosTxConstructor) ConstructMintCall(cdc codec.BinaryCodec, receiver string, amount math.Int, denom string, counterpartyIcaAddress string) ([]byte, error) { + if err := validateBech32Address(receiver); err != nil { + return nil, err + } + + msg := &MsgIFTMint{ + Signer: counterpartyIcaAddress, + Denom: denom, + Receiver: receiver, + Amount: amount, + } + + return gmptypes.SerializeCosmosTx(cdc, []proto.Message{msg}) +} diff --git a/prototypes/x/ift/types/constructor_evm.go b/prototypes/x/ift/types/constructor_evm.go new file mode 100644 index 00000000000..36173df7a9c --- /dev/null +++ b/prototypes/x/ift/types/constructor_evm.go @@ -0,0 +1,60 @@ +package types + +import ( + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/common" + + "cosmossdk.io/math" + + "github.com/cosmos/cosmos-sdk/codec" +) + +// EVMConstructor handles mint call construction for EVM-based chains +type EVMConstructor struct{} + +// iftMintSelector is the function selector for iftMint(address,uint256) +// keccak256("iftMint(address,uint256)")[:4] = 0x0a7244e7 +var iftMintSelector = []byte{0x0a, 0x72, 0x44, 0xe7} + +func (EVMConstructor) ValidateCounterpartyAddress(address string) error { + if !common.IsHexAddress(address) { + return ErrInvalidEVMAddress.Wrapf("address: %s", address) + } + return nil +} + +func (EVMConstructor) validateReceiverAddress(address string) error { + if !common.IsHexAddress(address) { + return ErrInvalidEVMAddress.Wrapf("address: %s", address) + } + + addr := common.HexToAddress(address) + if addr == (common.Address{}) { + return ErrZeroAddress + } + + return nil +} + +func (c EVMConstructor) ConstructMintCall(_ codec.BinaryCodec, receiver string, amount math.Int, _, _ string) ([]byte, error) { + if err := c.validateReceiverAddress(receiver); err != nil { + return nil, err + } + + receiverAddr := common.HexToAddress(receiver) + + addressType, _ := abi.NewType("address", "", nil) + uint256Type, _ := abi.NewType("uint256", "", nil) + + arguments := abi.Arguments{ + {Type: addressType}, + {Type: uint256Type}, + } + + packed, err := arguments.Pack(receiverAddr, amount.BigInt()) + if err != nil { + return nil, ErrABIPackFailed.Wrap(err.Error()) + } + + return append(iftMintSelector, packed...), nil +} diff --git a/prototypes/x/ift/types/constructor_solana.go b/prototypes/x/ift/types/constructor_solana.go new file mode 100644 index 00000000000..4aaa55cdb10 --- /dev/null +++ b/prototypes/x/ift/types/constructor_solana.go @@ -0,0 +1,256 @@ +package types + +import ( + "bytes" + "crypto/sha256" + "encoding/binary" + + "github.com/cosmos/gogoproto/proto" + solanapb "github.com/cosmos/solidity-ibc-eureka/packages/go-proto/solana" + bin "github.com/gagliardetto/binary" + "github.com/gagliardetto/solana-go" + + "cosmossdk.io/math" + + "github.com/cosmos/cosmos-sdk/codec" +) + +// IFTMintMsg is the Borsh-encoded message for the ift_mint instruction +type IFTMintMsg struct { + Receiver solana.PublicKey + Amount uint64 +} + +// SolanaConstructor handles mint call construction for Solana. +// It holds the Solana-specific configuration needed for mint calls. +type SolanaConstructor struct { + IFTProgramID solana.PublicKey + GMPProgramID solana.PublicKey + Mint solana.PublicKey + SenderAddress string + CounterpartyClientID string +} + +// NewSolanaConstructor creates a fully configured SolanaConstructor from a constructor string +// and additional context needed for mint calls. +func NewSolanaConstructor(constructorStr, counterpartyIftAddress, senderAddress, counterpartyClientID string) (*SolanaConstructor, error) { + cfg, err := ParseSolanaConfig(constructorStr) + if err != nil { + return nil, err + } + + iftProgramID, err := solana.PublicKeyFromBase58(counterpartyIftAddress) + if err != nil { + return nil, ErrInvalidSolanaAddress.Wrapf("invalid IFT program ID: %s", err) + } + + gmpProgramID, err := solana.PublicKeyFromBase58(cfg.GMPProgramID) + if err != nil { + return nil, ErrInvalidSolanaAddress.Wrapf("invalid GMP program ID: %s", err) + } + + mint, err := solana.PublicKeyFromBase58(cfg.MintPubKey) + if err != nil { + return nil, ErrInvalidSolanaAddress.Wrapf("invalid mint pubkey: %s", err) + } + + return &SolanaConstructor{ + IFTProgramID: iftProgramID, + GMPProgramID: gmpProgramID, + Mint: mint, + SenderAddress: senderAddress, + CounterpartyClientID: counterpartyClientID, + }, nil +} + +func (SolanaConstructor) ValidateCounterpartyAddress(address string) error { + return ValidateSolanaAddress(address) +} + +// ValidateSolanaAddress validates that an address is a valid base58-encoded Solana public key +func ValidateSolanaAddress(address string) error { + if address == "" { + return ErrInvalidSolanaAddress.Wrap("address cannot be empty") + } + + _, err := solana.PublicKeyFromBase58(address) + if err != nil { + return ErrInvalidSolanaAddress.Wrapf("invalid base58 pubkey: %s", err) + } + + return nil +} + +// ConstructMintCall builds the GMPSolanaPayload for a Solana IFT mint instruction. +func (s SolanaConstructor) ConstructMintCall(_ codec.BinaryCodec, receiver string, amount math.Int, _, _ string) ([]byte, error) { + if s.IFTProgramID.IsZero() { + return nil, ErrConstructMintCallFailed.Wrap("solana config is required") + } + + if err := ValidateSolanaAddress(receiver); err != nil { + return nil, err + } + + receiverPubkey, _ := solana.PublicKeyFromBase58(receiver) + + // Derive all PDAs + appStatePDA := deriveAppStatePDA(s.IFTProgramID) + appMintStatePDA := deriveAppMintStatePDA(s.IFTProgramID, s.Mint) + iftBridgePDA := deriveIFTBridgePDA(s.IFTProgramID, s.Mint, s.CounterpartyClientID) + mintAuthorityPDA := deriveMintAuthorityPDA(s.IFTProgramID, s.Mint) + receiverATA := deriveAssociatedTokenAddress(s.Mint, receiverPubkey) + gmpAccountPDA, _ := deriveGMPAccountPDA(s.GMPProgramID, s.CounterpartyClientID, s.SenderAddress) + + // Solana programs only accept uint64 amounts; reject anything that wouldn't + // round-trip cleanly rather than silently truncating via .Uint64(). + if !amount.BigInt().IsUint64() { + return nil, ErrConstructMintCallFailed.Wrapf("amount %s overflows uint64", amount) + } + + // Build instruction data: discriminator + borsh(IFTMintMsg) + data, err := buildInstructionData(receiverPubkey, amount.BigInt().Uint64()) + if err != nil { + return nil, ErrConstructMintCallFailed.Wrapf("failed to build instruction data: %s", err) + } + + // Build accounts list matching IFTMint struct order. + // The GMP PDA acts as payer (pre-funded by relayer) for ATA creation. + accounts := []*solanapb.SolanaAccountMeta{ + {Pubkey: appStatePDA[:], IsSigner: false, IsWritable: false}, // 0: app_state + {Pubkey: appMintStatePDA[:], IsSigner: false, IsWritable: true}, // 1: app_mint_state + {Pubkey: iftBridgePDA[:], IsSigner: false, IsWritable: false}, // 2: ift_bridge + {Pubkey: s.Mint[:], IsSigner: false, IsWritable: true}, // 3: mint + {Pubkey: mintAuthorityPDA[:], IsSigner: false, IsWritable: false}, // 4: mint_authority + {Pubkey: receiverATA[:], IsSigner: false, IsWritable: true}, // 5: receiver_token_account + {Pubkey: receiverPubkey[:], IsSigner: false, IsWritable: false}, // 6: receiver_owner + {Pubkey: gmpAccountPDA[:], IsSigner: true, IsWritable: false}, // 7: gmp_account (signer via CPI) + {Pubkey: gmpAccountPDA[:], IsSigner: true, IsWritable: true}, // 8: payer (GMP PDA, pre-funded by relayer) + {Pubkey: solana.TokenProgramID[:], IsSigner: false, IsWritable: false}, // 9: token_program + {Pubkey: solana.SPLAssociatedTokenAccountProgramID[:], IsSigner: false, IsWritable: false}, // 10: associated_token_program + {Pubkey: solana.SystemProgramID[:], IsSigner: false, IsWritable: false}, // 11: system_program + } + + // Build GMPSolanaPayload + // prefund_lamports covers ATA creation rent (~2.04M) + GMP PDA rent-exempt minimum (~890K) + payload := &solanapb.GMPSolanaPayload{ + Accounts: accounts, + Data: data, + PrefundLamports: 3_000_000, + } + + // NOTE: Use of protobuf is for consistency and might require removal as decryption is less from optimal + // and will influence increase of CU in case of supporting multiple packets + return proto.Marshal(payload) +} + +// buildInstructionData builds the Anchor instruction data: discriminator + borsh(IFTMintMsg) +func buildInstructionData(receiver solana.PublicKey, amount uint64) ([]byte, error) { + // Anchor discriminator: SHA256("global:ift_mint")[0:8] + discriminatorHash := sha256.Sum256([]byte("global:ift_mint")) + discriminator := discriminatorHash[:8] + + // Borsh-encode IFTMintMsg + msg := IFTMintMsg{ + Receiver: receiver, + Amount: amount, + } + + var buf bytes.Buffer + encoder := bin.NewBorshEncoder(&buf) + if err := encoder.Encode(msg); err != nil { + return nil, err + } + + // Combine discriminator + borsh-encoded msg + return append(discriminator, buf.Bytes()...), nil +} + +// deriveAppStatePDA derives the IFT app_state PDA: ["ift_app_state"] +func deriveAppStatePDA(iftProgramID solana.PublicKey) solana.PublicKey { + pda, _, _ := solana.FindProgramAddress( + [][]byte{ + []byte("ift_app_state"), + }, + iftProgramID, + ) + return pda +} + +// deriveAppMintStatePDA derives the IFT app_mint_state PDA: ["ift_app_mint_state", mint] +func deriveAppMintStatePDA(iftProgramID, mint solana.PublicKey) solana.PublicKey { + pda, _, _ := solana.FindProgramAddress( + [][]byte{ + []byte("ift_app_mint_state"), + mint[:], + }, + iftProgramID, + ) + return pda +} + +// deriveIFTBridgePDA derives the IFT bridge PDA: ["ift_bridge", mint, client_id] +func deriveIFTBridgePDA(iftProgramID, mint solana.PublicKey, clientID string) solana.PublicKey { + pda, _, _ := solana.FindProgramAddress( + [][]byte{ + []byte("ift_bridge"), + mint[:], + []byte(clientID), + }, + iftProgramID, + ) + return pda +} + +// deriveMintAuthorityPDA derives the mint authority PDA: ["ift_mint_authority", mint] +func deriveMintAuthorityPDA(iftProgramID, mint solana.PublicKey) solana.PublicKey { + pda, _, _ := solana.FindProgramAddress( + [][]byte{ + []byte("ift_mint_authority"), + mint[:], + }, + iftProgramID, + ) + return pda +} + +// deriveAssociatedTokenAddress derives the ATA for a given owner and mint +func deriveAssociatedTokenAddress(mint, owner solana.PublicKey) solana.PublicKey { + ata, _, _ := solana.FindProgramAddress( + [][]byte{ + owner[:], + solana.TokenProgramID[:], + mint[:], + }, + solana.SPLAssociatedTokenAccountProgramID, + ) + return ata +} + +// deriveGMPAccountPDA derives the GMP account PDA and bump. +// Seeds: ["gmp_account", account_identifier_digest] +// Where account_identifier_digest = SHA256(borsh(client_id, sender_address, salt)) +func deriveGMPAccountPDA(gmpProgramID solana.PublicKey, clientID, senderAddress string) (solana.PublicKey, uint8) { + // Borsh serialization: u32_le(len) + bytes for each string field + var buf bytes.Buffer + + clientBytes := []byte(clientID) + _ = binary.Write(&buf, binary.LittleEndian, uint32(len(clientBytes))) + _, _ = buf.Write(clientBytes) + + senderBytes := []byte(senderAddress) + _ = binary.Write(&buf, binary.LittleEndian, uint32(len(senderBytes))) + _, _ = buf.Write(senderBytes) + + _ = binary.Write(&buf, binary.LittleEndian, uint32(0)) // empty salt + + identifierHash := sha256.Sum256(buf.Bytes()) + + pda, bump, _ := solana.FindProgramAddress( + [][]byte{ + []byte("gmp_account"), + identifierHash[:], + }, + gmpProgramID, + ) + return pda, bump +} diff --git a/prototypes/x/ift/types/constructor_test.go b/prototypes/x/ift/types/constructor_test.go new file mode 100644 index 00000000000..674db250af0 --- /dev/null +++ b/prototypes/x/ift/types/constructor_test.go @@ -0,0 +1,428 @@ +package types_test + +import ( + "testing" + + "github.com/cosmos/sandbox-ledger/x/ift/types" + "github.com/stretchr/testify/require" +) + +func TestValidateCounterpartyAddress(t *testing.T) { + tests := []struct { + name string + constructorType string + address string + expectErr bool + }{ + { + name: "EVM - valid address", + constructorType: types.ConstructorEVM, + address: "0x742d35Cc6634C0532925a3b844Bc9e7595f3aD12", + expectErr: false, + }, + { + name: "EVM - invalid address", + constructorType: types.ConstructorEVM, + address: "invalid", + expectErr: true, + }, + { + name: "Cosmos - valid address", + constructorType: types.ConstructorCosmos, + address: "cosmos1abc123", + expectErr: false, + }, + { + name: "Cosmos - empty address", + constructorType: types.ConstructorCosmos, + address: "", + expectErr: true, + }, + { + name: "Solana - valid address", + constructorType: types.ConstructorSolana, + address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", + expectErr: false, + }, + { + name: "Solana - invalid address", + constructorType: types.ConstructorSolana, + address: "invalid", + expectErr: true, + }, + { + name: "unknown constructor type", + constructorType: "unknown", + address: "any", + expectErr: true, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + err := types.ValidateCounterpartyAddress(tc.constructorType, tc.address) + if tc.expectErr { + require.Error(t, err) + } else { + require.NoError(t, err) + } + }) + } +} + +func TestEVMConstructor_ValidateCounterpartyAddress(t *testing.T) { + constructor := &types.EVMConstructor{} + + tests := []struct { + name string + address string + expectErr bool + }{ + { + name: "valid checksummed address", + address: "0x742d35Cc6634C0532925a3b844Bc9e7595f3aD12", + expectErr: false, + }, + { + name: "valid lowercase address", + address: "0x742d35cc6634c0532925a3b844bc9e7595f3ad12", + expectErr: false, + }, + { + name: "invalid - cosmos address", + address: "cosmos1abc123", + expectErr: true, + }, + { + name: "invalid - empty", + address: "", + expectErr: true, + }, + { + name: "invalid - too short", + address: "0x742d35", + expectErr: true, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + err := constructor.ValidateCounterpartyAddress(tc.address) + if tc.expectErr { + require.Error(t, err) + } else { + require.NoError(t, err) + } + }) + } +} + +func TestCosmosTxConstructor_ValidateCounterpartyAddress(t *testing.T) { + constructor := &types.CosmosTxConstructor{} + + tests := []struct { + name string + address string + expectErr bool + }{ + { + name: "non-empty address", + address: "cosmos1abc123", + expectErr: false, + }, + { + name: "module account style", + address: "cosmos1ift", + expectErr: false, + }, + { + name: "invalid - empty", + address: "", + expectErr: true, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + err := constructor.ValidateCounterpartyAddress(tc.address) + if tc.expectErr { + require.Error(t, err) + } else { + require.NoError(t, err) + } + }) + } +} + +func TestValidConstructorTypes(t *testing.T) { + constructorTypes := types.ValidConstructorTypes() + require.Len(t, constructorTypes, 3) + require.Contains(t, constructorTypes, "evm") + require.Contains(t, constructorTypes, "cosmos") + require.Contains(t, constructorTypes, "solana") +} + +func TestParseSolanaConfig(t *testing.T) { + tests := []struct { + name string + constructorStr string + expectErr bool + errContains string + expectedCfg *types.SolanaOptions + }{ + { + name: "valid config", + constructorStr: `{"solana":{"gmp_program_id":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","mint_pubkey":"11111111111111111111111111111111"}}`, + expectErr: false, + expectedCfg: &types.SolanaOptions{ + GMPProgramID: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", + MintPubKey: "11111111111111111111111111111111", + }, + }, + { + name: "not solana constructor - evm", + constructorStr: "evm", + expectErr: true, + errContains: "invalid JSON", + }, + { + name: "not solana constructor - cosmos", + constructorStr: "cosmos", + expectErr: true, + errContains: "invalid JSON", + }, + { + name: "invalid JSON", + constructorStr: `{"solana":{invalid}}`, + expectErr: true, + errContains: "invalid JSON", + }, + { + name: "empty solana config", + constructorStr: `{"solana":{}}`, + expectErr: false, + expectedCfg: &types.SolanaOptions{}, + }, + { + name: "wrong key in JSON", + constructorStr: `{"evm":{}}`, + expectErr: true, + errContains: "not a solana constructor", + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + cfg, err := types.ParseSolanaConfig(tc.constructorStr) + if tc.expectErr { + require.Error(t, err) + if tc.errContains != "" { + require.Contains(t, err.Error(), tc.errContains) + } + } else { + require.NoError(t, err) + require.Equal(t, tc.expectedCfg, cfg) + } + }) + } +} + +func TestValidateSolanaConstructorString(t *testing.T) { + tests := []struct { + name string + constructorStr string + expectErr bool + errContains string + }{ + { + name: "valid config", + constructorStr: `{"solana":{"gmp_program_id":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","mint_pubkey":"11111111111111111111111111111111"}}`, + expectErr: false, + }, + { + name: "invalid gmp_program_id", + constructorStr: `{"solana":{"gmp_program_id":"invalid","mint_pubkey":"11111111111111111111111111111111"}}`, + expectErr: true, + errContains: "invalid gmp_program_id", + }, + { + name: "invalid mint_pubkey", + constructorStr: `{"solana":{"gmp_program_id":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","mint_pubkey":"invalid"}}`, + expectErr: true, + errContains: "invalid mint_pubkey", + }, + { + name: "empty gmp_program_id", + constructorStr: `{"solana":{"gmp_program_id":"","mint_pubkey":"11111111111111111111111111111111"}}`, + expectErr: true, + errContains: "invalid gmp_program_id", + }, + { + name: "empty mint_pubkey", + constructorStr: `{"solana":{"gmp_program_id":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","mint_pubkey":""}}`, + expectErr: true, + errContains: "invalid mint_pubkey", + }, + { + name: "not solana constructor - plain string", + constructorStr: "evm", + expectErr: true, + errContains: "invalid JSON", + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + cfg, err := types.ValidateSolanaConstructorString(tc.constructorStr) + if tc.expectErr { + require.Error(t, err) + if tc.errContains != "" { + require.Contains(t, err.Error(), tc.errContains) + } + require.Nil(t, cfg) + } else { + require.NoError(t, err) + require.NotNil(t, cfg) + } + }) + } +} + +func TestValidateConstructorString(t *testing.T) { + tests := []struct { + name string + constructorStr string + expectErr bool + errContains string + }{ + { + name: "valid EVM constructor", + constructorStr: types.ConstructorEVM, + expectErr: false, + }, + { + name: "valid Cosmos constructor", + constructorStr: types.ConstructorCosmos, + expectErr: false, + }, + { + name: "valid Solana constructor", + constructorStr: `{"solana":{"gmp_program_id":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","mint_pubkey":"11111111111111111111111111111111"}}`, + expectErr: false, + }, + { + name: "invalid Solana constructor - invalid gmp_program_id", + constructorStr: `{"solana":{"gmp_program_id":"invalid","mint_pubkey":"11111111111111111111111111111111"}}`, + expectErr: true, + errContains: "invalid gmp_program_id", + }, + { + name: "unknown constructor type", + constructorStr: "unknown", + expectErr: true, + errContains: "unknown: unknown", + }, + { + name: "empty constructor", + constructorStr: "", + expectErr: true, + errContains: "unknown:", + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + err := types.ValidateConstructorString(tc.constructorStr) + if tc.expectErr { + require.Error(t, err) + if tc.errContains != "" { + require.Contains(t, err.Error(), tc.errContains) + } + } else { + require.NoError(t, err) + } + }) + } +} + +func TestParseConstructorType(t *testing.T) { + tests := []struct { + input string + expected string + }{ + {"evm", "evm"}, + {"cosmos", "cosmos"}, + {`{"solana":{"key":"value"}}`, "solana"}, + {`{"evm":{}}`, "evm"}, + {"", ""}, + } + + for _, tc := range tests { + t.Run(tc.input, func(t *testing.T) { + result := types.ParseConstructorType(tc.input) + require.Equal(t, tc.expected, result) + }) + } +} + +func TestSolanaConstructor_ValidateCounterpartyAddress(t *testing.T) { + constructor := &types.SolanaConstructor{} + + tests := []struct { + name string + address string + expectErr bool + }{ + { + name: "valid solana address", + address: "11111111111111111111111111111111", + expectErr: false, + }, + { + name: "valid solana address - token program", + address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA", + expectErr: false, + }, + { + name: "valid solana address - random", + address: "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin", + expectErr: false, + }, + { + name: "invalid - cosmos address", + address: "cosmos1abc123", + expectErr: true, + }, + { + name: "invalid - EVM address", + address: "0x742d35Cc6634C0532925a3b844Bc9e7595f3aD12", + expectErr: true, + }, + { + name: "invalid - empty", + address: "", + expectErr: true, + }, + { + name: "invalid - too short", + address: "abc123", + expectErr: true, + }, + { + name: "invalid - contains invalid base58 chars", + address: "0OIl11111111111111111111111111111", + expectErr: true, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + err := constructor.ValidateCounterpartyAddress(tc.address) + if tc.expectErr { + require.Error(t, err) + } else { + require.NoError(t, err) + } + }) + } +} diff --git a/prototypes/x/ift/types/errors.go b/prototypes/x/ift/types/errors.go new file mode 100644 index 00000000000..60a773593da --- /dev/null +++ b/prototypes/x/ift/types/errors.go @@ -0,0 +1,34 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" +) + +// IFT sentinel errors +var ( + ErrInvalidSigner = errorsmod.Register(ModuleName, 1, "invalid signer") + ErrUnauthorized = errorsmod.Register(ModuleName, 2, "unauthorized") + ErrBridgeNotFound = errorsmod.Register(ModuleName, 3, "bridge not found") + ErrPendingTransferNotFound = errorsmod.Register(ModuleName, 5, "pending transfer not found") + ErrInvalidDenom = errorsmod.Register(ModuleName, 6, "invalid denom") + ErrInvalidClientID = errorsmod.Register(ModuleName, 7, "invalid client id") + ErrInvalidReceiver = errorsmod.Register(ModuleName, 8, "invalid receiver") + ErrInvalidAmount = errorsmod.Register(ModuleName, 9, "invalid amount") + ErrInvalidConstructorType = errorsmod.Register(ModuleName, 10, "invalid constructor type") + ErrConstructMintCallFailed = errorsmod.Register(ModuleName, 11, "failed to construct mint call") + ErrSendCallFailed = errorsmod.Register(ModuleName, 12, "failed to send ICS27-GMP call") + ErrMintFailed = errorsmod.Register(ModuleName, 13, "failed to mint tokens") + ErrBurnFailed = errorsmod.Register(ModuleName, 14, "failed to burn tokens") + ErrDenomNotFound = errorsmod.Register(ModuleName, 15, "denom not found in token factory") + ErrUnauthorizedSender = errorsmod.Register(ModuleName, 16, "unauthorized sender") + ErrUnexpectedSalt = errorsmod.Register(ModuleName, 17, "unexpected salt in account identifier") + ErrInvalidPacketData = errorsmod.Register(ModuleName, 18, "invalid packet data") + ErrCallbackValidationFailed = errorsmod.Register(ModuleName, 19, "callback validation failed") + ErrBridgeHasPendingTransfers = errorsmod.Register(ModuleName, 20, "bridge has pending transfers") + ErrInvalidTimeout = errorsmod.Register(ModuleName, 21, "invalid timeout") + ErrInvalidEVMAddress = errorsmod.Register(ModuleName, 22, "invalid EVM address") + ErrZeroAddress = errorsmod.Register(ModuleName, 23, "zero address not allowed") + ErrABIPackFailed = errorsmod.Register(ModuleName, 24, "failed to pack ABI arguments") + ErrInvalidSolanaAddress = errorsmod.Register(ModuleName, 25, "invalid Solana address") + ErrNotSolanaConstructor = errorsmod.Register(ModuleName, 26, "not a solana constructor") +) diff --git a/prototypes/x/ift/types/events.go b/prototypes/x/ift/types/events.go new file mode 100644 index 00000000000..2a66133a989 --- /dev/null +++ b/prototypes/x/ift/types/events.go @@ -0,0 +1,23 @@ +package types + +const ( + EventTypeIFTBridgeRegistered = "ift_bridge_registered" + EventTypeIFTBridgeUpdated = "ift_bridge_updated" + EventTypeIFTBridgeRemoved = "ift_bridge_removed" + EventTypeIFTTransferInitiated = "ift_transfer_initiated" + EventTypeIFTMintReceived = "ift_mint_received" + EventTypeIFTTransferCompleted = "ift_transfer_completed" + EventTypeIFTTransferRefunded = "ift_transfer_refunded" + EventTypeIFTCallbackFailed = "ift_callback_failed" + + AttributeKeyDenom = "denom" + AttributeKeyClientID = "client_id" + AttributeKeyCounterpartyIFTAddress = "counterparty_ift_address" + AttributeKeyIFTSendCallConstructor = "ift_send_call_constructor" + AttributeKeySequence = "sequence" + AttributeKeySender = "sender" + AttributeKeyReceiver = "receiver" + AttributeKeyAmount = "amount" + AttributeKeyError = "error" + AttributeKeyCallbackType = "callback_type" +) diff --git a/prototypes/x/ift/types/expected_keepers.go b/prototypes/x/ift/types/expected_keepers.go new file mode 100644 index 00000000000..12f63c4d1d1 --- /dev/null +++ b/prototypes/x/ift/types/expected_keepers.go @@ -0,0 +1,52 @@ +package types + +import ( + "context" + + "cosmossdk.io/math" + + sdk "github.com/cosmos/cosmos-sdk/types" + + gmptypes "github.com/cosmos/ibc-go/v11/modules/apps/27-gmp/types" + clienttypesv2 "github.com/cosmos/ibc-go/v11/modules/core/02-client/v2/types" + ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" +) + +// TokenFactoryKeeper defines the expected interface for the token factory module +type TokenFactoryKeeper interface { + // MintTo mints new tokens of `denom` into `address`. + // MUST fail if `denom` is not recognized or not authorized for minting. + MintTo(ctx context.Context, denom string, amount math.Int, to sdk.AccAddress) error + // BurnFrom burns tokens of `denom` from `address`. + // MUST fail if `address` does not have enough balance or burn is not permitted. + BurnFrom(ctx context.Context, denom string, amount math.Int, from sdk.AccAddress) error + // HasDenom checks if a denom exists in the token factory + HasDenom(ctx context.Context, denom string) bool +} + +// GMPKeeper defines the expected interface for the GMP module +type GMPKeeper interface { + // GetAccount retrieves the ICS27 account for a given address (reverse lookup) + GetAccount(ctx context.Context, address sdk.AccAddress) (*gmptypes.ICS27Account, error) +} + +// AccountKeeper defines the expected interface for the account keeper +type AccountKeeper interface { + GetModuleAddress(moduleName string) sdk.AccAddress + GetAccount(ctx context.Context, addr sdk.AccAddress) sdk.AccountI +} + +// MessageRouter defines the expected message router interface +type MessageRouter interface { + Handler(msg sdk.Msg) func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) +} + +// IBCClientKeeper defines the expected interface for the IBC client keeper +type IBCClientKeeper interface { + GetClientState(ctx sdk.Context, clientID string) (ibcexported.ClientState, bool) +} + +// IBCClientV2Keeper defines the expected interface for the IBCv2 client keeper +type IBCClientV2Keeper interface { + GetClientCounterparty(ctx sdk.Context, clientID string) (clienttypesv2.CounterpartyInfo, bool) +} diff --git a/prototypes/x/ift/types/genesis.go b/prototypes/x/ift/types/genesis.go new file mode 100644 index 00000000000..49502b697ee --- /dev/null +++ b/prototypes/x/ift/types/genesis.go @@ -0,0 +1,40 @@ +package types + +// DefaultGenesis returns the default genesis state +func DefaultGenesis() *GenesisState { + return &GenesisState{ + Params: DefaultParams(), + Bridges: []GenesisBridge{}, + PendingTransfers: []PendingTransfer{}, + } +} + +// DefaultParams returns default module parameters +func DefaultParams() Params { + return Params{ + Authority: "", // Should be set to gov module address during init + } +} + +// Validate performs basic genesis state validation +func (gs GenesisState) Validate() error { + for _, bridge := range gs.Bridges { + if bridge.Denom == "" { + return ErrInvalidDenom + } + if bridge.Bridge.ClientId == "" { + return ErrInvalidClientID + } + } + + for _, pending := range gs.PendingTransfers { + if pending.Denom == "" { + return ErrInvalidDenom + } + if pending.ClientId == "" { + return ErrInvalidClientID + } + } + + return nil +} diff --git a/prototypes/x/ift/types/genesis.pb.go b/prototypes/x/ift/types/genesis.pb.go new file mode 100644 index 00000000000..f4c8453914d --- /dev/null +++ b/prototypes/x/ift/types/genesis.pb.go @@ -0,0 +1,679 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: sandbox/ift/genesis.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// GenesisState defines the IFT module's genesis state. +type GenesisState struct { + // Module parameters + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` + // All registered IFT bridges + Bridges []GenesisBridge `protobuf:"bytes,2,rep,name=bridges,proto3" json:"bridges"` + // All pending transfers + PendingTransfers []PendingTransfer `protobuf:"bytes,3,rep,name=pending_transfers,json=pendingTransfers,proto3" json:"pending_transfers"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_6525c4ab1ce8c1c3, []int{0} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func (m *GenesisState) GetBridges() []GenesisBridge { + if m != nil { + return m.Bridges + } + return nil +} + +func (m *GenesisState) GetPendingTransfers() []PendingTransfer { + if m != nil { + return m.PendingTransfers + } + return nil +} + +// GenesisBridge wraps denom with its bridge configuration +type GenesisBridge struct { + Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"` + Bridge IFTBridge `protobuf:"bytes,2,opt,name=bridge,proto3" json:"bridge"` +} + +func (m *GenesisBridge) Reset() { *m = GenesisBridge{} } +func (m *GenesisBridge) String() string { return proto.CompactTextString(m) } +func (*GenesisBridge) ProtoMessage() {} +func (*GenesisBridge) Descriptor() ([]byte, []int) { + return fileDescriptor_6525c4ab1ce8c1c3, []int{1} +} +func (m *GenesisBridge) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisBridge) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisBridge.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GenesisBridge) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisBridge.Merge(m, src) +} +func (m *GenesisBridge) XXX_Size() int { + return m.Size() +} +func (m *GenesisBridge) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisBridge.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisBridge proto.InternalMessageInfo + +func (m *GenesisBridge) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *GenesisBridge) GetBridge() IFTBridge { + if m != nil { + return m.Bridge + } + return IFTBridge{} +} + +func init() { + proto.RegisterType((*GenesisState)(nil), "sandbox.ift.GenesisState") + proto.RegisterType((*GenesisBridge)(nil), "sandbox.ift.GenesisBridge") +} + +func init() { proto.RegisterFile("sandbox/ift/genesis.proto", fileDescriptor_6525c4ab1ce8c1c3) } + +var fileDescriptor_6525c4ab1ce8c1c3 = []byte{ + // 308 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x90, 0xb1, 0x4e, 0xf3, 0x30, + 0x14, 0x85, 0xe3, 0xf6, 0xff, 0x8b, 0x70, 0x41, 0x02, 0x53, 0x50, 0xa8, 0x90, 0xa9, 0x3a, 0x75, + 0x80, 0x58, 0x14, 0x26, 0xc6, 0x0e, 0x45, 0x4c, 0xa0, 0xd2, 0x09, 0x06, 0x94, 0x34, 0x8e, 0xb1, + 0x44, 0xec, 0xc8, 0x36, 0x12, 0xbc, 0x05, 0x8f, 0xd5, 0x09, 0x75, 0x64, 0x42, 0x28, 0x79, 0x11, + 0x84, 0x6d, 0xa4, 0x7a, 0xb3, 0xef, 0x3d, 0xe7, 0x3b, 0xf7, 0x5e, 0x78, 0xa8, 0x53, 0x91, 0x67, + 0xf2, 0x95, 0xf0, 0xc2, 0x10, 0x46, 0x05, 0xd5, 0x5c, 0x27, 0x95, 0x92, 0x46, 0xa2, 0xae, 0x6f, + 0x25, 0xbc, 0x30, 0xfd, 0x1e, 0x93, 0x4c, 0xda, 0x3a, 0xf9, 0x7d, 0x39, 0x49, 0x7f, 0x7f, 0xdd, + 0xcd, 0x0b, 0xe3, 0xca, 0xc3, 0x0f, 0x00, 0xb7, 0xae, 0x1c, 0xeb, 0xce, 0xa4, 0x86, 0xa2, 0x33, + 0xd8, 0xa9, 0x52, 0x95, 0x96, 0x3a, 0x06, 0x03, 0x30, 0xea, 0x8e, 0xf7, 0x92, 0x35, 0x76, 0x72, + 0x6b, 0x5b, 0x93, 0x7f, 0xcb, 0xaf, 0xe3, 0x68, 0xe6, 0x85, 0xe8, 0x12, 0x6e, 0x64, 0x8a, 0xe7, + 0x8c, 0xea, 0xb8, 0x35, 0x68, 0x8f, 0xba, 0xe3, 0x7e, 0xe0, 0xf1, 0xf8, 0x89, 0x95, 0x78, 0xeb, + 0x9f, 0x01, 0xdd, 0xc0, 0xdd, 0x8a, 0x8a, 0x9c, 0x0b, 0xf6, 0x68, 0x54, 0x2a, 0x74, 0x41, 0x95, + 0x8e, 0xdb, 0x96, 0x72, 0x14, 0x26, 0x3b, 0xd5, 0xdc, 0x8b, 0x3c, 0x67, 0xa7, 0x0a, 0xcb, 0x7a, + 0xf8, 0x00, 0xb7, 0x83, 0x40, 0xd4, 0x83, 0xff, 0x73, 0x2a, 0x64, 0x69, 0xf7, 0xd9, 0x9c, 0xb9, + 0x0f, 0xba, 0x80, 0x1d, 0x37, 0x42, 0xdc, 0xb2, 0x6b, 0x1e, 0x04, 0x61, 0xd7, 0xd3, 0x79, 0x30, + 0xae, 0xd7, 0x4e, 0xa6, 0xcb, 0x1a, 0x83, 0x55, 0x8d, 0xc1, 0x77, 0x8d, 0xc1, 0x7b, 0x83, 0xa3, + 0x55, 0x83, 0xa3, 0xcf, 0x06, 0x47, 0xf7, 0x27, 0x8c, 0x9b, 0xa7, 0x97, 0x2c, 0x59, 0xc8, 0x92, + 0x2c, 0xa4, 0x2e, 0xa5, 0x26, 0x1e, 0x78, 0xfa, 0x4c, 0x73, 0x46, 0x15, 0x71, 0x97, 0x37, 0x6f, + 0x15, 0xd5, 0x59, 0xc7, 0x1e, 0xff, 0xfc, 0x27, 0x00, 0x00, 0xff, 0xff, 0x94, 0x46, 0x6e, 0xad, + 0xd3, 0x01, 0x00, 0x00, +} + +func (m *GenesisState) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.PendingTransfers) > 0 { + for iNdEx := len(m.PendingTransfers) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.PendingTransfers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.Bridges) > 0 { + for iNdEx := len(m.Bridges) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Bridges[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *GenesisBridge) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenesisBridge) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisBridge) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Bridge.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + if len(m.Bridges) > 0 { + for _, e := range m.Bridges { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if len(m.PendingTransfers) > 0 { + for _, e := range m.PendingTransfers { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + return n +} + +func (m *GenesisBridge) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = m.Bridge.Size() + n += 1 + l + sovGenesis(uint64(l)) + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *GenesisState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Bridges", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Bridges = append(m.Bridges, GenesisBridge{}) + if err := m.Bridges[len(m.Bridges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PendingTransfers", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PendingTransfers = append(m.PendingTransfers, PendingTransfer{}) + if err := m.PendingTransfers[len(m.PendingTransfers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GenesisBridge) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenesisBridge: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisBridge: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Bridge", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Bridge.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/prototypes/x/ift/types/ift.pb.go b/prototypes/x/ift/types/ift.pb.go new file mode 100644 index 00000000000..30e07b2e5a2 --- /dev/null +++ b/prototypes/x/ift/types/ift.pb.go @@ -0,0 +1,978 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: sandbox/ift/ift.proto + +package types + +import ( + cosmossdk_io_math "cosmossdk.io/math" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// IFTBridge represents a counterparty IFT contract on a different chain +// connected via an IBC Light Client +type IFTBridge struct { + // The IBC client identifier on the local chain representing the counterparty + // chain + ClientId string `protobuf:"bytes,1,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` + // The address of the IFT contract on the counterparty chain + CounterpartyIftAddress string `protobuf:"bytes,2,opt,name=counterparty_ift_address,json=counterpartyIftAddress,proto3" json:"counterparty_ift_address,omitempty"` + // The identifier of the IFTSendCall constructor to use. + // For simple constructors: "evm" or "cosmos" + // For Solana: JSON format + // {"solana":{"gmp_program_id":"...","mint_pubkey":"..."}} + IftSendCallConstructor string `protobuf:"bytes,3,opt,name=ift_send_call_constructor,json=iftSendCallConstructor,proto3" json:"ift_send_call_constructor,omitempty"` +} + +func (m *IFTBridge) Reset() { *m = IFTBridge{} } +func (m *IFTBridge) String() string { return proto.CompactTextString(m) } +func (*IFTBridge) ProtoMessage() {} +func (*IFTBridge) Descriptor() ([]byte, []int) { + return fileDescriptor_7603d0b7ebb5be02, []int{0} +} +func (m *IFTBridge) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IFTBridge) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_IFTBridge.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *IFTBridge) XXX_Merge(src proto.Message) { + xxx_messageInfo_IFTBridge.Merge(m, src) +} +func (m *IFTBridge) XXX_Size() int { + return m.Size() +} +func (m *IFTBridge) XXX_DiscardUnknown() { + xxx_messageInfo_IFTBridge.DiscardUnknown(m) +} + +var xxx_messageInfo_IFTBridge proto.InternalMessageInfo + +func (m *IFTBridge) GetClientId() string { + if m != nil { + return m.ClientId + } + return "" +} + +func (m *IFTBridge) GetCounterpartyIftAddress() string { + if m != nil { + return m.CounterpartyIftAddress + } + return "" +} + +func (m *IFTBridge) GetIftSendCallConstructor() string { + if m != nil { + return m.IftSendCallConstructor + } + return "" +} + +// PendingTransfer represents a transfer that has been initiated but not yet +// completed +type PendingTransfer struct { + // The denom representing the IFT token on this chain + Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"` + // The IBC client identifier over which the transfer is being made + ClientId string `protobuf:"bytes,2,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` + // The IBC sequence number associated with the ibc packet + Sequence uint64 `protobuf:"varint,3,opt,name=sequence,proto3" json:"sequence,omitempty"` + // The address of the sender who initiated the transfer + Sender string `protobuf:"bytes,4,opt,name=sender,proto3" json:"sender,omitempty"` + // The amount of tokens involved in the pending transfer + Amount cosmossdk_io_math.Int `protobuf:"bytes,5,opt,name=amount,proto3,customtype=cosmossdk.io/math.Int" json:"amount"` +} + +func (m *PendingTransfer) Reset() { *m = PendingTransfer{} } +func (m *PendingTransfer) String() string { return proto.CompactTextString(m) } +func (*PendingTransfer) ProtoMessage() {} +func (*PendingTransfer) Descriptor() ([]byte, []int) { + return fileDescriptor_7603d0b7ebb5be02, []int{1} +} +func (m *PendingTransfer) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PendingTransfer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_PendingTransfer.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *PendingTransfer) XXX_Merge(src proto.Message) { + xxx_messageInfo_PendingTransfer.Merge(m, src) +} +func (m *PendingTransfer) XXX_Size() int { + return m.Size() +} +func (m *PendingTransfer) XXX_DiscardUnknown() { + xxx_messageInfo_PendingTransfer.DiscardUnknown(m) +} + +var xxx_messageInfo_PendingTransfer proto.InternalMessageInfo + +func (m *PendingTransfer) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *PendingTransfer) GetClientId() string { + if m != nil { + return m.ClientId + } + return "" +} + +func (m *PendingTransfer) GetSequence() uint64 { + if m != nil { + return m.Sequence + } + return 0 +} + +func (m *PendingTransfer) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +// Params defines the parameters for the IFT module +type Params struct { + // Authority is the address that can register/remove bridges (typically + // governance) + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` +} + +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_7603d0b7ebb5be02, []int{2} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +func (m *Params) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func init() { + proto.RegisterType((*IFTBridge)(nil), "sandbox.ift.IFTBridge") + proto.RegisterType((*PendingTransfer)(nil), "sandbox.ift.PendingTransfer") + proto.RegisterType((*Params)(nil), "sandbox.ift.Params") +} + +func init() { proto.RegisterFile("sandbox/ift/ift.proto", fileDescriptor_7603d0b7ebb5be02) } + +var fileDescriptor_7603d0b7ebb5be02 = []byte{ + // 416 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xc1, 0x8a, 0xd4, 0x30, + 0x18, 0x9e, 0xae, 0xbb, 0x65, 0x1b, 0x0f, 0x42, 0x98, 0x95, 0xee, 0x08, 0x5d, 0x99, 0x93, 0xa0, + 0xd3, 0x0a, 0x82, 0xe8, 0x4d, 0x67, 0x60, 0xa1, 0xb7, 0xa5, 0xbb, 0x27, 0x2f, 0x25, 0x93, 0xfc, + 0xed, 0x04, 0xdb, 0x64, 0x4c, 0xfe, 0x82, 0xf3, 0x16, 0xbe, 0x80, 0x6f, 0xb1, 0x0f, 0xb1, 0xc7, + 0x65, 0x2f, 0x8a, 0x87, 0x45, 0x66, 0x5e, 0x44, 0xda, 0x04, 0x47, 0x3d, 0x78, 0x08, 0xe4, 0xff, + 0xbf, 0xef, 0x4b, 0xbe, 0x3f, 0xf9, 0xc8, 0x89, 0x65, 0x4a, 0x2c, 0xf5, 0xe7, 0x4c, 0x56, 0xd8, + 0xaf, 0x74, 0x6d, 0x34, 0x6a, 0xfa, 0xd0, 0xb7, 0x53, 0x59, 0xe1, 0x64, 0x5c, 0xeb, 0x5a, 0x0f, + 0xfd, 0xac, 0xdf, 0x39, 0xca, 0xe4, 0x94, 0x6b, 0xdb, 0x6a, 0x5b, 0x3a, 0xc0, 0x15, 0x0e, 0x9a, + 0x7e, 0x0d, 0x48, 0x94, 0x9f, 0x5f, 0xcd, 0x8d, 0x14, 0x35, 0xd0, 0x27, 0x24, 0xe2, 0x8d, 0x04, + 0x85, 0xa5, 0x14, 0x71, 0xf0, 0x34, 0x78, 0x16, 0x15, 0xc7, 0xae, 0x91, 0x0b, 0xfa, 0x86, 0xc4, + 0x5c, 0x77, 0x0a, 0xc1, 0xac, 0x99, 0xc1, 0x4d, 0x29, 0x2b, 0x2c, 0x99, 0x10, 0x06, 0xac, 0x8d, + 0x0f, 0x06, 0xee, 0xe3, 0x3f, 0xf1, 0xbc, 0xc2, 0xf7, 0x0e, 0xa5, 0x6f, 0xc9, 0x69, 0x4f, 0xb6, + 0xa0, 0x44, 0xc9, 0x59, 0xd3, 0x94, 0x5c, 0x2b, 0x8b, 0xa6, 0xe3, 0xa8, 0x4d, 0xfc, 0xc0, 0x49, + 0x65, 0x85, 0x97, 0xa0, 0xc4, 0x82, 0x35, 0xcd, 0x62, 0x8f, 0x4e, 0xbf, 0x05, 0xe4, 0xd1, 0x05, + 0x28, 0x21, 0x55, 0x7d, 0x65, 0x98, 0xb2, 0x15, 0x18, 0x3a, 0x26, 0x47, 0x02, 0x94, 0x6e, 0xbd, + 0x43, 0x57, 0xfc, 0xed, 0xfd, 0xe0, 0x1f, 0xef, 0x13, 0x72, 0x6c, 0xe1, 0x53, 0x07, 0x8a, 0xc3, + 0x70, 0xe1, 0x61, 0xf1, 0xbb, 0xa6, 0x2f, 0x49, 0xd8, 0x3b, 0x03, 0x13, 0x1f, 0xf6, 0xaa, 0x79, + 0x7c, 0x77, 0x3d, 0x1b, 0xfb, 0x47, 0xf2, 0x13, 0x5c, 0xa2, 0x91, 0xaa, 0x2e, 0x3c, 0x8f, 0x2e, + 0x48, 0xc8, 0xda, 0x7e, 0xd4, 0xf8, 0x68, 0x50, 0x3c, 0xbf, 0xb9, 0x3f, 0x1b, 0xfd, 0xb8, 0x3f, + 0x3b, 0x71, 0x2a, 0x2b, 0x3e, 0xa6, 0x52, 0x67, 0x2d, 0xc3, 0x55, 0x9a, 0x2b, 0xbc, 0xbb, 0x9e, + 0x11, 0x7f, 0x5c, 0xae, 0xb0, 0xf0, 0xd2, 0xe9, 0x3b, 0x12, 0x5e, 0x30, 0xc3, 0x5a, 0x4b, 0x5f, + 0x93, 0x88, 0x75, 0xb8, 0xd2, 0x46, 0xe2, 0xc6, 0xcd, 0xf4, 0x1f, 0x0f, 0x7b, 0xea, 0xfc, 0xfc, + 0x66, 0x9b, 0x04, 0xb7, 0xdb, 0x24, 0xf8, 0xb9, 0x4d, 0x82, 0x2f, 0xbb, 0x64, 0x74, 0xbb, 0x4b, + 0x46, 0xdf, 0x77, 0xc9, 0xe8, 0xc3, 0x8b, 0x5a, 0xe2, 0xaa, 0x5b, 0xa6, 0x5c, 0xb7, 0xfe, 0xbb, + 0x33, 0x9f, 0x92, 0x59, 0x03, 0xa2, 0x06, 0x93, 0xb9, 0x14, 0xe1, 0x66, 0x0d, 0x76, 0x19, 0x0e, + 0x51, 0x78, 0xf5, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x6c, 0xc8, 0xa7, 0xdf, 0x61, 0x02, 0x00, 0x00, +} + +func (m *IFTBridge) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IFTBridge) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IFTBridge) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.IftSendCallConstructor) > 0 { + i -= len(m.IftSendCallConstructor) + copy(dAtA[i:], m.IftSendCallConstructor) + i = encodeVarintIft(dAtA, i, uint64(len(m.IftSendCallConstructor))) + i-- + dAtA[i] = 0x1a + } + if len(m.CounterpartyIftAddress) > 0 { + i -= len(m.CounterpartyIftAddress) + copy(dAtA[i:], m.CounterpartyIftAddress) + i = encodeVarintIft(dAtA, i, uint64(len(m.CounterpartyIftAddress))) + i-- + dAtA[i] = 0x12 + } + if len(m.ClientId) > 0 { + i -= len(m.ClientId) + copy(dAtA[i:], m.ClientId) + i = encodeVarintIft(dAtA, i, uint64(len(m.ClientId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *PendingTransfer) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PendingTransfer) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PendingTransfer) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.Amount.Size() + i -= size + if _, err := m.Amount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintIft(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + if len(m.Sender) > 0 { + i -= len(m.Sender) + copy(dAtA[i:], m.Sender) + i = encodeVarintIft(dAtA, i, uint64(len(m.Sender))) + i-- + dAtA[i] = 0x22 + } + if m.Sequence != 0 { + i = encodeVarintIft(dAtA, i, uint64(m.Sequence)) + i-- + dAtA[i] = 0x18 + } + if len(m.ClientId) > 0 { + i -= len(m.ClientId) + copy(dAtA[i:], m.ClientId) + i = encodeVarintIft(dAtA, i, uint64(len(m.ClientId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintIft(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Params) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintIft(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintIft(dAtA []byte, offset int, v uint64) int { + offset -= sovIft(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *IFTBridge) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ClientId) + if l > 0 { + n += 1 + l + sovIft(uint64(l)) + } + l = len(m.CounterpartyIftAddress) + if l > 0 { + n += 1 + l + sovIft(uint64(l)) + } + l = len(m.IftSendCallConstructor) + if l > 0 { + n += 1 + l + sovIft(uint64(l)) + } + return n +} + +func (m *PendingTransfer) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovIft(uint64(l)) + } + l = len(m.ClientId) + if l > 0 { + n += 1 + l + sovIft(uint64(l)) + } + if m.Sequence != 0 { + n += 1 + sovIft(uint64(m.Sequence)) + } + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovIft(uint64(l)) + } + l = m.Amount.Size() + n += 1 + l + sovIft(uint64(l)) + return n +} + +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovIft(uint64(l)) + } + return n +} + +func sovIft(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozIft(x uint64) (n int) { + return sovIft(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *IFTBridge) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIft + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IFTBridge: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IFTBridge: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIft + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIft + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIft + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyIftAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIft + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIft + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIft + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CounterpartyIftAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IftSendCallConstructor", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIft + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIft + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIft + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IftSendCallConstructor = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipIft(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthIft + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PendingTransfer) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIft + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PendingTransfer: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PendingTransfer: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIft + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIft + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIft + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIft + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIft + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIft + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Sequence", wireType) + } + m.Sequence = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIft + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Sequence |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIft + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIft + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIft + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIft + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIft + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIft + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipIft(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthIft + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Params) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIft + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIft + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIft + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIft + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipIft(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthIft + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipIft(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIft + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIft + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIft + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthIft + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupIft + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthIft + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthIft = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowIft = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupIft = fmt.Errorf("proto: unexpected end of group") +) diff --git a/prototypes/x/ift/types/keys.go b/prototypes/x/ift/types/keys.go new file mode 100644 index 00000000000..8c93330f21e --- /dev/null +++ b/prototypes/x/ift/types/keys.go @@ -0,0 +1,16 @@ +package types + +import "cosmossdk.io/collections" + +const ( + ModuleName = "ift" + StoreKey = ModuleName + RouterKey = ModuleName +) + +// Store key prefixes +var ( + ParamsKey = collections.NewPrefix(0) + IFTBridgePrefix = collections.NewPrefix(1) + PendingTransferKey = collections.NewPrefix(2) +) diff --git a/prototypes/x/ift/types/mint_call.go b/prototypes/x/ift/types/mint_call.go new file mode 100644 index 00000000000..d1d972c129e --- /dev/null +++ b/prototypes/x/ift/types/mint_call.go @@ -0,0 +1,28 @@ +package types + +import ( + "cosmossdk.io/math" + + "github.com/cosmos/cosmos-sdk/codec" +) + +// ConstructMintCall constructs the payload for minting tokens on the counterparty chain. +// Used for EVM and Cosmos constructors. Solana uses NewSolanaConstructor directly. +func ConstructMintCall( + cdc codec.BinaryCodec, + receiver string, + amount math.Int, + constructorType string, + denom string, + icaAddress string, +) ([]byte, error) { + baseType := ParseConstructorType(constructorType) + switch baseType { + case ConstructorEVM: + return EVMConstructor{}.ConstructMintCall(cdc, receiver, amount, denom, icaAddress) + case ConstructorCosmos: + return CosmosTxConstructor{}.ConstructMintCall(cdc, receiver, amount, denom, icaAddress) + default: + return nil, ErrInvalidConstructorType.Wrapf("type: %s", constructorType) + } +} diff --git a/prototypes/x/ift/types/mint_call_test.go b/prototypes/x/ift/types/mint_call_test.go new file mode 100644 index 00000000000..6138913f7a2 --- /dev/null +++ b/prototypes/x/ift/types/mint_call_test.go @@ -0,0 +1,420 @@ +package types_test + +import ( + "crypto/sha256" + "encoding/binary" + "testing" + + "github.com/cosmos/gogoproto/proto" + solanapb "github.com/cosmos/solidity-ibc-eureka/packages/go-proto/solana" + "github.com/cosmos/sandbox-ledger/x/ift/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/gagliardetto/solana-go" + "github.com/stretchr/testify/require" + + "cosmossdk.io/math" + + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + + gmptypes "github.com/cosmos/ibc-go/v11/modules/apps/27-gmp/types" +) + +const ( + testCounterpartyClientID = "08-wasm-0" // Solana client tracking Cosmos + testSenderAddress = "wf1ift" +) + +// TestConstructMintCall_CosmosTx_Deserializable verifies that the payload +// constructed by ConstructMintCall can be deserialized by the GMP module. +// This test catches the bug where JSON encoding with @type field was used +// instead of proper protobuf CosmosTx encoding. +func TestConstructMintCall_CosmosTx_Deserializable(t *testing.T) { + registry := codectypes.NewInterfaceRegistry() + registry.RegisterImplementations((*sdk.Msg)(nil), &types.MsgIFTMint{}) + cdc := codec.NewProtoCodec(registry) + + receiver := "cosmos1y6xz2ggfc0pcsmyjlekh0j9pxh6hk87yfwcjct" + icaAddress := "cosmos1uu635yk0hz3cvrypnryrggltrjq7975jrmeg97" + amount := math.NewInt(1000000) + denom := "testdenom" + + payload, err := types.ConstructMintCall( + cdc, + receiver, + amount, + types.ConstructorCosmos, + denom, + icaAddress, + ) + require.NoError(t, err) + require.NotEmpty(t, payload) + + // Verify payload can be deserialized by GMP module + msgs, err := gmptypes.DeserializeCosmosTx(cdc, payload) + require.NoError(t, err, "GMP module should be able to deserialize the payload") + require.Len(t, msgs, 1) + + mintMsg, ok := msgs[0].(*types.MsgIFTMint) + require.True(t, ok, "deserialized message should be MsgIFTMint") + require.Equal(t, receiver, mintMsg.Receiver) + require.Equal(t, icaAddress, mintMsg.Signer) + require.Equal(t, denom, mintMsg.Denom) + require.True(t, amount.Equal(mintMsg.Amount)) +} + +// TestConstructMintCall_UnknownConstructor verifies that unknown constructor +// types return an error. +func TestConstructMintCall_UnknownConstructor(t *testing.T) { + registry := codectypes.NewInterfaceRegistry() + registry.RegisterImplementations((*sdk.Msg)(nil), &types.MsgIFTMint{}) + cdc := codec.NewProtoCodec(registry) + + _, err := types.ConstructMintCall( + cdc, + "cosmos1y6xz2ggfc0pcsmyjlekh0j9pxh6hk87yfwcjct", + math.NewInt(1000), + "invalid", + "testdenom", + "cosmos1uu635yk0hz3cvrypnryrggltrjq7975jrmeg97", + ) + require.Error(t, err) + require.Contains(t, err.Error(), "invalid constructor type") +} + +// TestConstructMintCall_EVM_ValidAddress verifies valid EVM addresses are accepted +func TestConstructMintCall_EVM_ValidAddress(t *testing.T) { + registry := codectypes.NewInterfaceRegistry() + cdc := codec.NewProtoCodec(registry) + + validAddresses := []string{ + "0x1234567890abcdef1234567890abcdef12345678", + "0xABCDEF1234567890ABCDEF1234567890ABCDEF12", + "0x1111111111111111111111111111111111111111", + } + + for _, addr := range validAddresses { + payload, err := types.ConstructMintCall( + cdc, + addr, + math.NewInt(1000), + types.ConstructorEVM, + "", "", + ) + require.NoError(t, err, "valid address %s should be accepted", addr) + require.NotEmpty(t, payload) + expectedSelector := crypto.Keccak256([]byte("iftMint(address,uint256)"))[:4] + require.Equal(t, expectedSelector, payload[:4], "should have correct selector") + } +} + +// TestConstructMintCall_EVM_InvalidAddress verifies invalid EVM addresses are rejected +func TestConstructMintCall_EVM_InvalidAddress(t *testing.T) { + registry := codectypes.NewInterfaceRegistry() + cdc := codec.NewProtoCodec(registry) + + cases := []struct { + name string + receiver string + errMsg string + }{ + { + name: "cosmos address", + receiver: "cosmos1y6xz2ggfc0pcsmyjlekh0j9pxh6hk87yfwcjct", + errMsg: "invalid EVM address", + }, + { + name: "invalid hex characters", + receiver: "0xGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG", + errMsg: "invalid EVM address", + }, + { + name: "too short", + receiver: "0x1234", + errMsg: "invalid EVM address", + }, + { + name: "empty string", + receiver: "", + errMsg: "invalid EVM address", + }, + { + name: "plain text", + receiver: "invalid", + errMsg: "invalid EVM address", + }, + { + name: "too long", + receiver: "0x1234567890abcdef1234567890abcdef1234567890", + errMsg: "invalid EVM address", + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + _, err := types.ConstructMintCall( + cdc, + tc.receiver, + math.NewInt(1000), + types.ConstructorEVM, + "", "", + ) + require.Error(t, err) + require.Contains(t, err.Error(), tc.errMsg) + }) + } +} + +// TestConstructMintCall_EVM_ZeroAddress verifies zero address is rejected +func TestConstructMintCall_EVM_ZeroAddress(t *testing.T) { + registry := codectypes.NewInterfaceRegistry() + cdc := codec.NewProtoCodec(registry) + + _, err := types.ConstructMintCall( + cdc, + "0x0000000000000000000000000000000000000000", + math.NewInt(1000), + types.ConstructorEVM, + "", "", + ) + require.Error(t, err) + require.Contains(t, err.Error(), "zero address not allowed") +} + +// TestConstructMintCall_Cosmos_ValidAddresses verifies valid Cosmos addresses with different prefixes are accepted +func TestConstructMintCall_Cosmos_ValidAddresses(t *testing.T) { + registry := codectypes.NewInterfaceRegistry() + registry.RegisterImplementations((*sdk.Msg)(nil), &types.MsgIFTMint{}) + cdc := codec.NewProtoCodec(registry) + + // Valid bech32 addresses with different prefixes + validAddresses := []string{ + "cosmos1y6xz2ggfc0pcsmyjlekh0j9pxh6hk87yfwcjct", + "cosmos1hsk6jryyqjfhp5dhc55tc9jtckygx0eph6dd02", + } + + for _, addr := range validAddresses { + payload, err := types.ConstructMintCall( + cdc, + addr, + math.NewInt(1000), + types.ConstructorCosmos, + "testdenom", + "cosmos1uu635yk0hz3cvrypnryrggltrjq7975jrmeg97", + ) + require.NoError(t, err, "valid address %s should be accepted", addr) + require.NotEmpty(t, payload) + } +} + +// TestConstructMintCall_Cosmos_InvalidAddresses verifies invalid Cosmos addresses are rejected +func TestConstructMintCall_Cosmos_InvalidAddresses(t *testing.T) { + registry := codectypes.NewInterfaceRegistry() + registry.RegisterImplementations((*sdk.Msg)(nil), &types.MsgIFTMint{}) + cdc := codec.NewProtoCodec(registry) + + cases := []struct { + name string + receiver string + errMsg string + }{ + { + name: "empty string", + receiver: "", + errMsg: "address cannot be empty", + }, + { + name: "whitespace only", + receiver: " ", + errMsg: "address cannot be empty", + }, + { + name: "invalid bech32", + receiver: "notabech32address", + errMsg: "invalid bech32", + }, + { + name: "EVM address", + receiver: "0x742d35Cc6634C0532925a3b844Bc9e7595f3aD12", + errMsg: "invalid bech32", + }, + { + name: "truncated address", + receiver: "cosmos1abc", + errMsg: "invalid bech32", + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + _, err := types.ConstructMintCall( + cdc, + tc.receiver, + math.NewInt(1000), + types.ConstructorCosmos, + "testdenom", + "cosmos1uu635yk0hz3cvrypnryrggltrjq7975jrmeg97", + ) + require.Error(t, err) + require.Contains(t, err.Error(), tc.errMsg) + }) + } +} + +// TestSolanaConstructor_ConstructMintCall_ValidAddress verifies valid Solana addresses are accepted +func TestSolanaConstructor_ConstructMintCall_ValidAddress(t *testing.T) { + registry := codectypes.NewInterfaceRegistry() + cdc := codec.NewProtoCodec(registry) + + // Setup constructor with test config using well-known program IDs + constructor := &types.SolanaConstructor{ + IFTProgramID: solana.TokenProgramID, + GMPProgramID: solana.Token2022ProgramID, + Mint: solana.SPLAssociatedTokenAccountProgramID, + SenderAddress: testSenderAddress, + CounterpartyClientID: testCounterpartyClientID, + } + + validAddresses := []string{ + "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin", + solana.SystemProgramID.String(), + solana.TokenProgramID.String(), + } + + for _, addr := range validAddresses { + payload, err := constructor.ConstructMintCall( + cdc, + addr, + math.NewInt(1000), + "", "", + ) + require.NoError(t, err, "valid address %s should be accepted", addr) + require.NotEmpty(t, payload) + + // Verify payload is valid GMPSolanaPayload + var solanaPayload solanapb.GMPSolanaPayload + err = proto.Unmarshal(payload, &solanaPayload) + require.NoError(t, err, "payload should be valid GMPSolanaPayload") + require.NotEmpty(t, solanaPayload.Accounts) + require.NotEmpty(t, solanaPayload.Data) + require.Equal(t, uint64(3_000_000), solanaPayload.PrefundLamports) + } +} + +// TestSolanaConstructor_ConstructMintCall_InvalidAddress verifies invalid Solana addresses are rejected +func TestSolanaConstructor_ConstructMintCall_InvalidAddress(t *testing.T) { + registry := codectypes.NewInterfaceRegistry() + cdc := codec.NewProtoCodec(registry) + + constructor := &types.SolanaConstructor{ + IFTProgramID: solana.TokenProgramID, + GMPProgramID: solana.Token2022ProgramID, + Mint: solana.SPLAssociatedTokenAccountProgramID, + SenderAddress: testSenderAddress, + CounterpartyClientID: testCounterpartyClientID, + } + + cases := []struct { + name string + receiver string + errMsg string + }{ + { + name: "cosmos address", + receiver: "cosmos1y6xz2ggfc0pcsmyjlekh0j9pxh6hk87yfwcjct", + errMsg: "invalid Solana address", + }, + { + name: "EVM address", + receiver: "0x742d35Cc6634C0532925a3b844Bc9e7595f3aD12", + errMsg: "invalid Solana address", + }, + { + name: "empty string", + receiver: "", + errMsg: "invalid Solana address", + }, + { + name: "invalid base58", + receiver: "0OIl11111111111111111111111111111", + errMsg: "invalid Solana address", + }, + { + name: "too short", + receiver: "abc123", + errMsg: "invalid Solana address", + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + _, err := constructor.ConstructMintCall( + cdc, + tc.receiver, + math.NewInt(1000), + "", "", + ) + require.Error(t, err) + require.Contains(t, err.Error(), tc.errMsg) + }) + } +} + +// TestSolanaConstructor_ConstructMintCall_PayloadStructure verifies the payload structure +func TestSolanaConstructor_ConstructMintCall_PayloadStructure(t *testing.T) { + registry := codectypes.NewInterfaceRegistry() + cdc := codec.NewProtoCodec(registry) + + constructor := &types.SolanaConstructor{ + IFTProgramID: solana.TokenProgramID, + GMPProgramID: solana.Token2022ProgramID, + Mint: solana.SPLAssociatedTokenAccountProgramID, + SenderAddress: testSenderAddress, + CounterpartyClientID: testCounterpartyClientID, + } + + receiver := "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" + amount := math.NewInt(1000000) + + payload, err := constructor.ConstructMintCall(cdc, receiver, amount, "", "") + require.NoError(t, err) + + var solanaPayload solanapb.GMPSolanaPayload + err = proto.Unmarshal(payload, &solanaPayload) + require.NoError(t, err) + + // Verify accounts list (12 accounts, payer is explicit GMP PDA at position 8) + require.Len(t, solanaPayload.Accounts, 12, "should have 12 accounts (payer is explicit)") + + require.Equal(t, uint64(3_000_000), solanaPayload.PrefundLamports) + + expectedDiscriminator := sha256.Sum256([]byte("global:ift_mint")) + require.Equal(t, expectedDiscriminator[:8], solanaPayload.Data[:8], "should have correct Anchor discriminator") + + data := solanaPayload.Data[8:] // skip discriminator + + receiverPubkey, err := solana.PublicKeyFromBase58(receiver) + require.NoError(t, err) + require.Equal(t, receiverPubkey[:], data[:32], "receiver pubkey should match") + + decodedAmount := binary.LittleEndian.Uint64(data[32:40]) + require.Equal(t, amount.Uint64(), decodedAmount, "amount should match") +} + +// TestSolanaConstructor_ConstructMintCall_MissingConfig verifies error when Solana config is missing +func TestSolanaConstructor_ConstructMintCall_MissingConfig(t *testing.T) { + registry := codectypes.NewInterfaceRegistry() + cdc := codec.NewProtoCodec(registry) + + constructor := &types.SolanaConstructor{} // Missing Solana config (zero values) + + _, err := constructor.ConstructMintCall( + cdc, + "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin", + math.NewInt(1000), + "", "", + ) + require.Error(t, err) + require.Contains(t, err.Error(), "solana config is required") +} diff --git a/prototypes/x/ift/types/msgs.go b/prototypes/x/ift/types/msgs.go new file mode 100644 index 00000000000..f72c657e3f5 --- /dev/null +++ b/prototypes/x/ift/types/msgs.go @@ -0,0 +1,28 @@ +package types +import ( + "strings" + + errorsmod "cosmossdk.io/errors" +) + +// ValidateBasic performs stateless validation on MsgRegisterIFTBridge. +// It also normalizes Solana addresses by trimming whitespace. +func (m *MsgRegisterIFTBridge) ValidateBasic() error { + if strings.TrimSpace(m.Signer) == "" { + return errorsmod.Wrap(ErrInvalidSigner, "signer cannot be empty") + } + if !strings.HasPrefix(m.Denom, "factory/") { + return errorsmod.Wrapf(ErrInvalidDenom, "denom must be a tokenfactory denom, got %s", m.Denom) + } + if strings.TrimSpace(m.ClientId) == "" { + return errorsmod.Wrap(ErrInvalidClientID, "client id cannot be empty") + } + m.CounterpartyIftAddress = strings.TrimSpace(m.CounterpartyIftAddress) + if m.CounterpartyIftAddress == "" { + return errorsmod.Wrap(ErrInvalidReceiver, "counterparty IFT address cannot be empty") + } + if err := ValidateConstructorString(m.IftSendCallConstructor); err != nil { + return err + } + return ValidateCounterpartyAddress(m.IftSendCallConstructor, m.CounterpartyIftAddress) +} diff --git a/prototypes/x/ift/types/query.pb.go b/prototypes/x/ift/types/query.pb.go new file mode 100644 index 00000000000..e9ec55b798e --- /dev/null +++ b/prototypes/x/ift/types/query.pb.go @@ -0,0 +1,2405 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: sandbox/ift/query.proto + +package types + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type QueryIFTBridgeRequest struct { + Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"` + ClientId string `protobuf:"bytes,2,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` +} + +func (m *QueryIFTBridgeRequest) Reset() { *m = QueryIFTBridgeRequest{} } +func (m *QueryIFTBridgeRequest) String() string { return proto.CompactTextString(m) } +func (*QueryIFTBridgeRequest) ProtoMessage() {} +func (*QueryIFTBridgeRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_dff00e7f31cbb5cc, []int{0} +} +func (m *QueryIFTBridgeRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryIFTBridgeRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryIFTBridgeRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryIFTBridgeRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryIFTBridgeRequest.Merge(m, src) +} +func (m *QueryIFTBridgeRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryIFTBridgeRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryIFTBridgeRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryIFTBridgeRequest proto.InternalMessageInfo + +func (m *QueryIFTBridgeRequest) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *QueryIFTBridgeRequest) GetClientId() string { + if m != nil { + return m.ClientId + } + return "" +} + +type QueryIFTBridgeResponse struct { + Bridge IFTBridge `protobuf:"bytes,1,opt,name=bridge,proto3" json:"bridge"` +} + +func (m *QueryIFTBridgeResponse) Reset() { *m = QueryIFTBridgeResponse{} } +func (m *QueryIFTBridgeResponse) String() string { return proto.CompactTextString(m) } +func (*QueryIFTBridgeResponse) ProtoMessage() {} +func (*QueryIFTBridgeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_dff00e7f31cbb5cc, []int{1} +} +func (m *QueryIFTBridgeResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryIFTBridgeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryIFTBridgeResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryIFTBridgeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryIFTBridgeResponse.Merge(m, src) +} +func (m *QueryIFTBridgeResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryIFTBridgeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryIFTBridgeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryIFTBridgeResponse proto.InternalMessageInfo + +func (m *QueryIFTBridgeResponse) GetBridge() IFTBridge { + if m != nil { + return m.Bridge + } + return IFTBridge{} +} + +type QueryIFTBridgesRequest struct { +} + +func (m *QueryIFTBridgesRequest) Reset() { *m = QueryIFTBridgesRequest{} } +func (m *QueryIFTBridgesRequest) String() string { return proto.CompactTextString(m) } +func (*QueryIFTBridgesRequest) ProtoMessage() {} +func (*QueryIFTBridgesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_dff00e7f31cbb5cc, []int{2} +} +func (m *QueryIFTBridgesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryIFTBridgesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryIFTBridgesRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryIFTBridgesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryIFTBridgesRequest.Merge(m, src) +} +func (m *QueryIFTBridgesRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryIFTBridgesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryIFTBridgesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryIFTBridgesRequest proto.InternalMessageInfo + +type QueryIFTBridgesResponse struct { + Bridges []DenomBridge `protobuf:"bytes,1,rep,name=bridges,proto3" json:"bridges"` +} + +func (m *QueryIFTBridgesResponse) Reset() { *m = QueryIFTBridgesResponse{} } +func (m *QueryIFTBridgesResponse) String() string { return proto.CompactTextString(m) } +func (*QueryIFTBridgesResponse) ProtoMessage() {} +func (*QueryIFTBridgesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_dff00e7f31cbb5cc, []int{3} +} +func (m *QueryIFTBridgesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryIFTBridgesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryIFTBridgesResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryIFTBridgesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryIFTBridgesResponse.Merge(m, src) +} +func (m *QueryIFTBridgesResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryIFTBridgesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryIFTBridgesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryIFTBridgesResponse proto.InternalMessageInfo + +func (m *QueryIFTBridgesResponse) GetBridges() []DenomBridge { + if m != nil { + return m.Bridges + } + return nil +} + +type QueryIFTBridgesByDenomRequest struct { + Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"` +} + +func (m *QueryIFTBridgesByDenomRequest) Reset() { *m = QueryIFTBridgesByDenomRequest{} } +func (m *QueryIFTBridgesByDenomRequest) String() string { return proto.CompactTextString(m) } +func (*QueryIFTBridgesByDenomRequest) ProtoMessage() {} +func (*QueryIFTBridgesByDenomRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_dff00e7f31cbb5cc, []int{4} +} +func (m *QueryIFTBridgesByDenomRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryIFTBridgesByDenomRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryIFTBridgesByDenomRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryIFTBridgesByDenomRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryIFTBridgesByDenomRequest.Merge(m, src) +} +func (m *QueryIFTBridgesByDenomRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryIFTBridgesByDenomRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryIFTBridgesByDenomRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryIFTBridgesByDenomRequest proto.InternalMessageInfo + +func (m *QueryIFTBridgesByDenomRequest) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +type QueryIFTBridgesByDenomResponse struct { + Bridges []IFTBridge `protobuf:"bytes,1,rep,name=bridges,proto3" json:"bridges"` +} + +func (m *QueryIFTBridgesByDenomResponse) Reset() { *m = QueryIFTBridgesByDenomResponse{} } +func (m *QueryIFTBridgesByDenomResponse) String() string { return proto.CompactTextString(m) } +func (*QueryIFTBridgesByDenomResponse) ProtoMessage() {} +func (*QueryIFTBridgesByDenomResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_dff00e7f31cbb5cc, []int{5} +} +func (m *QueryIFTBridgesByDenomResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryIFTBridgesByDenomResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryIFTBridgesByDenomResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryIFTBridgesByDenomResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryIFTBridgesByDenomResponse.Merge(m, src) +} +func (m *QueryIFTBridgesByDenomResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryIFTBridgesByDenomResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryIFTBridgesByDenomResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryIFTBridgesByDenomResponse proto.InternalMessageInfo + +func (m *QueryIFTBridgesByDenomResponse) GetBridges() []IFTBridge { + if m != nil { + return m.Bridges + } + return nil +} + +type QueryPendingTransferRequest struct { + Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"` + ClientId string `protobuf:"bytes,2,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` + Sequence uint64 `protobuf:"varint,3,opt,name=sequence,proto3" json:"sequence,omitempty"` +} + +func (m *QueryPendingTransferRequest) Reset() { *m = QueryPendingTransferRequest{} } +func (m *QueryPendingTransferRequest) String() string { return proto.CompactTextString(m) } +func (*QueryPendingTransferRequest) ProtoMessage() {} +func (*QueryPendingTransferRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_dff00e7f31cbb5cc, []int{6} +} +func (m *QueryPendingTransferRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryPendingTransferRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryPendingTransferRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryPendingTransferRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPendingTransferRequest.Merge(m, src) +} +func (m *QueryPendingTransferRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryPendingTransferRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPendingTransferRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryPendingTransferRequest proto.InternalMessageInfo + +func (m *QueryPendingTransferRequest) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *QueryPendingTransferRequest) GetClientId() string { + if m != nil { + return m.ClientId + } + return "" +} + +func (m *QueryPendingTransferRequest) GetSequence() uint64 { + if m != nil { + return m.Sequence + } + return 0 +} + +type QueryPendingTransferResponse struct { + PendingTransfer PendingTransfer `protobuf:"bytes,1,opt,name=pending_transfer,json=pendingTransfer,proto3" json:"pending_transfer"` +} + +func (m *QueryPendingTransferResponse) Reset() { *m = QueryPendingTransferResponse{} } +func (m *QueryPendingTransferResponse) String() string { return proto.CompactTextString(m) } +func (*QueryPendingTransferResponse) ProtoMessage() {} +func (*QueryPendingTransferResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_dff00e7f31cbb5cc, []int{7} +} +func (m *QueryPendingTransferResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryPendingTransferResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryPendingTransferResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryPendingTransferResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPendingTransferResponse.Merge(m, src) +} +func (m *QueryPendingTransferResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryPendingTransferResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPendingTransferResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryPendingTransferResponse proto.InternalMessageInfo + +func (m *QueryPendingTransferResponse) GetPendingTransfer() PendingTransfer { + if m != nil { + return m.PendingTransfer + } + return PendingTransfer{} +} + +type QueryParamsRequest struct { +} + +func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } +func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_dff00e7f31cbb5cc, []int{8} +} +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) +} +func (m *QueryParamsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo + +type QueryParamsResponse struct { + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } +func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_dff00e7f31cbb5cc, []int{9} +} +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) +} +func (m *QueryParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo + +func (m *QueryParamsResponse) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +// DenomBridge wraps denom with its bridge info for query responses +type DenomBridge struct { + Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"` + Bridge IFTBridge `protobuf:"bytes,2,opt,name=bridge,proto3" json:"bridge"` +} + +func (m *DenomBridge) Reset() { *m = DenomBridge{} } +func (m *DenomBridge) String() string { return proto.CompactTextString(m) } +func (*DenomBridge) ProtoMessage() {} +func (*DenomBridge) Descriptor() ([]byte, []int) { + return fileDescriptor_dff00e7f31cbb5cc, []int{10} +} +func (m *DenomBridge) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DenomBridge) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DenomBridge.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *DenomBridge) XXX_Merge(src proto.Message) { + xxx_messageInfo_DenomBridge.Merge(m, src) +} +func (m *DenomBridge) XXX_Size() int { + return m.Size() +} +func (m *DenomBridge) XXX_DiscardUnknown() { + xxx_messageInfo_DenomBridge.DiscardUnknown(m) +} + +var xxx_messageInfo_DenomBridge proto.InternalMessageInfo + +func (m *DenomBridge) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *DenomBridge) GetBridge() IFTBridge { + if m != nil { + return m.Bridge + } + return IFTBridge{} +} + +func init() { + proto.RegisterType((*QueryIFTBridgeRequest)(nil), "sandbox.ift.QueryIFTBridgeRequest") + proto.RegisterType((*QueryIFTBridgeResponse)(nil), "sandbox.ift.QueryIFTBridgeResponse") + proto.RegisterType((*QueryIFTBridgesRequest)(nil), "sandbox.ift.QueryIFTBridgesRequest") + proto.RegisterType((*QueryIFTBridgesResponse)(nil), "sandbox.ift.QueryIFTBridgesResponse") + proto.RegisterType((*QueryIFTBridgesByDenomRequest)(nil), "sandbox.ift.QueryIFTBridgesByDenomRequest") + proto.RegisterType((*QueryIFTBridgesByDenomResponse)(nil), "sandbox.ift.QueryIFTBridgesByDenomResponse") + proto.RegisterType((*QueryPendingTransferRequest)(nil), "sandbox.ift.QueryPendingTransferRequest") + proto.RegisterType((*QueryPendingTransferResponse)(nil), "sandbox.ift.QueryPendingTransferResponse") + proto.RegisterType((*QueryParamsRequest)(nil), "sandbox.ift.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "sandbox.ift.QueryParamsResponse") + proto.RegisterType((*DenomBridge)(nil), "sandbox.ift.DenomBridge") +} + +func init() { proto.RegisterFile("sandbox/ift/query.proto", fileDescriptor_dff00e7f31cbb5cc) } + +var fileDescriptor_dff00e7f31cbb5cc = []byte{ + // 632 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x4f, 0x6f, 0xd3, 0x4e, + 0x10, 0x8d, 0xfb, 0x27, 0xbf, 0x76, 0x72, 0xe8, 0x8f, 0x6d, 0xda, 0x5a, 0x6e, 0x70, 0x23, 0x53, + 0x89, 0x94, 0x3f, 0x59, 0x91, 0x52, 0x84, 0xc4, 0x2d, 0x42, 0x15, 0x45, 0x02, 0x41, 0xe8, 0x01, + 0xb8, 0x54, 0x4e, 0xbc, 0x71, 0x2d, 0x25, 0x5e, 0xd7, 0xeb, 0x48, 0x44, 0x51, 0x2e, 0x48, 0xdc, + 0x11, 0x7c, 0x04, 0x8e, 0x7c, 0x91, 0x1e, 0x2b, 0x71, 0xe1, 0x84, 0x50, 0xc2, 0x07, 0x41, 0xd9, + 0x5d, 0xbb, 0xb1, 0xe3, 0x58, 0x11, 0xb7, 0x78, 0xe6, 0xcd, 0xbc, 0x37, 0x3b, 0x6f, 0x14, 0xd8, + 0x61, 0xa6, 0x6b, 0x35, 0xe9, 0x07, 0xec, 0xb4, 0x03, 0x7c, 0xd1, 0x23, 0x7e, 0xbf, 0xea, 0xf9, + 0x34, 0xa0, 0xa8, 0x20, 0x13, 0x55, 0xa7, 0x1d, 0x68, 0x45, 0x9b, 0xda, 0x94, 0xc7, 0xf1, 0xe4, + 0x97, 0x80, 0x68, 0x25, 0x9b, 0x52, 0xbb, 0x43, 0xb0, 0xe9, 0x39, 0xd8, 0x74, 0x5d, 0x1a, 0x98, + 0x81, 0x43, 0x5d, 0x26, 0xb3, 0x5b, 0xd3, 0x9d, 0x9d, 0x76, 0x20, 0xc2, 0xc6, 0x73, 0xd8, 0x7a, + 0x3d, 0xa1, 0x39, 0x39, 0x3e, 0xad, 0xfb, 0x8e, 0x65, 0x93, 0x06, 0xb9, 0xe8, 0x11, 0x16, 0xa0, + 0x22, 0xac, 0x5a, 0xc4, 0xa5, 0x5d, 0x55, 0x29, 0x2b, 0x95, 0xf5, 0x86, 0xf8, 0x40, 0xbb, 0xb0, + 0xde, 0xea, 0x38, 0xc4, 0x0d, 0xce, 0x1c, 0x4b, 0x5d, 0xe2, 0x99, 0x35, 0x11, 0x38, 0xb1, 0x8c, + 0x97, 0xb0, 0x9d, 0xec, 0xc5, 0x3c, 0xea, 0x32, 0x82, 0x1e, 0x42, 0xbe, 0xc9, 0x23, 0xbc, 0x5b, + 0xa1, 0xb6, 0x5d, 0x9d, 0x1a, 0xa7, 0x1a, 0xe1, 0xeb, 0x2b, 0x97, 0xbf, 0xf6, 0x72, 0x0d, 0x89, + 0x35, 0xd4, 0x64, 0x3f, 0x26, 0xc5, 0x19, 0x6f, 0x60, 0x67, 0x26, 0x23, 0xa9, 0x1e, 0xc3, 0x7f, + 0xa2, 0x9c, 0xa9, 0x4a, 0x79, 0xb9, 0x52, 0xa8, 0xa9, 0x31, 0xae, 0xa7, 0x93, 0x31, 0x62, 0x6c, + 0x21, 0xdc, 0x38, 0x82, 0x9b, 0x89, 0xa6, 0xf5, 0x3e, 0x87, 0x67, 0x3e, 0x89, 0xf1, 0x16, 0xf4, + 0x79, 0x65, 0x52, 0xd2, 0xa3, 0xa4, 0xa4, 0xec, 0xf1, 0x23, 0x41, 0x1d, 0xd8, 0xe5, 0x9d, 0x5f, + 0x11, 0xd7, 0x72, 0x5c, 0xfb, 0xd4, 0x37, 0x5d, 0xd6, 0x26, 0xfe, 0xbf, 0x6f, 0x08, 0x69, 0xb0, + 0xc6, 0x26, 0xd5, 0x6e, 0x8b, 0xa8, 0xcb, 0x65, 0xa5, 0xb2, 0xd2, 0x88, 0xbe, 0x8d, 0x2e, 0x94, + 0xd2, 0xd9, 0xe4, 0x14, 0x2f, 0xe0, 0x7f, 0x4f, 0xa4, 0xce, 0x02, 0x99, 0x93, 0xdb, 0x2c, 0xc5, + 0xc6, 0x49, 0xd4, 0xcb, 0xa1, 0x36, 0xbc, 0x78, 0xd8, 0x28, 0x02, 0x12, 0x74, 0xa6, 0x6f, 0x76, + 0xa3, 0xc5, 0x3e, 0x83, 0xcd, 0x58, 0x54, 0x72, 0x3f, 0x80, 0xbc, 0xc7, 0x23, 0x92, 0x71, 0x33, + 0xce, 0xc8, 0x53, 0xa1, 0x79, 0x04, 0xd0, 0x78, 0x07, 0x85, 0xa9, 0x5d, 0xcf, 0x79, 0xac, 0x6b, + 0x5f, 0x2e, 0x2d, 0xee, 0xcb, 0xda, 0xf7, 0x55, 0x58, 0xe5, 0x2a, 0xd1, 0x27, 0x05, 0xd6, 0x23, + 0x14, 0x32, 0x62, 0xd5, 0xa9, 0x67, 0xa5, 0xdd, 0xca, 0xc4, 0x88, 0x71, 0x0d, 0xfc, 0xf1, 0xc7, + 0x9f, 0xaf, 0x4b, 0x07, 0xe8, 0x36, 0x9e, 0x3e, 0x5a, 0xc1, 0x8e, 0x07, 0x5c, 0xfa, 0x10, 0x0f, + 0xa2, 0x35, 0x0f, 0x51, 0x0f, 0xe0, 0xda, 0x7e, 0x28, 0x8b, 0x23, 0x7c, 0x69, 0x6d, 0x3f, 0x1b, + 0x24, 0x95, 0x94, 0xb8, 0x92, 0x6d, 0x54, 0x4c, 0x51, 0xc2, 0xd0, 0x17, 0x05, 0x6e, 0xcc, 0xd8, + 0x1e, 0xdd, 0xc9, 0xea, 0x1c, 0x3f, 0x29, 0xed, 0xee, 0x42, 0x58, 0x29, 0x66, 0x9f, 0x8b, 0xd1, + 0x51, 0x29, 0x4d, 0x4c, 0xf8, 0x2e, 0xe8, 0x9b, 0x02, 0x1b, 0x09, 0x0f, 0xa2, 0xca, 0x2c, 0x4d, + 0xfa, 0x51, 0x69, 0x07, 0x0b, 0x20, 0xa5, 0x9c, 0x27, 0x5c, 0xce, 0x11, 0x3a, 0x8c, 0xc9, 0x91, + 0x3e, 0x4f, 0x5b, 0x13, 0x1e, 0x84, 0xc7, 0x36, 0x44, 0xe7, 0x90, 0x17, 0xb6, 0x45, 0x7b, 0x29, + 0x8c, 0xd3, 0x37, 0xa1, 0x95, 0xe7, 0x03, 0xa4, 0x92, 0x5d, 0xae, 0x64, 0x0b, 0x6d, 0xc6, 0x95, + 0x88, 0xb3, 0x38, 0xbe, 0x1c, 0xe9, 0xca, 0xd5, 0x48, 0x57, 0x7e, 0x8f, 0x74, 0xe5, 0xf3, 0x58, + 0xcf, 0x5d, 0x8d, 0xf5, 0xdc, 0xcf, 0xb1, 0x9e, 0x7b, 0x7f, 0xcf, 0x76, 0x82, 0xf3, 0x5e, 0xb3, + 0xda, 0xa2, 0x5d, 0xdc, 0xa2, 0xac, 0x4b, 0x59, 0x58, 0x7f, 0xbf, 0x43, 0x2c, 0x9b, 0xf8, 0x58, + 0x34, 0x0a, 0xfa, 0x1e, 0x61, 0xcd, 0x3c, 0xff, 0xc3, 0x38, 0xfc, 0x1b, 0x00, 0x00, 0xff, 0xff, + 0xfa, 0x21, 0xb7, 0xac, 0xa3, 0x06, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + // IFTBridge queries the IFT bridge information for a specific denom and + // client_id + IFTBridge(ctx context.Context, in *QueryIFTBridgeRequest, opts ...grpc.CallOption) (*QueryIFTBridgeResponse, error) + // IFTBridges queries all IFT bridges + IFTBridges(ctx context.Context, in *QueryIFTBridgesRequest, opts ...grpc.CallOption) (*QueryIFTBridgesResponse, error) + // IFTBridgesByDenom queries all IFT bridges for a specific denom + IFTBridgesByDenom(ctx context.Context, in *QueryIFTBridgesByDenomRequest, opts ...grpc.CallOption) (*QueryIFTBridgesByDenomResponse, error) + // PendingTransfer queries a pending transfer + PendingTransfer(ctx context.Context, in *QueryPendingTransferRequest, opts ...grpc.CallOption) (*QueryPendingTransferResponse, error) + // Params queries the module parameters + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) IFTBridge(ctx context.Context, in *QueryIFTBridgeRequest, opts ...grpc.CallOption) (*QueryIFTBridgeResponse, error) { + out := new(QueryIFTBridgeResponse) + err := c.cc.Invoke(ctx, "/sandbox.ift.Query/IFTBridge", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) IFTBridges(ctx context.Context, in *QueryIFTBridgesRequest, opts ...grpc.CallOption) (*QueryIFTBridgesResponse, error) { + out := new(QueryIFTBridgesResponse) + err := c.cc.Invoke(ctx, "/sandbox.ift.Query/IFTBridges", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) IFTBridgesByDenom(ctx context.Context, in *QueryIFTBridgesByDenomRequest, opts ...grpc.CallOption) (*QueryIFTBridgesByDenomResponse, error) { + out := new(QueryIFTBridgesByDenomResponse) + err := c.cc.Invoke(ctx, "/sandbox.ift.Query/IFTBridgesByDenom", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) PendingTransfer(ctx context.Context, in *QueryPendingTransferRequest, opts ...grpc.CallOption) (*QueryPendingTransferResponse, error) { + out := new(QueryPendingTransferResponse) + err := c.cc.Invoke(ctx, "/sandbox.ift.Query/PendingTransfer", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/sandbox.ift.Query/Params", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + // IFTBridge queries the IFT bridge information for a specific denom and + // client_id + IFTBridge(context.Context, *QueryIFTBridgeRequest) (*QueryIFTBridgeResponse, error) + // IFTBridges queries all IFT bridges + IFTBridges(context.Context, *QueryIFTBridgesRequest) (*QueryIFTBridgesResponse, error) + // IFTBridgesByDenom queries all IFT bridges for a specific denom + IFTBridgesByDenom(context.Context, *QueryIFTBridgesByDenomRequest) (*QueryIFTBridgesByDenomResponse, error) + // PendingTransfer queries a pending transfer + PendingTransfer(context.Context, *QueryPendingTransferRequest) (*QueryPendingTransferResponse, error) + // Params queries the module parameters + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) IFTBridge(ctx context.Context, req *QueryIFTBridgeRequest) (*QueryIFTBridgeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method IFTBridge not implemented") +} +func (*UnimplementedQueryServer) IFTBridges(ctx context.Context, req *QueryIFTBridgesRequest) (*QueryIFTBridgesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method IFTBridges not implemented") +} +func (*UnimplementedQueryServer) IFTBridgesByDenom(ctx context.Context, req *QueryIFTBridgesByDenomRequest) (*QueryIFTBridgesByDenomResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method IFTBridgesByDenom not implemented") +} +func (*UnimplementedQueryServer) PendingTransfer(ctx context.Context, req *QueryPendingTransferRequest) (*QueryPendingTransferResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PendingTransfer not implemented") +} +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_IFTBridge_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryIFTBridgeRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).IFTBridge(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sandbox.ift.Query/IFTBridge", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).IFTBridge(ctx, req.(*QueryIFTBridgeRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_IFTBridges_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryIFTBridgesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).IFTBridges(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sandbox.ift.Query/IFTBridges", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).IFTBridges(ctx, req.(*QueryIFTBridgesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_IFTBridgesByDenom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryIFTBridgesByDenomRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).IFTBridgesByDenom(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sandbox.ift.Query/IFTBridgesByDenom", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).IFTBridgesByDenom(ctx, req.(*QueryIFTBridgesByDenomRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_PendingTransfer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryPendingTransferRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).PendingTransfer(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sandbox.ift.Query/PendingTransfer", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).PendingTransfer(ctx, req.(*QueryPendingTransferRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sandbox.ift.Query/Params", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var Query_serviceDesc = _Query_serviceDesc +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "sandbox.ift.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "IFTBridge", + Handler: _Query_IFTBridge_Handler, + }, + { + MethodName: "IFTBridges", + Handler: _Query_IFTBridges_Handler, + }, + { + MethodName: "IFTBridgesByDenom", + Handler: _Query_IFTBridgesByDenom_Handler, + }, + { + MethodName: "PendingTransfer", + Handler: _Query_PendingTransfer_Handler, + }, + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "sandbox/ift/query.proto", +} + +func (m *QueryIFTBridgeRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryIFTBridgeRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryIFTBridgeRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ClientId) > 0 { + i -= len(m.ClientId) + copy(dAtA[i:], m.ClientId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ClientId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryIFTBridgeResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryIFTBridgeResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryIFTBridgeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Bridge.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryIFTBridgesRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryIFTBridgesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryIFTBridgesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryIFTBridgesResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryIFTBridgesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryIFTBridgesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Bridges) > 0 { + for iNdEx := len(m.Bridges) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Bridges[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryIFTBridgesByDenomRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryIFTBridgesByDenomRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryIFTBridgesByDenomRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryIFTBridgesByDenomResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryIFTBridgesByDenomResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryIFTBridgesByDenomResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Bridges) > 0 { + for iNdEx := len(m.Bridges) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Bridges[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryPendingTransferRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryPendingTransferRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPendingTransferRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Sequence != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Sequence)) + i-- + dAtA[i] = 0x18 + } + if len(m.ClientId) > 0 { + i -= len(m.ClientId) + copy(dAtA[i:], m.ClientId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ClientId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryPendingTransferResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryPendingTransferResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPendingTransferResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.PendingTransfer.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *DenomBridge) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DenomBridge) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DenomBridge) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Bridge.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryIFTBridgeRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.ClientId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryIFTBridgeResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Bridge.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryIFTBridgesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryIFTBridgesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Bridges) > 0 { + for _, e := range m.Bridges { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryIFTBridgesByDenomRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryIFTBridgesByDenomResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Bridges) > 0 { + for _, e := range m.Bridges { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryPendingTransferRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.ClientId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Sequence != 0 { + n += 1 + sovQuery(uint64(m.Sequence)) + } + return n +} + +func (m *QueryPendingTransferResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.PendingTransfer.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *DenomBridge) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = m.Bridge.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryIFTBridgeRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryIFTBridgeRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryIFTBridgeRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryIFTBridgeResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryIFTBridgeResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryIFTBridgeResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Bridge", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Bridge.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryIFTBridgesRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryIFTBridgesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryIFTBridgesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryIFTBridgesResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryIFTBridgesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryIFTBridgesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Bridges", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Bridges = append(m.Bridges, DenomBridge{}) + if err := m.Bridges[len(m.Bridges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryIFTBridgesByDenomRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryIFTBridgesByDenomRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryIFTBridgesByDenomRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryIFTBridgesByDenomResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryIFTBridgesByDenomResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryIFTBridgesByDenomResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Bridges", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Bridges = append(m.Bridges, IFTBridge{}) + if err := m.Bridges[len(m.Bridges)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryPendingTransferRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryPendingTransferRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryPendingTransferRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Sequence", wireType) + } + m.Sequence = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Sequence |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryPendingTransferResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryPendingTransferResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryPendingTransferResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PendingTransfer", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PendingTransfer.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DenomBridge) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DenomBridge: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DenomBridge: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Bridge", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Bridge.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/prototypes/x/ift/types/query.pb.gw.go b/prototypes/x/ift/types/query.pb.gw.go new file mode 100644 index 00000000000..0ac9c4aa32f --- /dev/null +++ b/prototypes/x/ift/types/query.pb.gw.go @@ -0,0 +1,587 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: sandbox/ift/query.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +func request_Query_IFTBridge_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryIFTBridgeRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["denom"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "denom") + } + + protoReq.Denom, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "denom", err) + } + + val, ok = pathParams["client_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "client_id") + } + + protoReq.ClientId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "client_id", err) + } + + msg, err := client.IFTBridge(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_IFTBridge_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryIFTBridgeRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["denom"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "denom") + } + + protoReq.Denom, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "denom", err) + } + + val, ok = pathParams["client_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "client_id") + } + + protoReq.ClientId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "client_id", err) + } + + msg, err := server.IFTBridge(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_IFTBridges_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryIFTBridgesRequest + var metadata runtime.ServerMetadata + + msg, err := client.IFTBridges(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_IFTBridges_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryIFTBridgesRequest + var metadata runtime.ServerMetadata + + msg, err := server.IFTBridges(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_IFTBridgesByDenom_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryIFTBridgesByDenomRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["denom"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "denom") + } + + protoReq.Denom, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "denom", err) + } + + msg, err := client.IFTBridgesByDenom(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_IFTBridgesByDenom_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryIFTBridgesByDenomRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["denom"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "denom") + } + + protoReq.Denom, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "denom", err) + } + + msg, err := server.IFTBridgesByDenom(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_PendingTransfer_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryPendingTransferRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["denom"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "denom") + } + + protoReq.Denom, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "denom", err) + } + + val, ok = pathParams["client_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "client_id") + } + + protoReq.ClientId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "client_id", err) + } + + val, ok = pathParams["sequence"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "sequence") + } + + protoReq.Sequence, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "sequence", err) + } + + msg, err := client.PendingTransfer(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_PendingTransfer_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryPendingTransferRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["denom"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "denom") + } + + protoReq.Denom, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "denom", err) + } + + val, ok = pathParams["client_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "client_id") + } + + protoReq.ClientId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "client_id", err) + } + + val, ok = pathParams["sequence"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "sequence") + } + + protoReq.Sequence, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "sequence", err) + } + + msg, err := server.PendingTransfer(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_IFTBridge_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_IFTBridge_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_IFTBridge_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_IFTBridges_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_IFTBridges_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_IFTBridges_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_IFTBridgesByDenom_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_IFTBridgesByDenom_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_IFTBridgesByDenom_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_PendingTransfer_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_PendingTransfer_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_PendingTransfer_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryHandler(ctx, mux, conn) +} + +// RegisterQueryHandler registers the http handlers for service Query to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) +} + +// RegisterQueryHandlerClient registers the http handlers for service Query +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryClient" to call the correct interceptors. +func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + + mux.Handle("GET", pattern_Query_IFTBridge_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_IFTBridge_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_IFTBridge_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_IFTBridges_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_IFTBridges_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_IFTBridges_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_IFTBridgesByDenom_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_IFTBridgesByDenom_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_IFTBridgesByDenom_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_PendingTransfer_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_PendingTransfer_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_PendingTransfer_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_IFTBridge_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"sandbox", "ift", "bridge", "denom", "client_id"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_IFTBridges_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"sandbox", "ift", "bridges"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_IFTBridgesByDenom_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"sandbox", "ift", "bridges", "denom"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_PendingTransfer_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"sandbox", "ift", "pending", "denom", "client_id", "sequence"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"sandbox", "ift", "params"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_Query_IFTBridge_0 = runtime.ForwardResponseMessage + + forward_Query_IFTBridges_0 = runtime.ForwardResponseMessage + + forward_Query_IFTBridgesByDenom_0 = runtime.ForwardResponseMessage + + forward_Query_PendingTransfer_0 = runtime.ForwardResponseMessage + + forward_Query_Params_0 = runtime.ForwardResponseMessage +) diff --git a/prototypes/x/ift/types/tx.pb.go b/prototypes/x/ift/types/tx.pb.go new file mode 100644 index 00000000000..11c91a2eb89 --- /dev/null +++ b/prototypes/x/ift/types/tx.pb.go @@ -0,0 +1,2680 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: sandbox/ift/tx.proto + +package types + +import ( + context "context" + cosmossdk_io_math "cosmossdk.io/math" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// MsgRegisterIFTBridge registers a new IBC bridge to a counterparty IFT +// contract +type MsgRegisterIFTBridge struct { + // The address of the signer registering the bridge (must be authority) + Signer string `protobuf:"bytes,1,opt,name=signer,proto3" json:"signer,omitempty"` + // The denom representing the IFT token on this chain + Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` + // The IBC client identifier on the local chain representing the counterparty + // chain + ClientId string `protobuf:"bytes,3,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` + // The address of the IFT on the counterparty chain + CounterpartyIftAddress string `protobuf:"bytes,4,opt,name=counterparty_ift_address,json=counterpartyIftAddress,proto3" json:"counterparty_ift_address,omitempty"` + // The identifier of the IFTSendCall constructor to use. + // For simple constructors: "evm" or "cosmos" + // For Solana: JSON format + // {"solana":{"gmp_program_id":"...","mint_pubkey":"..."}} + IftSendCallConstructor string `protobuf:"bytes,5,opt,name=ift_send_call_constructor,json=iftSendCallConstructor,proto3" json:"ift_send_call_constructor,omitempty"` +} + +func (m *MsgRegisterIFTBridge) Reset() { *m = MsgRegisterIFTBridge{} } +func (m *MsgRegisterIFTBridge) String() string { return proto.CompactTextString(m) } +func (*MsgRegisterIFTBridge) ProtoMessage() {} +func (*MsgRegisterIFTBridge) Descriptor() ([]byte, []int) { + return fileDescriptor_c3924d107e50751d, []int{0} +} +func (m *MsgRegisterIFTBridge) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRegisterIFTBridge) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRegisterIFTBridge.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRegisterIFTBridge) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRegisterIFTBridge.Merge(m, src) +} +func (m *MsgRegisterIFTBridge) XXX_Size() int { + return m.Size() +} +func (m *MsgRegisterIFTBridge) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRegisterIFTBridge.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRegisterIFTBridge proto.InternalMessageInfo + +func (m *MsgRegisterIFTBridge) GetSigner() string { + if m != nil { + return m.Signer + } + return "" +} + +func (m *MsgRegisterIFTBridge) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *MsgRegisterIFTBridge) GetClientId() string { + if m != nil { + return m.ClientId + } + return "" +} + +func (m *MsgRegisterIFTBridge) GetCounterpartyIftAddress() string { + if m != nil { + return m.CounterpartyIftAddress + } + return "" +} + +func (m *MsgRegisterIFTBridge) GetIftSendCallConstructor() string { + if m != nil { + return m.IftSendCallConstructor + } + return "" +} + +type MsgRegisterIFTBridgeResponse struct { +} + +func (m *MsgRegisterIFTBridgeResponse) Reset() { *m = MsgRegisterIFTBridgeResponse{} } +func (m *MsgRegisterIFTBridgeResponse) String() string { return proto.CompactTextString(m) } +func (*MsgRegisterIFTBridgeResponse) ProtoMessage() {} +func (*MsgRegisterIFTBridgeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_c3924d107e50751d, []int{1} +} +func (m *MsgRegisterIFTBridgeResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRegisterIFTBridgeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRegisterIFTBridgeResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRegisterIFTBridgeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRegisterIFTBridgeResponse.Merge(m, src) +} +func (m *MsgRegisterIFTBridgeResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgRegisterIFTBridgeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRegisterIFTBridgeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRegisterIFTBridgeResponse proto.InternalMessageInfo + +// MsgRemoveIFTBridge removes an existing IBC bridge +type MsgRemoveIFTBridge struct { + // The address of the signer removing the bridge (must be authority) + Signer string `protobuf:"bytes,1,opt,name=signer,proto3" json:"signer,omitempty"` + // The denom representing the IFT token on this chain + Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` + // The IBC client identifier on the local chain representing the counterparty + // chain + ClientId string `protobuf:"bytes,3,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` +} + +func (m *MsgRemoveIFTBridge) Reset() { *m = MsgRemoveIFTBridge{} } +func (m *MsgRemoveIFTBridge) String() string { return proto.CompactTextString(m) } +func (*MsgRemoveIFTBridge) ProtoMessage() {} +func (*MsgRemoveIFTBridge) Descriptor() ([]byte, []int) { + return fileDescriptor_c3924d107e50751d, []int{2} +} +func (m *MsgRemoveIFTBridge) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRemoveIFTBridge) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRemoveIFTBridge.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRemoveIFTBridge) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRemoveIFTBridge.Merge(m, src) +} +func (m *MsgRemoveIFTBridge) XXX_Size() int { + return m.Size() +} +func (m *MsgRemoveIFTBridge) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRemoveIFTBridge.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRemoveIFTBridge proto.InternalMessageInfo + +func (m *MsgRemoveIFTBridge) GetSigner() string { + if m != nil { + return m.Signer + } + return "" +} + +func (m *MsgRemoveIFTBridge) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *MsgRemoveIFTBridge) GetClientId() string { + if m != nil { + return m.ClientId + } + return "" +} + +type MsgRemoveIFTBridgeResponse struct { +} + +func (m *MsgRemoveIFTBridgeResponse) Reset() { *m = MsgRemoveIFTBridgeResponse{} } +func (m *MsgRemoveIFTBridgeResponse) String() string { return proto.CompactTextString(m) } +func (*MsgRemoveIFTBridgeResponse) ProtoMessage() {} +func (*MsgRemoveIFTBridgeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_c3924d107e50751d, []int{3} +} +func (m *MsgRemoveIFTBridgeResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRemoveIFTBridgeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRemoveIFTBridgeResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRemoveIFTBridgeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRemoveIFTBridgeResponse.Merge(m, src) +} +func (m *MsgRemoveIFTBridgeResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgRemoveIFTBridgeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRemoveIFTBridgeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRemoveIFTBridgeResponse proto.InternalMessageInfo + +// MsgIFTTransfer initiates a cross-chain token transfer +type MsgIFTTransfer struct { + // The address of the signer initiating the transfer + Signer string `protobuf:"bytes,1,opt,name=signer,proto3" json:"signer,omitempty"` + // The denom representing the IFT token on this chain + Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` + // The IBC client identifier over which the transfer is being made + ClientId string `protobuf:"bytes,3,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` + // The address of the receiver on the counterparty chain + Receiver string `protobuf:"bytes,4,opt,name=receiver,proto3" json:"receiver,omitempty"` + // The amount of tokens to transfer + Amount cosmossdk_io_math.Int `protobuf:"bytes,5,opt,name=amount,proto3,customtype=cosmossdk.io/math.Int" json:"amount"` + // The timeout timestamp for the IBC packet (in seconds since epoch) + TimeoutTimestamp uint64 `protobuf:"varint,6,opt,name=timeout_timestamp,json=timeoutTimestamp,proto3" json:"timeout_timestamp,omitempty"` +} + +func (m *MsgIFTTransfer) Reset() { *m = MsgIFTTransfer{} } +func (m *MsgIFTTransfer) String() string { return proto.CompactTextString(m) } +func (*MsgIFTTransfer) ProtoMessage() {} +func (*MsgIFTTransfer) Descriptor() ([]byte, []int) { + return fileDescriptor_c3924d107e50751d, []int{4} +} +func (m *MsgIFTTransfer) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgIFTTransfer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgIFTTransfer.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgIFTTransfer) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgIFTTransfer.Merge(m, src) +} +func (m *MsgIFTTransfer) XXX_Size() int { + return m.Size() +} +func (m *MsgIFTTransfer) XXX_DiscardUnknown() { + xxx_messageInfo_MsgIFTTransfer.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgIFTTransfer proto.InternalMessageInfo + +func (m *MsgIFTTransfer) GetSigner() string { + if m != nil { + return m.Signer + } + return "" +} + +func (m *MsgIFTTransfer) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *MsgIFTTransfer) GetClientId() string { + if m != nil { + return m.ClientId + } + return "" +} + +func (m *MsgIFTTransfer) GetReceiver() string { + if m != nil { + return m.Receiver + } + return "" +} + +func (m *MsgIFTTransfer) GetTimeoutTimestamp() uint64 { + if m != nil { + return m.TimeoutTimestamp + } + return 0 +} + +type MsgIFTTransferResponse struct { + // The sequence number of the IBC packet + Sequence uint64 `protobuf:"varint,1,opt,name=sequence,proto3" json:"sequence,omitempty"` +} + +func (m *MsgIFTTransferResponse) Reset() { *m = MsgIFTTransferResponse{} } +func (m *MsgIFTTransferResponse) String() string { return proto.CompactTextString(m) } +func (*MsgIFTTransferResponse) ProtoMessage() {} +func (*MsgIFTTransferResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_c3924d107e50751d, []int{5} +} +func (m *MsgIFTTransferResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgIFTTransferResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgIFTTransferResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgIFTTransferResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgIFTTransferResponse.Merge(m, src) +} +func (m *MsgIFTTransferResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgIFTTransferResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgIFTTransferResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgIFTTransferResponse proto.InternalMessageInfo + +func (m *MsgIFTTransferResponse) GetSequence() uint64 { + if m != nil { + return m.Sequence + } + return 0 +} + +// MsgIFTMint mints tokens in response to a cross-chain transfer +type MsgIFTMint struct { + // The address of the signer (must be ICS27-GMP account controlled by + // counterparty bridge) + Signer string `protobuf:"bytes,1,opt,name=signer,proto3" json:"signer,omitempty"` + // The denom representing the IFT token on this chain + Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` + // The address of the receiver on the local chain + Receiver string `protobuf:"bytes,3,opt,name=receiver,proto3" json:"receiver,omitempty"` + // The amount of tokens to mint + Amount cosmossdk_io_math.Int `protobuf:"bytes,4,opt,name=amount,proto3,customtype=cosmossdk.io/math.Int" json:"amount"` +} + +func (m *MsgIFTMint) Reset() { *m = MsgIFTMint{} } +func (m *MsgIFTMint) String() string { return proto.CompactTextString(m) } +func (*MsgIFTMint) ProtoMessage() {} +func (*MsgIFTMint) Descriptor() ([]byte, []int) { + return fileDescriptor_c3924d107e50751d, []int{6} +} +func (m *MsgIFTMint) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgIFTMint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgIFTMint.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgIFTMint) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgIFTMint.Merge(m, src) +} +func (m *MsgIFTMint) XXX_Size() int { + return m.Size() +} +func (m *MsgIFTMint) XXX_DiscardUnknown() { + xxx_messageInfo_MsgIFTMint.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgIFTMint proto.InternalMessageInfo + +func (m *MsgIFTMint) GetSigner() string { + if m != nil { + return m.Signer + } + return "" +} + +func (m *MsgIFTMint) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *MsgIFTMint) GetReceiver() string { + if m != nil { + return m.Receiver + } + return "" +} + +type MsgIFTMintResponse struct { +} + +func (m *MsgIFTMintResponse) Reset() { *m = MsgIFTMintResponse{} } +func (m *MsgIFTMintResponse) String() string { return proto.CompactTextString(m) } +func (*MsgIFTMintResponse) ProtoMessage() {} +func (*MsgIFTMintResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_c3924d107e50751d, []int{7} +} +func (m *MsgIFTMintResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgIFTMintResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgIFTMintResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgIFTMintResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgIFTMintResponse.Merge(m, src) +} +func (m *MsgIFTMintResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgIFTMintResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgIFTMintResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgIFTMintResponse proto.InternalMessageInfo + +// MsgUpdateParams updates the module parameters +type MsgUpdateParams struct { + // Authority is the address that controls the module (typically governance) + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // Params defines the new parameters to set + Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"` +} + +func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } +func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParams) ProtoMessage() {} +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return fileDescriptor_c3924d107e50751d, []int{8} +} +func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParams.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParams.Merge(m, src) +} +func (m *MsgUpdateParams) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParams) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParams.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo + +func (m *MsgUpdateParams) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgUpdateParams) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +type MsgUpdateParamsResponse struct { +} + +func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse{} } +func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParamsResponse) ProtoMessage() {} +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_c3924d107e50751d, []int{9} +} +func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src) +} +func (m *MsgUpdateParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgRegisterIFTBridge)(nil), "sandbox.ift.MsgRegisterIFTBridge") + proto.RegisterType((*MsgRegisterIFTBridgeResponse)(nil), "sandbox.ift.MsgRegisterIFTBridgeResponse") + proto.RegisterType((*MsgRemoveIFTBridge)(nil), "sandbox.ift.MsgRemoveIFTBridge") + proto.RegisterType((*MsgRemoveIFTBridgeResponse)(nil), "sandbox.ift.MsgRemoveIFTBridgeResponse") + proto.RegisterType((*MsgIFTTransfer)(nil), "sandbox.ift.MsgIFTTransfer") + proto.RegisterType((*MsgIFTTransferResponse)(nil), "sandbox.ift.MsgIFTTransferResponse") + proto.RegisterType((*MsgIFTMint)(nil), "sandbox.ift.MsgIFTMint") + proto.RegisterType((*MsgIFTMintResponse)(nil), "sandbox.ift.MsgIFTMintResponse") + proto.RegisterType((*MsgUpdateParams)(nil), "sandbox.ift.MsgUpdateParams") + proto.RegisterType((*MsgUpdateParamsResponse)(nil), "sandbox.ift.MsgUpdateParamsResponse") +} + +func init() { proto.RegisterFile("sandbox/ift/tx.proto", fileDescriptor_c3924d107e50751d) } + +var fileDescriptor_c3924d107e50751d = []byte{ + // 723 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0x41, 0x4f, 0x1b, 0x39, + 0x18, 0xcd, 0x90, 0x90, 0x85, 0x2f, 0x2b, 0x58, 0x66, 0x03, 0x0c, 0x03, 0x4a, 0xd8, 0x6c, 0xa5, + 0x52, 0x28, 0x99, 0x42, 0x51, 0xd5, 0x72, 0x6b, 0x22, 0x21, 0xe5, 0x10, 0xb5, 0x1a, 0xd2, 0x4b, + 0x7b, 0x88, 0xcc, 0x8c, 0x33, 0x58, 0xcd, 0xd8, 0xa9, 0xed, 0x20, 0xb8, 0x55, 0x3d, 0xf4, 0xd4, + 0x03, 0x3f, 0x85, 0x03, 0xea, 0x6f, 0xe0, 0x88, 0x38, 0x55, 0x55, 0x85, 0x2a, 0x38, 0xf0, 0x2b, + 0x2a, 0x55, 0x33, 0xe3, 0x0c, 0x49, 0x48, 0x89, 0x54, 0x55, 0x9c, 0x12, 0x7f, 0xef, 0x7d, 0xcf, + 0xcf, 0xcf, 0xf6, 0x18, 0xb2, 0x02, 0x51, 0x77, 0x87, 0xed, 0x5b, 0xa4, 0x21, 0x2d, 0xb9, 0x5f, + 0x6c, 0x71, 0x26, 0x99, 0x9e, 0x51, 0xd5, 0x22, 0x69, 0x48, 0x73, 0xd6, 0x61, 0xc2, 0x67, 0xc2, + 0xf2, 0x85, 0x67, 0xed, 0xad, 0x05, 0x3f, 0x11, 0xcb, 0x9c, 0x8b, 0x80, 0x7a, 0x38, 0xb2, 0xa2, + 0x81, 0x82, 0xb2, 0x1e, 0xf3, 0x58, 0x54, 0x0f, 0xfe, 0xa9, 0xea, 0x74, 0xf7, 0x64, 0xa4, 0x21, + 0xa3, 0x72, 0xe1, 0x87, 0x06, 0xd9, 0xaa, 0xf0, 0x6c, 0xec, 0x11, 0x21, 0x31, 0xaf, 0x6c, 0xd5, + 0x4a, 0x9c, 0xb8, 0x1e, 0xd6, 0x1f, 0x41, 0x5a, 0x10, 0x8f, 0x62, 0x6e, 0x68, 0x8b, 0xda, 0xd2, + 0x78, 0xc9, 0x38, 0x3b, 0x5e, 0xcd, 0xaa, 0x79, 0x9e, 0xbb, 0x2e, 0xc7, 0x42, 0x6c, 0x4b, 0x4e, + 0xa8, 0x67, 0x2b, 0x9e, 0x9e, 0x85, 0x51, 0x17, 0x53, 0xe6, 0x1b, 0x23, 0x41, 0x83, 0x1d, 0x0d, + 0xf4, 0x79, 0x18, 0x77, 0x9a, 0x04, 0x53, 0x59, 0x27, 0xae, 0x91, 0x0c, 0x91, 0xb1, 0xa8, 0x50, + 0x71, 0xf5, 0xa7, 0x60, 0x38, 0xac, 0x4d, 0x25, 0xe6, 0x2d, 0xc4, 0xe5, 0x41, 0x9d, 0x34, 0x64, + 0x1d, 0x45, 0xe2, 0x46, 0x2a, 0xe4, 0xce, 0x74, 0xe3, 0x95, 0x86, 0x54, 0x53, 0xeb, 0xcf, 0x60, + 0x2e, 0x20, 0x0b, 0x4c, 0xdd, 0xba, 0x83, 0x9a, 0xcd, 0xba, 0xc3, 0xa8, 0x90, 0xbc, 0xed, 0x48, + 0xc6, 0x8d, 0xd1, 0xa8, 0x95, 0x34, 0xe4, 0x36, 0xa6, 0x6e, 0x19, 0x35, 0x9b, 0xe5, 0x6b, 0x74, + 0x33, 0xf3, 0xe1, 0xea, 0x68, 0x59, 0x99, 0x2e, 0xe4, 0x60, 0x61, 0xd0, 0xf2, 0x6d, 0x2c, 0x5a, + 0x8c, 0x0a, 0x5c, 0xf8, 0xa8, 0x81, 0x1e, 0x12, 0x7c, 0xb6, 0x87, 0xef, 0x36, 0x9d, 0x5e, 0xa3, + 0x0b, 0x60, 0xde, 0xf4, 0x11, 0xdb, 0x3c, 0x1c, 0x81, 0x89, 0xaa, 0xf0, 0x2a, 0x5b, 0xb5, 0x1a, + 0x47, 0x54, 0x34, 0x30, 0xbf, 0x9b, 0x0d, 0x34, 0x61, 0x8c, 0x63, 0x07, 0x93, 0x3d, 0xcc, 0xd5, + 0x86, 0xc5, 0x63, 0xbd, 0x0c, 0x69, 0xe4, 0x07, 0xbb, 0x17, 0xed, 0x47, 0x69, 0xe5, 0xe4, 0x3c, + 0x9f, 0xf8, 0x7a, 0x9e, 0x9f, 0x8e, 0x4c, 0x08, 0xf7, 0x6d, 0x91, 0x30, 0xcb, 0x47, 0x72, 0xb7, + 0x58, 0xa1, 0xf2, 0xec, 0x78, 0x15, 0x94, 0xbb, 0x0a, 0x95, 0xb6, 0x6a, 0xd5, 0x57, 0x60, 0x4a, + 0x12, 0x1f, 0xb3, 0xb6, 0xac, 0x07, 0xbf, 0x42, 0x22, 0xbf, 0x65, 0xa4, 0x17, 0xb5, 0xa5, 0x94, + 0xfd, 0x8f, 0x02, 0x6a, 0x9d, 0x7a, 0x6f, 0x60, 0x1b, 0x30, 0xd3, 0x9b, 0x48, 0x27, 0xac, 0xc0, + 0xb4, 0xc0, 0xef, 0xda, 0x98, 0x3a, 0x38, 0xcc, 0x26, 0x65, 0xc7, 0xe3, 0xc2, 0x37, 0x0d, 0x20, + 0x6a, 0xab, 0x12, 0x2a, 0xff, 0x58, 0x88, 0x1b, 0x5d, 0x39, 0x25, 0x87, 0x28, 0x0d, 0x4a, 0x30, + 0xf5, 0xdb, 0x09, 0xf6, 0x86, 0x92, 0x0d, 0x4f, 0xb3, 0x5a, 0x5d, 0x7c, 0x7a, 0x3e, 0x69, 0x30, + 0x59, 0x15, 0xde, 0xab, 0x96, 0x8b, 0x24, 0x7e, 0x89, 0x38, 0xf2, 0x85, 0xfe, 0x04, 0xc6, 0x51, + 0x5b, 0xee, 0x32, 0x4e, 0xe4, 0xc1, 0xd0, 0xc5, 0x5f, 0x53, 0xf5, 0x35, 0x48, 0xb7, 0x42, 0x85, + 0x30, 0x80, 0xcc, 0xfa, 0xbf, 0xc5, 0xae, 0xef, 0x59, 0x31, 0x12, 0x2f, 0xa5, 0x82, 0x85, 0xd8, + 0x8a, 0xb8, 0x39, 0x11, 0x38, 0xbc, 0x96, 0x28, 0xcc, 0xc1, 0x6c, 0x9f, 0x9b, 0x8e, 0xd3, 0xf5, + 0xcf, 0x49, 0x48, 0x56, 0x85, 0xa7, 0x23, 0x98, 0xba, 0xf9, 0xc9, 0xfa, 0xaf, 0x67, 0xaa, 0x41, + 0xd7, 0xda, 0x7c, 0x30, 0x94, 0x12, 0x9f, 0x92, 0x37, 0x30, 0xd9, 0x7f, 0xeb, 0xf3, 0x37, 0xbb, + 0x7b, 0x08, 0xe6, 0xfd, 0x21, 0x84, 0x58, 0xfc, 0x05, 0x64, 0xba, 0xef, 0xea, 0x7c, 0x7f, 0x5f, + 0x17, 0x68, 0xfe, 0x7f, 0x0b, 0x18, 0x0b, 0x96, 0xe1, 0xaf, 0xce, 0x99, 0x9d, 0x1d, 0xc0, 0x0f, + 0x00, 0x33, 0xff, 0x0b, 0x20, 0x16, 0xb1, 0xe1, 0xef, 0x9e, 0x33, 0xb0, 0xd0, 0xdf, 0xd0, 0x8d, + 0x9a, 0xf7, 0x6e, 0x43, 0x3b, 0x9a, 0xe6, 0xe8, 0xfb, 0xab, 0xa3, 0x65, 0xad, 0xb4, 0x75, 0x72, + 0x91, 0xd3, 0x4e, 0x2f, 0x72, 0xda, 0xf7, 0x8b, 0x9c, 0x76, 0x78, 0x99, 0x4b, 0x9c, 0x5e, 0xe6, + 0x12, 0x5f, 0x2e, 0x73, 0x89, 0xd7, 0x0f, 0x3d, 0x22, 0x77, 0xdb, 0x3b, 0x45, 0x87, 0xf9, 0xea, + 0x1d, 0xb3, 0x94, 0xee, 0x6a, 0x13, 0xbb, 0x1e, 0xe6, 0x96, 0x7a, 0x20, 0x0f, 0x5a, 0x58, 0xec, + 0xa4, 0xc3, 0x67, 0xeb, 0xf1, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe8, 0x07, 0xf9, 0x07, 0x3c, + 0x07, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type MsgClient interface { + // RegisterIFTBridge registers a new IBC bridge to a counterparty IFT contract + RegisterIFTBridge(ctx context.Context, in *MsgRegisterIFTBridge, opts ...grpc.CallOption) (*MsgRegisterIFTBridgeResponse, error) + // RemoveIFTBridge removes an existing IBC bridge + RemoveIFTBridge(ctx context.Context, in *MsgRemoveIFTBridge, opts ...grpc.CallOption) (*MsgRemoveIFTBridgeResponse, error) + // IFTTransfer initiates a cross-chain token transfer + IFTTransfer(ctx context.Context, in *MsgIFTTransfer, opts ...grpc.CallOption) (*MsgIFTTransferResponse, error) + // IFTMint mints tokens in response to a cross-chain transfer + IFTMint(ctx context.Context, in *MsgIFTMint, opts ...grpc.CallOption) (*MsgIFTMintResponse, error) + // UpdateParams updates the module parameters + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) RegisterIFTBridge(ctx context.Context, in *MsgRegisterIFTBridge, opts ...grpc.CallOption) (*MsgRegisterIFTBridgeResponse, error) { + out := new(MsgRegisterIFTBridgeResponse) + err := c.cc.Invoke(ctx, "/sandbox.ift.Msg/RegisterIFTBridge", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) RemoveIFTBridge(ctx context.Context, in *MsgRemoveIFTBridge, opts ...grpc.CallOption) (*MsgRemoveIFTBridgeResponse, error) { + out := new(MsgRemoveIFTBridgeResponse) + err := c.cc.Invoke(ctx, "/sandbox.ift.Msg/RemoveIFTBridge", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) IFTTransfer(ctx context.Context, in *MsgIFTTransfer, opts ...grpc.CallOption) (*MsgIFTTransferResponse, error) { + out := new(MsgIFTTransferResponse) + err := c.cc.Invoke(ctx, "/sandbox.ift.Msg/IFTTransfer", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) IFTMint(ctx context.Context, in *MsgIFTMint, opts ...grpc.CallOption) (*MsgIFTMintResponse, error) { + out := new(MsgIFTMintResponse) + err := c.cc.Invoke(ctx, "/sandbox.ift.Msg/IFTMint", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, "/sandbox.ift.Msg/UpdateParams", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + // RegisterIFTBridge registers a new IBC bridge to a counterparty IFT contract + RegisterIFTBridge(context.Context, *MsgRegisterIFTBridge) (*MsgRegisterIFTBridgeResponse, error) + // RemoveIFTBridge removes an existing IBC bridge + RemoveIFTBridge(context.Context, *MsgRemoveIFTBridge) (*MsgRemoveIFTBridgeResponse, error) + // IFTTransfer initiates a cross-chain token transfer + IFTTransfer(context.Context, *MsgIFTTransfer) (*MsgIFTTransferResponse, error) + // IFTMint mints tokens in response to a cross-chain transfer + IFTMint(context.Context, *MsgIFTMint) (*MsgIFTMintResponse, error) + // UpdateParams updates the module parameters + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) RegisterIFTBridge(ctx context.Context, req *MsgRegisterIFTBridge) (*MsgRegisterIFTBridgeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RegisterIFTBridge not implemented") +} +func (*UnimplementedMsgServer) RemoveIFTBridge(ctx context.Context, req *MsgRemoveIFTBridge) (*MsgRemoveIFTBridgeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RemoveIFTBridge not implemented") +} +func (*UnimplementedMsgServer) IFTTransfer(ctx context.Context, req *MsgIFTTransfer) (*MsgIFTTransferResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method IFTTransfer not implemented") +} +func (*UnimplementedMsgServer) IFTMint(ctx context.Context, req *MsgIFTMint) (*MsgIFTMintResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method IFTMint not implemented") +} +func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_RegisterIFTBridge_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRegisterIFTBridge) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RegisterIFTBridge(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sandbox.ift.Msg/RegisterIFTBridge", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RegisterIFTBridge(ctx, req.(*MsgRegisterIFTBridge)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_RemoveIFTBridge_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRemoveIFTBridge) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RemoveIFTBridge(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sandbox.ift.Msg/RemoveIFTBridge", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RemoveIFTBridge(ctx, req.(*MsgRemoveIFTBridge)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_IFTTransfer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgIFTTransfer) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).IFTTransfer(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sandbox.ift.Msg/IFTTransfer", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).IFTTransfer(ctx, req.(*MsgIFTTransfer)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_IFTMint_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgIFTMint) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).IFTMint(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sandbox.ift.Msg/IFTMint", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).IFTMint(ctx, req.(*MsgIFTMint)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sandbox.ift.Msg/UpdateParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + +var Msg_serviceDesc = _Msg_serviceDesc +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "sandbox.ift.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "RegisterIFTBridge", + Handler: _Msg_RegisterIFTBridge_Handler, + }, + { + MethodName: "RemoveIFTBridge", + Handler: _Msg_RemoveIFTBridge_Handler, + }, + { + MethodName: "IFTTransfer", + Handler: _Msg_IFTTransfer_Handler, + }, + { + MethodName: "IFTMint", + Handler: _Msg_IFTMint_Handler, + }, + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "sandbox/ift/tx.proto", +} + +func (m *MsgRegisterIFTBridge) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRegisterIFTBridge) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRegisterIFTBridge) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.IftSendCallConstructor) > 0 { + i -= len(m.IftSendCallConstructor) + copy(dAtA[i:], m.IftSendCallConstructor) + i = encodeVarintTx(dAtA, i, uint64(len(m.IftSendCallConstructor))) + i-- + dAtA[i] = 0x2a + } + if len(m.CounterpartyIftAddress) > 0 { + i -= len(m.CounterpartyIftAddress) + copy(dAtA[i:], m.CounterpartyIftAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.CounterpartyIftAddress))) + i-- + dAtA[i] = 0x22 + } + if len(m.ClientId) > 0 { + i -= len(m.ClientId) + copy(dAtA[i:], m.ClientId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ClientId))) + i-- + dAtA[i] = 0x1a + } + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintTx(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x12 + } + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgRegisterIFTBridgeResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRegisterIFTBridgeResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRegisterIFTBridgeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgRemoveIFTBridge) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRemoveIFTBridge) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRemoveIFTBridge) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ClientId) > 0 { + i -= len(m.ClientId) + copy(dAtA[i:], m.ClientId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ClientId))) + i-- + dAtA[i] = 0x1a + } + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintTx(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x12 + } + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgRemoveIFTBridgeResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRemoveIFTBridgeResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRemoveIFTBridgeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgIFTTransfer) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgIFTTransfer) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgIFTTransfer) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.TimeoutTimestamp != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.TimeoutTimestamp)) + i-- + dAtA[i] = 0x30 + } + { + size := m.Amount.Size() + i -= size + if _, err := m.Amount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + if len(m.Receiver) > 0 { + i -= len(m.Receiver) + copy(dAtA[i:], m.Receiver) + i = encodeVarintTx(dAtA, i, uint64(len(m.Receiver))) + i-- + dAtA[i] = 0x22 + } + if len(m.ClientId) > 0 { + i -= len(m.ClientId) + copy(dAtA[i:], m.ClientId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ClientId))) + i-- + dAtA[i] = 0x1a + } + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintTx(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x12 + } + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgIFTTransferResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgIFTTransferResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgIFTTransferResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Sequence != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.Sequence)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *MsgIFTMint) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgIFTMint) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgIFTMint) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.Amount.Size() + i -= size + if _, err := m.Amount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + if len(m.Receiver) > 0 { + i -= len(m.Receiver) + copy(dAtA[i:], m.Receiver) + i = encodeVarintTx(dAtA, i, uint64(len(m.Receiver))) + i-- + dAtA[i] = 0x1a + } + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintTx(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x12 + } + if len(m.Signer) > 0 { + i -= len(m.Signer) + copy(dAtA[i:], m.Signer) + i = encodeVarintTx(dAtA, i, uint64(len(m.Signer))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgIFTMintResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgIFTMintResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgIFTMintResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintTx(dAtA []byte, offset int, v uint64) int { + offset -= sovTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgRegisterIFTBridge) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ClientId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.CounterpartyIftAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.IftSendCallConstructor) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgRegisterIFTBridgeResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgRemoveIFTBridge) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ClientId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgRemoveIFTBridgeResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgIFTTransfer) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ClientId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Receiver) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Amount.Size() + n += 1 + l + sovTx(uint64(l)) + if m.TimeoutTimestamp != 0 { + n += 1 + sovTx(uint64(m.TimeoutTimestamp)) + } + return n +} + +func (m *MsgIFTTransferResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Sequence != 0 { + n += 1 + sovTx(uint64(m.Sequence)) + } + return n +} + +func (m *MsgIFTMint) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Signer) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Receiver) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Amount.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgIFTMintResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgUpdateParams) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Params.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgUpdateParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovTx(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTx(x uint64) (n int) { + return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgRegisterIFTBridge) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRegisterIFTBridge: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRegisterIFTBridge: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CounterpartyIftAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CounterpartyIftAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IftSendCallConstructor", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IftSendCallConstructor = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRegisterIFTBridgeResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRegisterIFTBridgeResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRegisterIFTBridgeResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRemoveIFTBridge) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRemoveIFTBridge: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRemoveIFTBridge: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRemoveIFTBridgeResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRemoveIFTBridgeResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRemoveIFTBridgeResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgIFTTransfer) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgIFTTransfer: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgIFTTransfer: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClientId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClientId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Receiver", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Receiver = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutTimestamp", wireType) + } + m.TimeoutTimestamp = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.TimeoutTimestamp |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgIFTTransferResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgIFTTransferResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgIFTTransferResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Sequence", wireType) + } + m.Sequence = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Sequence |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgIFTMint) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgIFTMint: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgIFTMint: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Signer", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Signer = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Receiver", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Receiver = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgIFTMintResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgIFTMintResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgIFTMintResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateParams) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTx(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTx + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTx + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTx + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTx = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTx = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTx = fmt.Errorf("proto: unexpected end of group") +) diff --git a/prototypes/x/tokenfactory/README.md b/prototypes/x/tokenfactory/README.md new file mode 100644 index 00000000000..b0a05c024b8 --- /dev/null +++ b/prototypes/x/tokenfactory/README.md @@ -0,0 +1,205 @@ +# Token Factory Module + +The Token Factory module enables permissionless creation, minting, and burning of tokens on the sandbox. +Tokens are address namespaced, thus the creation is permissionless. + +## Overview + +This module provides the following key features: + +- **Permissionless Creation**: Anyone can create a new token denomination +- **Creator Authority**: Token creators automatically become admins of their tokens +- **Admin-Only Operations**: Only token admins can mint and burn their tokens +- **Namespace Protection**: Tokens are namespaced by creator address to prevent conflicts + +## Key Concepts + +### Token Denomination Format + +Tokens created through this module follow the format: + +- 1-20 characters long +- Only alphanumerical + +Example: `mydenom` + +### Authority Model + +- When you create a token, you become its **admin** +- Only the admin can mint and burn tokens +- Each token has independent admin control +- No global authority or governance control + +## Messages + +### MsgCreateDenom + +Creates a new token denomination. + +```protobuf +message MsgCreateDenom { + string sender = 1; + string denom = 2; +} +``` + +### MsgMint + +Mints tokens to a specified address. + +```protobuf +message MsgMint { + string from = 1; + string address = 2; + cosmos.base.v1beta1.Coin amount = 3; +} +``` + +### MsgBurn + +Burns tokens from the admin's balance. + +```protobuf +message MsgBurn { + string from = 1; + cosmos.base.v1beta1.Coin amount = 2; +} +``` + +### MsgCreateBridge + +Creates or overwrites a bridge mapping for a tokenfactory denom and IBC client ID, and stores the derived ICA address. + +```protobuf +message MsgCreateBridge { + string from = 1; + string denom = 2; + string client_id = 3; + string remote_contract_address = 4; +} +``` + +## Queries + +### DenomAuthorityMetadata + +Query the authority metadata for a specific denom: + +```bash +sandboxd query tokenfactory denom-authority-metadata uwfdeposit +``` + +### DenomsByCreator + +Query all denoms created by a specific creator: + +```bash +sandboxd query tokenfactory denoms-by-creator wf1abc123... +``` + +### Params + +Query module parameters: + +```bash +sandboxd query tokenfactory params +``` + +### Bridge + +Query a single bridge by denom and client-id: + +```bash +sandboxd query tokenfactory bridge uwfdeposit 07-tendermint-0 +``` + +### DenomBridges + +List bridges for a given denom: + +```bash +sandboxd query tokenfactory denom-bridges uwfdeposit +``` + +### Bridges + +List all bridges: + +```bash +sandboxd query tokenfactory bridges +``` + +## Usage Examples + +### Creating a Token + +```bash +sandboxd tx tokenfactory create-denom uwfdeposit \ + --from alice \ + --chain-id sandbox-1 \ + --gas auto \ + --home path_to_home +``` + +### Minting Tokens + +```bash +sandboxd tx tokenfactory mint wf1recipient... 1000000uwfdeposit \ + --from alice \ + --chain-id sandbox-1 \ + --gas auto \ + --home path_to_home +``` + +### Burning Tokens + +```bash +sandboxd tx tokenfactory burn 500000uwfdeposit \ + --from alice \ + --chain-id sandbox-1 \ + --gas auto \ + --home path_to_home +``` + +### Creating a Bridge + +```bash +sandboxd tx tokenfactory create-bridge uwfdeposit 07-tendermint-0 0x1111111111111111111111111111111111111111 \ + --from alice \ + --chain-id sandbox-1 \ + --gas auto \ + --home path_to_home +``` + +## Module Parameters + +This module currently has no configurable parameters. + +## Integration + +The module is designed to work seamlessly with: + +- Cosmos SDK Bank module for token transfers +- Standard wallet interfaces +- Bridge mapping support for cross-chain integrations (set via create-bridge; query via bridge/denom-bridges/bridges) + +## Security Features + +- **Authority Validation**: All mint/burn operations verify admin permissions +- **Namespace Protection**: Creator address prevents naming collisions +- **Input Validation**: Comprehensive validation of all message parameters +- **State Consistency**: Atomic operations ensure consistent state + +## Events + +The module emits the following events on successful operations: + +- tokenfactory_create_denom + - denom + - admin: creator address +- tokenfactory_mint + - denom, amount, admin, to +- tokenfactory_burn + - denom, amount, admin +- tokenfactory_create_bridge + - denom, admin, client_id, remote_contract_address, ica_address diff --git a/prototypes/x/tokenfactory/TESTING.md b/prototypes/x/tokenfactory/TESTING.md new file mode 100644 index 00000000000..4ab594b9ff8 --- /dev/null +++ b/prototypes/x/tokenfactory/TESTING.md @@ -0,0 +1,175 @@ +# TokenFactory manual testing guide (single-node) + +This guide walks you through manually testing the x/tokenfactory module on a local single-node sandbox using the provided scripts. It covers spinning up the chain, ensuring a wallet is available, and exercising all available tokenfactory CLI tx and query commands in a logical order, with bank balance checks after mint and burn. + +References +- Single-node scripts: scripts/single-node.sh, scripts/kill-single-node.sh +- Project quickstart and preloaded accounts: readme.md +- TokenFactory overview and CLI synopsis: x/tokenfactory/README.md + + +## 1) Prerequisites + +- Go 1.25 installed +- jq +- Built sandboxd (`make build`) + + +## 2) Start a local single-node + +From the repo root: +- make single-node + +This runs scripts/single-node.sh, which: +- Initializes a fresh home at scripts/node-data/sandbox-1/n0 (unless continuing an existing state) +- Imports a validator key and a set of named demo keys with funds +- Enables API, gRPC, and Swagger +- Starts the node in the background and prints the home path and a log file location + +To stop later: +- make kill-single-node + + +## 3) Environment variables (recommended) + +Export convenient variables for the session. Adjust paths if you run binaries or home elsewhere. + +Set core paths and endpoints: +- export BIN=${BIN:-./build/sandboxd} +- export NODE=${NODE:-tcp://localhost:26657} +- export API=${API:-http://localhost:1317} +- export GRPC=${GRPC:-localhost:9090} +- export NODE_HOME=${NODE_HOME:-$(pwd)/scripts/node-data/sandbox-1/n0} +- export KEYRING=${KEYRING:-test} +- export CHAIN_ID=$($BIN status --node $NODE 2>/dev/null | jq -r .NodeInfo.network) +- export BASE_DENOM=$($BIN query staking params --node $NODE -o json | jq -r .params.bond_denom) +- export TX_FLAGS="--node $NODE --chain-id $CHAIN_ID --home $NODE_HOME --keyring-backend $KEYRING --gas auto --gas-adjustment 1.4 --gas-prices 0.05uwfgas -y" + +## 4) Keys: ensure you have a funded wallet + +List keys in the node’s keyring: +- $BIN keys list --home $NODE_HOME --keyring-backend $KEYRING + +The single-node setup imports many pre-funded demo keys (see readme.md). You can use any of them. For example, pick demo-user as the token admin: +- export ADMIN_KEY=demo-user +- export ADMIN_ADDR=$($BIN keys show $ADMIN_KEY --home $NODE_HOME --keyring-backend $KEYRING -a) + +Verify it has funds for fees: +- $BIN query bank balances $ADMIN_ADDR --node $NODE -o json | jq + +Also choose a recipient account for mint tests (another preloaded key works well): +- export USER_KEY=demo-relayer +- export USER_ADDR=$($BIN keys show $USER_KEY --home $NODE_HOME --keyring-backend $KEYRING -a) + + +## 5) TokenFactory: queries overview + +List available query subcommands: +- $BIN query tokenfactory --help + +Expected queries: +- params +- denoms-by-creator [creator-address] +- denom-authority-metadata [denom] +- bridge [denom] [client-id] +- denom-bridges [denom] +- bridges + +Useful to run up front: +- $BIN query tokenfactory params --node $NODE -o json | jq + + +## 6) TokenFactory: tx overview + +List available tx subcommands: +- $BIN tx tokenfactory --help + +Expected transactions: +- create-denom [denom] +- mint [amount] [mint-to-address] +- burn [amount] +- create-bridge [denom] [client-id] [remote-contract-address] + +Notes +- amount must include the full denom for mint/burn (e.g., factory/$ADMIN_ADDR/$DENOM). +- Only the token admin (the creator) can mint and burn. +- Denom must be alphanumeric and between 1 and 20 chars. + + +## 7) Create a new denom + +Pick a unique denom and create it as the admin key: +- export DENOM=tf$(date +%s) +- $BIN tx tokenfactory create-denom $DENOM --from $ADMIN_KEY $TX_FLAGS + +The full denom is deterministic: +- export FULL_DENOM=factory/$ADMIN_ADDR/$DENOM + +Verify via queries: +- $BIN query tokenfactory denoms-by-creator $ADMIN_ADDR --node $NODE -o json | jq -r .denoms[] +- $BIN query tokenfactory denom-authority-metadata $FULL_DENOM --node $NODE -o json | jq + +You should see FULL_DENOM in the creator list, and admin equal to ADMIN_ADDR in the authority metadata. + + +## 8) Mint tokens and verify balances + +Pre-check balances: +- $BIN query bank balances $ADMIN_ADDR --node $NODE -o json | jq +- $BIN query bank balances $USER_ADDR --node $NODE -o json | jq + +Mint to yourself (admin): +- $BIN tx tokenfactory mint 1000000$FULL_DENOM $ADMIN_ADDR --from $ADMIN_KEY $TX_FLAGS + +Mint to another user: +- $BIN tx tokenfactory mint 600000$FULL_DENOM $USER_ADDR --from $ADMIN_KEY $TX_FLAGS + +Post-check balances: +- $BIN query bank balances $ADMIN_ADDR --node $NODE -o json | jq +- $BIN query bank balances $USER_ADDR --node $NODE -o json | jq + +Optional: demonstrate sending the new denom via bank send: +- $BIN tx bank send $USER_ADDR $ADMIN_ADDR 100000$FULL_DENOM $TX_FLAGS +- $BIN query bank balances $ADMIN_ADDR --node $NODE -o json | jq +- $BIN query bank balances $USER_ADDR --node $NODE -o json | jq + + +## 9) Burn tokens and verify balances + +Ensure the admin holds some of FULL_DENOM (from the mint above). Then burn from admin: +- $BIN tx tokenfactory burn 250000$FULL_DENOM --from $ADMIN_KEY $TX_FLAGS + +Re-check balances to confirm the burn reduced the admin’s FULL_DENOM balance by 250000: +- $BIN query bank balances $ADMIN_ADDR --node $NODE -o json | jq + + +## 10) Bridge commands + +If you want to exercise the bridge mapping CLI, you can set and query a bridge for your denom. The client-id must be a valid IBC client identifier (e.g., 07-tendermint-0 or 08-wasm-0), and the remote contract/address must be a non-empty string. + +Create a bridge mapping: +- export CLIENT_ID=07-tendermint-0 +- export REMOTE=0x1111111111111111111111111111111111111111 +- $BIN tx tokenfactory create-bridge $FULL_DENOM $CLIENT_ID $REMOTE --from $ADMIN_KEY $TX_FLAGS + +Query the bridge you just set: +- $BIN query tokenfactory bridge $FULL_DENOM $CLIENT_ID --node $NODE -o json | jq + +List bridges by denom and all bridges: +- $BIN query tokenfactory denom-bridges $FULL_DENOM --node $NODE -o json | jq +- $BIN query tokenfactory bridges --node $NODE -o json | jq + + +## 11) Negative tests (permissions) + +Try minting as a non-admin and expect failure: +- $BIN tx tokenfactory mint 1$FULL_DENOM $USER_ADDR --from $USER_KEY $TX_FLAGS + +Try burning as a non-admin and expect failure: +- $BIN tx tokenfactory burn 1$FULL_DENOM --from $USER_KEY $TX_FLAGS + +## 12) Cleanup + +- Stop the node: make kill-single-node +- Optional: Remove the single-node data directory to start from a clean state next time: + - rm -rf scripts/node-data/sandbox-1 diff --git a/prototypes/x/tokenfactory/cli/tx.go b/prototypes/x/tokenfactory/cli/tx.go new file mode 100644 index 00000000000..1db3ef4aa54 --- /dev/null +++ b/prototypes/x/tokenfactory/cli/tx.go @@ -0,0 +1,99 @@ +package cli + +import ( + "fmt" + + "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/client/tx" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// GetTxCmd returns the transaction commands for the tokenfactory module. +// Only commands that cannot use AutoCLI (due to cosmos.base.v1beta1.Coin +// positional args being incompatible with protov2 reflection) are defined here. +func GetTxCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: types.ModuleName, + Short: "Tokenfactory transaction subcommands", + DisableFlagParsing: false, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand( + CmdMint(), + CmdBurn(), + ) + + return cmd +} + +// CmdMint returns the cobra command for minting tokens. +func CmdMint() *cobra.Command { + cmd := &cobra.Command{ + Use: "mint [address] [amount]", + Short: "Mint tokens to a specified address", + Long: "Mint tokens to a specified address. The sender must be the admin of the token.", + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + address := args[0] + coin, err := sdk.ParseCoinNormalized(args[1]) + if err != nil { + return fmt.Errorf("invalid coin: %w", err) + } + + msg := types.NewMsgMint( + clientCtx.GetFromAddress().String(), + address, + coin, + ) + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +// CmdBurn returns the cobra command for burning tokens. +func CmdBurn() *cobra.Command { + cmd := &cobra.Command{ + Use: "burn [amount]", + Short: "Burn tokens from the sender's balance", + Long: "Burn tokens from the sender's balance. The sender must be the admin of the token.", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + coin, err := sdk.ParseCoinNormalized(args[0]) + if err != nil { + return fmt.Errorf("invalid coin: %w", err) + } + + msg := types.NewMsgBurn( + clientCtx.GetFromAddress().String(), + coin, + ) + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} diff --git a/prototypes/x/tokenfactory/keeper/denom.go b/prototypes/x/tokenfactory/keeper/denom.go new file mode 100644 index 00000000000..6600648e9d6 --- /dev/null +++ b/prototypes/x/tokenfactory/keeper/denom.go @@ -0,0 +1,152 @@ +package keeper + +import ( + "context" + + "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + + "cosmossdk.io/collections" + errorsmod "cosmossdk.io/errors" + + sdk "github.com/cosmos/cosmos-sdk/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" +) + +// CreateDenom creates a new tokenfactory denom +func (k Keeper) CreateDenom(ctx context.Context, creatorAddr string, denom string) error { + if _, found := k.bankKeeper.GetDenomMetaData(ctx, denom); found { + return errorsmod.Wrapf(types.ErrDenomExists, "denom: %s", denom) + } + + denomMetaData := banktypes.Metadata{ + DenomUnits: []*banktypes.DenomUnit{{ + Denom: denom, + Exponent: 0, + }}, + Base: denom, + } + + k.bankKeeper.SetDenomMetaData(ctx, denomMetaData) + + authorityMetadata := types.DenomAuthorityMetadata{ + Admin: creatorAddr, + } + + if err := k.setAuthorityMetadata(ctx, denom, authorityMetadata); err != nil { + return err + } + + if err := k.addDenomFromCreator(ctx, creatorAddr, denom); err != nil { + return err + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + sdkCtx.EventManager().EmitEvent( + sdk.NewEvent( + types.TypeEvtCreateDenom, + sdk.NewAttribute(types.AttributeKeyDenom, denom), + sdk.NewAttribute(types.AttributeKeyAdmin, creatorAddr), + ), + ) + + return nil +} + +// GetAuthorityMetadata returns the authority metadata for a specific denom +func (k Keeper) GetAuthorityMetadata(ctx context.Context, denom string) (types.DenomAuthorityMetadata, error) { + return k.DenomAuthorityMetadataStore.Get(ctx, denom) +} + +// GetDenomsFromCreator returns all denoms created by a specific creator +func (k Keeper) GetDenomsFromCreator(ctx context.Context, creator string) ([]string, error) { + denoms := []string{} + + err := k.CreatorPrefixStore.Walk(ctx, collections.NewPrefixedPairRange[string, string](creator), func(key collections.Pair[string, string], value bool) (bool, error) { + denoms = append(denoms, key.K2()) + return false, nil + }) + + return denoms, err +} + +func (k Keeper) setAuthorityMetadata(ctx context.Context, denom string, metadata types.DenomAuthorityMetadata) error { + return k.DenomAuthorityMetadataStore.Set(ctx, denom, metadata) +} + +func (k Keeper) addDenomFromCreator(ctx context.Context, creator, denom string) error { + return k.CreatorPrefixStore.Set(ctx, collections.Join(creator, denom), true) +} + +// HasDenomAuthorityMetadata checks if authority metadata exists for a denom +func (k Keeper) HasDenomAuthorityMetadata(ctx context.Context, denom string) bool { + has, err := k.DenomAuthorityMetadataStore.Has(ctx, denom) + if err != nil { + return false + } + return has +} + +// ChangeAdmin transfers admin authority to a new address +func (k Keeper) ChangeAdmin(ctx context.Context, denom, currentAdmin, newAdmin string) error { + md, err := k.GetAuthorityMetadata(ctx, denom) + if err != nil { + return errorsmod.Wrapf(types.ErrDenomNotFound, "denom %s not found", denom) + } + + if md.Admin == "" { + return errorsmod.Wrapf(types.ErrAdminRenounced, "cannot change admin for denom %s", denom) + } + + if md.Admin != currentAdmin { + return errorsmod.Wrapf(types.ErrUnauthorized, "sender %s is not admin of denom %s", currentAdmin, denom) + } + + md.Admin = newAdmin + if err := k.setAuthorityMetadata(ctx, denom, md); err != nil { + return err + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + sdkCtx.EventManager().EmitEvent( + sdk.NewEvent( + types.TypeEvtChangeAdmin, + sdk.NewAttribute(types.AttributeKeyDenom, denom), + sdk.NewAttribute(types.AttributeKeyAdmin, currentAdmin), + sdk.NewAttribute(types.AttributeKeyNewAdmin, newAdmin), + ), + ) + + return nil +} + +// RenounceAdmin permanently removes admin authority +func (k Keeper) RenounceAdmin(ctx context.Context, denom, currentAdmin string) error { + md, err := k.GetAuthorityMetadata(ctx, denom) + if err != nil { + return errorsmod.Wrapf(types.ErrDenomNotFound, "denom %s not found", denom) + } + + if md.Admin == "" { + return errorsmod.Wrapf(types.ErrAdminRenounced, "admin already renounced for denom %s", denom) + } + + if md.Admin != currentAdmin { + return errorsmod.Wrapf(types.ErrUnauthorized, "sender %s is not admin of denom %s", currentAdmin, denom) + } + + md.Admin = "" + if err := k.setAuthorityMetadata(ctx, denom, md); err != nil { + return err + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + sdkCtx.EventManager().EmitEvent( + sdk.NewEvent( + types.TypeEvtRenounceAdmin, + sdk.NewAttribute(types.AttributeKeyDenom, denom), + sdk.NewAttribute(types.AttributeKeyAdmin, currentAdmin), + ), + ) + + return nil +} diff --git a/prototypes/x/tokenfactory/keeper/genesis.go b/prototypes/x/tokenfactory/keeper/genesis.go new file mode 100644 index 00000000000..302bd70db46 --- /dev/null +++ b/prototypes/x/tokenfactory/keeper/genesis.go @@ -0,0 +1,49 @@ +package keeper + +import ( + "context" + + "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" +) + +// InitGenesis initializes the tokenfactory module's state from a provided genesis state. +func (k Keeper) InitGenesis(ctx context.Context, genState types.GenesisState) { + if err := k.SetParams(ctx, genState.Params); err != nil { + panic(err) + } + + for _, genDenom := range genState.FactoryDenoms { + if err := k.setAuthorityMetadata(ctx, genDenom.Denom, genDenom.AuthorityMetadata); err != nil { + panic(err) + } + + if err := k.addDenomFromCreator(ctx, genDenom.AuthorityMetadata.Admin, genDenom.Denom); err != nil { + panic(err) + } + } +} + +// ExportGenesis returns the tokenfactory module's exported genesis. +func (k Keeper) ExportGenesis(ctx context.Context) *types.GenesisState { + params, err := k.GetParams(ctx) + if err != nil { + panic(err) + } + + genDenoms := make([]types.GenesisDenom, 0) + + if err := k.DenomAuthorityMetadataStore.Walk(ctx, nil, func(denom string, authMetadata types.DenomAuthorityMetadata) (bool, error) { + genDenoms = append(genDenoms, types.GenesisDenom{ + Denom: denom, + AuthorityMetadata: authMetadata, + }) + return false, nil + }); err != nil { + panic(err) + } + + return &types.GenesisState{ + Params: params, + FactoryDenoms: genDenoms, + } +} diff --git a/prototypes/x/tokenfactory/keeper/genesis_test.go b/prototypes/x/tokenfactory/keeper/genesis_test.go new file mode 100644 index 00000000000..97898ebbd87 --- /dev/null +++ b/prototypes/x/tokenfactory/keeper/genesis_test.go @@ -0,0 +1,62 @@ +package keeper_test + +import ( + "testing" + + "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/stretchr/testify/require" + + _ "github.com/cosmos/sandbox-ledger/app" +) + +func TestGenesis(t *testing.T) { + params := types.DefaultParams() + + cases := []struct { + name string + gen *types.GenesisState + }{ + { + name: "init: denoms and params", + gen: &types.GenesisState{ + Params: params, + FactoryDenoms: []types.GenesisDenom{ + {Denom: "token1", AuthorityMetadata: types.DenomAuthorityMetadata{Admin: creatorAddrA}}, + {Denom: "token2", AuthorityMetadata: types.DenomAuthorityMetadata{Admin: creatorAddrB}}, + }, + }, + }, + { + name: "init empty", + gen: &types.GenesisState{Params: params, FactoryDenoms: []types.GenesisDenom{}}, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + k := wfapp.TokenFactoryKeeper + + require.NotNil(t, tc.gen) + k.InitGenesis(ctx, *tc.gen) + + got := k.ExportGenesis(ctx) + require.NotNil(t, got) + + require.Equal(t, tc.gen.Params, got.Params) + + wantDenoms := make(map[string]string) + for _, d := range tc.gen.FactoryDenoms { + wantDenoms[d.Denom] = d.AuthorityMetadata.Admin + } + gotDenoms := make(map[string]string) + for _, d := range got.FactoryDenoms { + gotDenoms[d.Denom] = d.AuthorityMetadata.Admin + } + require.Len(t, gotDenoms, len(wantDenoms)) + for denom, admin := range wantDenoms { + require.Equal(t, admin, gotDenoms[denom]) + } + }) + } +} diff --git a/prototypes/x/tokenfactory/keeper/keeper.go b/prototypes/x/tokenfactory/keeper/keeper.go new file mode 100644 index 00000000000..ae3d2139980 --- /dev/null +++ b/prototypes/x/tokenfactory/keeper/keeper.go @@ -0,0 +1,71 @@ +package keeper + +import ( + "context" + "fmt" + + "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + + "cosmossdk.io/collections" + "cosmossdk.io/core/store" + "cosmossdk.io/log/v2" + + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +type Keeper struct { + cdc codec.BinaryCodec + storeService store.KVStoreService + + accountKeeper types.AccountKeeper + bankKeeper types.BankKeeper + + Schema collections.Schema + ParamsStore collections.Item[types.Params] + + DenomAuthorityMetadataStore collections.Map[string, types.DenomAuthorityMetadata] + CreatorPrefixStore collections.Map[collections.Pair[string, string], bool] +} + +// NewKeeper creates a new tokenfactory Keeper instance +func NewKeeper(cdc codec.BinaryCodec, storeService store.KVStoreService, accountKeeper types.AccountKeeper, bankKeeper types.BankKeeper) Keeper { + if accountKeeper == nil { + panic("accountKeeper cannot be nil") + } + if bankKeeper == nil { + panic("bankKeeper cannot be nil") + } + + sb := collections.NewSchemaBuilder(storeService) + + k := Keeper{ + cdc: cdc, + storeService: storeService, + accountKeeper: accountKeeper, + bankKeeper: bankKeeper, + + ParamsStore: collections.NewItem(sb, types.ParamsKey, "params", codec.CollValue[types.Params](cdc)), + DenomAuthorityMetadataStore: collections.NewMap(sb, types.DenomAuthorityMetadataPrefix, "denom_authority_metadata", collections.StringKey, codec.CollValue[types.DenomAuthorityMetadata](cdc)), + CreatorPrefixStore: collections.NewMap(sb, types.CreatorPrefixKey, "creator_prefix_store", collections.PairKeyCodec(collections.StringKey, collections.StringKey), collections.BoolValue), + } + + schema, err := sb.Build() + if err != nil { + panic(err) + } + k.Schema = schema + + return k +} + +// GetAuthority returns the x/tokenfactory module's authority. +func (Keeper) GetAuthority() string { + return types.ModuleName +} + +// Logger returns a module-specific logger. +func (Keeper) Logger(ctx context.Context) log.Logger { + sdkCtx := sdk.UnwrapSDKContext(ctx) + return sdkCtx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) +} diff --git a/prototypes/x/tokenfactory/keeper/keeper_test.go b/prototypes/x/tokenfactory/keeper/keeper_test.go new file mode 100644 index 00000000000..437265a31d9 --- /dev/null +++ b/prototypes/x/tokenfactory/keeper/keeper_test.go @@ -0,0 +1,210 @@ +package keeper_test + +import ( + "fmt" + "testing" + "time" + + dbm "github.com/cosmos/cosmos-db" + "github.com/cosmos/sandbox-ledger/app" + "github.com/cosmos/sandbox-ledger/testutil" + "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/stretchr/testify/require" + + "cosmossdk.io/log/v2" + "cosmossdk.io/math" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/runtime" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + consensusparamkeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" + consensusparamtypes "github.com/cosmos/cosmos-sdk/x/consensus/types" + + cmtabcitypes "github.com/cometbft/cometbft/abci/types" +) + +const ( + // Addresses + creatorAddrA = "cosmos1nsh9vj9znccakn6xwlhlwx92acdt79yeqrkz4y" + creatorAddrB = "cosmos1uu635yk0hz3cvrypnryrggltrjq7975jrmeg97" + invalidAddress = "invalid" + + // Token denoms + testDenom = "testtoken" + nonExistentDenom = "doesnotexist" + invalidDenom = "not-so-alphanumeric" +) + +func setupIntegrationApp(tb testing.TB) (*app.SandboxApp, sdk.Context) { + tb.Helper() + // Ensure bech32 prefixes match wf* test addresses + testutil.SafeSetAddressPrefixes() + + db := dbm.NewMemDB() + wfapp := app.NewApp(log.NewNopLogger(), db, nil, false, simtestutil.NewAppOptionsWithFlagHome(tb.TempDir()), baseapp.SetChainID("chain-id")) + wfapp.SetInitChainer(func(ctx sdk.Context, _ *cmtabcitypes.RequestInitChain) (*cmtabcitypes.ResponseInitChain, error) { + for _, mod := range wfapp.ModuleManager.OrderInitGenesis { + if m, ok := wfapp.ModuleManager.Modules[mod].(module.HasGenesis); ok { + m.InitGenesis(ctx, wfapp.AppCodec(), m.DefaultGenesis(wfapp.AppCodec())) + } + } + + return &cmtabcitypes.ResponseInitChain{}, nil + }) + + // set baseApp param store + consensusParamsKeeper := consensusparamkeeper.NewKeeper(wfapp.AppCodec(), runtime.NewKVStoreService(wfapp.GetKey(consensusparamtypes.StoreKey)), authtypes.NewModuleAddress("gov").String(), runtime.EventService{}) + wfapp.SetParamStore(consensusParamsKeeper.ParamsStore) + + if err := wfapp.LoadLatestVersion(); err != nil { + panic(fmt.Errorf("failed to load application version from store: %w", err)) + } + + _, err := wfapp.InitChain(&cmtabcitypes.RequestInitChain{ChainId: "chain-id", ConsensusParams: simtestutil.DefaultConsensusParams}) + require.NoError(tb, err) + + // use deliver-state context backed by BaseApp finalizeBlockState + ctx := wfapp.NewContext(false). + WithChainID("chain-id"). + WithBlockTime(time.Now()). + WithBlockHeight(1) + + // Ensure module params exist (not strictly necessary if queries don’t touch them) + require.NoError(tb, wfapp.TokenFactoryKeeper.SetParams(ctx, types.DefaultParams())) + + return wfapp, ctx +} + +// TestKeeper_MintTo tests the MintTo function directly +func TestKeeper_MintTo(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + creator, err := sdk.AccAddressFromBech32(creatorAddrA) + require.NoError(t, err) + + recipient, err := sdk.AccAddressFromBech32(creatorAddrB) + require.NoError(t, err) + + // Create denom first + err = wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) + require.NoError(t, err) + + t.Run("successful mint", func(t *testing.T) { + amount := math.NewInt(1000000) + err := wfapp.TokenFactoryKeeper.MintTo(ctx, testDenom, amount, recipient) + require.NoError(t, err) + + // Verify balance + balance := wfapp.BankKeeper.GetBalance(ctx, recipient, testDenom) + require.True(t, balance.Amount.Equal(amount)) + }) + + t.Run("mint more tokens", func(t *testing.T) { + amount := math.NewInt(500000) + err := wfapp.TokenFactoryKeeper.MintTo(ctx, testDenom, amount, creator) + require.NoError(t, err) + + // Verify balance + balance := wfapp.BankKeeper.GetBalance(ctx, creator, testDenom) + require.True(t, balance.Amount.Equal(amount)) + }) + + t.Run("invalid denom format", func(t *testing.T) { + amount := math.NewInt(1000) + err := wfapp.TokenFactoryKeeper.MintTo(ctx, invalidDenom, amount, recipient) + require.Error(t, err) + require.ErrorIs(t, err, types.ErrInvalidDenom) + }) + + t.Run("empty denom", func(t *testing.T) { + amount := math.NewInt(1000) + err := wfapp.TokenFactoryKeeper.MintTo(ctx, "", amount, recipient) + require.Error(t, err) + }) +} + +// TestKeeper_BurnFrom tests the BurnFrom function directly +func TestKeeper_BurnFrom(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + holder, err := sdk.AccAddressFromBech32(creatorAddrA) + require.NoError(t, err) + + // Create denom and mint some tokens first + err = wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) + require.NoError(t, err) + + mintAmount := math.NewInt(1000000) + err = wfapp.TokenFactoryKeeper.MintTo(ctx, testDenom, mintAmount, holder) + require.NoError(t, err) + + t.Run("successful burn", func(t *testing.T) { + burnAmount := math.NewInt(400000) + err := wfapp.TokenFactoryKeeper.BurnFrom(ctx, testDenom, burnAmount, holder) + require.NoError(t, err) + + // Verify balance decreased + balance := wfapp.BankKeeper.GetBalance(ctx, holder, testDenom) + expected := mintAmount.Sub(burnAmount) + require.True(t, balance.Amount.Equal(expected)) + }) + + t.Run("burn remaining balance", func(t *testing.T) { + balance := wfapp.BankKeeper.GetBalance(ctx, holder, testDenom) + err := wfapp.TokenFactoryKeeper.BurnFrom(ctx, testDenom, balance.Amount, holder) + require.NoError(t, err) + + // Verify balance is zero + newBalance := wfapp.BankKeeper.GetBalance(ctx, holder, testDenom) + require.True(t, newBalance.Amount.IsZero()) + }) + + t.Run("insufficient balance", func(t *testing.T) { + burnAmount := math.NewInt(1000) + err := wfapp.TokenFactoryKeeper.BurnFrom(ctx, testDenom, burnAmount, holder) + require.Error(t, err) + }) + + t.Run("invalid denom format", func(t *testing.T) { + burnAmount := math.NewInt(1000) + err := wfapp.TokenFactoryKeeper.BurnFrom(ctx, invalidDenom, burnAmount, holder) + require.Error(t, err) + require.ErrorIs(t, err, types.ErrInvalidDenom) + }) +} + +// TestKeeper_HasDenom tests the HasDenom function +func TestKeeper_HasDenom(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + t.Run("denom does not exist", func(t *testing.T) { + exists := wfapp.TokenFactoryKeeper.HasDenom(ctx, testDenom) + require.False(t, exists) + }) + + t.Run("denom exists after creation", func(t *testing.T) { + err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) + require.NoError(t, err) + + exists := wfapp.TokenFactoryKeeper.HasDenom(ctx, testDenom) + require.True(t, exists) + }) + + t.Run("invalid denom format returns false", func(t *testing.T) { + exists := wfapp.TokenFactoryKeeper.HasDenom(ctx, invalidDenom) + require.False(t, exists) + }) + + t.Run("empty denom returns false", func(t *testing.T) { + exists := wfapp.TokenFactoryKeeper.HasDenom(ctx, "") + require.False(t, exists) + }) + + t.Run("non-existent valid denom returns false", func(t *testing.T) { + exists := wfapp.TokenFactoryKeeper.HasDenom(ctx, nonExistentDenom) + require.False(t, exists) + }) +} diff --git a/prototypes/x/tokenfactory/keeper/mint_burn.go b/prototypes/x/tokenfactory/keeper/mint_burn.go new file mode 100644 index 00000000000..6d5af4e3ac3 --- /dev/null +++ b/prototypes/x/tokenfactory/keeper/mint_burn.go @@ -0,0 +1,147 @@ +package keeper + +import ( + "context" + + "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + + errorsmod "cosmossdk.io/errors" + "cosmossdk.io/math" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// MintTo mints tokens of denom to address. +// MUST fail if denom is not recognized or not authorized for minting. +func (k Keeper) MintTo(ctx context.Context, denom string, amount math.Int, to sdk.AccAddress) error { + if err := types.ValidateTokenFactoryDenom(denom); err != nil { + return err + } + + coin := sdk.NewCoin(denom, amount) + if err := k.bankKeeper.MintCoins(ctx, types.ModuleName, sdk.NewCoins(coin)); err != nil { + return err + } + + if err := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, to, sdk.NewCoins(coin)); err != nil { + return err + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + sdkCtx.EventManager().EmitEvent( + sdk.NewEvent( + types.TypeEvtMint, + sdk.NewAttribute(types.AttributeKeyDenom, denom), + sdk.NewAttribute(types.AttributeKeyAmount, amount.String()), + sdk.NewAttribute(types.AttributeKeyMintTo, to.String()), + ), + ) + + return nil +} + +// BurnFrom burns tokens of denom from address. +// MUST fail if address does not have enough balance or burn is not permitted. +func (k Keeper) BurnFrom(ctx context.Context, denom string, amount math.Int, from sdk.AccAddress) error { + if err := types.ValidateTokenFactoryDenom(denom); err != nil { + return err + } + + coin := sdk.NewCoin(denom, amount) + if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, from, types.ModuleName, sdk.NewCoins(coin)); err != nil { + return err + } + + if err := k.bankKeeper.BurnCoins(ctx, types.ModuleName, sdk.NewCoins(coin)); err != nil { + return err + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + sdkCtx.EventManager().EmitEvent( + sdk.NewEvent( + types.TypeEvtBurn, + sdk.NewAttribute(types.AttributeKeyDenom, denom), + sdk.NewAttribute(types.AttributeKeyAmount, amount.String()), + sdk.NewAttribute(types.AttributeKeyBurnFrom, from.String()), + ), + ) + + return nil +} + +// HasDenom checks if a denom exists in the token factory. +func (k Keeper) HasDenom(ctx context.Context, denom string) bool { + if err := types.ValidateTokenFactoryDenom(denom); err != nil { + return false + } + has, err := k.DenomAuthorityMetadataStore.Has(ctx, denom) + if err != nil { + return false + } + return has +} + +// mintToWithAdmin mints coins to the specified address (admin-based, for MsgMint). +func (k Keeper) mintToWithAdmin(ctx context.Context, adminAddr sdk.AccAddress, amount sdk.Coin, mintToAddr sdk.AccAddress) error { + if err := k.bankKeeper.MintCoins(ctx, types.ModuleName, sdk.NewCoins(amount)); err != nil { + return err + } + + if err := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, mintToAddr, sdk.NewCoins(amount)); err != nil { + return err + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + sdkCtx.EventManager().EmitEvent( + sdk.NewEvent( + types.TypeEvtMint, + sdk.NewAttribute(types.AttributeKeyDenom, amount.Denom), + sdk.NewAttribute(types.AttributeKeyAmount, amount.Amount.String()), + sdk.NewAttribute(types.AttributeKeyAdmin, adminAddr.String()), + sdk.NewAttribute(types.AttributeKeyMintTo, mintToAddr.String()), + ), + ) + + return nil +} + +// burnFromWithAdmin burns coins from the specified address (admin-based, for MsgBurn). +func (k Keeper) burnFromWithAdmin(ctx context.Context, from sdk.AccAddress, amount sdk.Coin) error { + if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, from, types.ModuleName, sdk.NewCoins(amount)); err != nil { + return err + } + + if err := k.bankKeeper.BurnCoins(ctx, types.ModuleName, sdk.NewCoins(amount)); err != nil { + return err + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + sdkCtx.EventManager().EmitEvent( + sdk.NewEvent( + types.TypeEvtBurn, + sdk.NewAttribute(types.AttributeKeyDenom, amount.Denom), + sdk.NewAttribute(types.AttributeKeyAmount, amount.Amount.String()), + sdk.NewAttribute(types.AttributeKeyAdmin, from.String()), + ), + ) + + return nil +} + +func (k Keeper) validateMintBurnPermission(ctx context.Context, admin, denom string) error { + if err := types.ValidateTokenFactoryDenom(denom); err != nil { + return err + } + + md, err := k.GetAuthorityMetadata(ctx, denom) + if err != nil { + return errorsmod.Wrapf(types.ErrDenomNotFound, "denom %s not found", denom) + } + if md.Admin == "" { + return errorsmod.Wrapf(types.ErrAdminRenounced, "admin renounced for denom %s", denom) + } + if md.Admin != admin { + return errorsmod.Wrapf(types.ErrUnauthorized, "admin %s not authorized for denom %s", admin, denom) + } + return nil +} diff --git a/prototypes/x/tokenfactory/keeper/msg_server.go b/prototypes/x/tokenfactory/keeper/msg_server.go new file mode 100644 index 00000000000..85e94473dc9 --- /dev/null +++ b/prototypes/x/tokenfactory/keeper/msg_server.go @@ -0,0 +1,121 @@ +package keeper + +import ( + "context" + + "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + + errorsmod "cosmossdk.io/errors" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +type msgServer struct { + Keeper +} + +// NewMsgServer returns an implementation of the MsgServer interface for the provided Keeper. +func NewMsgServer(keeper Keeper) types.MsgServer { + return &msgServer{Keeper: keeper} +} + +var _ types.MsgServer = msgServer{} + +// CreateDenom implements types.MsgServer. This function is used to create a new denom. +// And sets the msg.Sender as the admin of the denom. +func (k msgServer) CreateDenom(goCtx context.Context, msg *types.MsgCreateDenom) (*types.MsgCreateDenomResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil { + return nil, errorsmod.Wrapf(types.ErrInvalidAddress, "error: %s", err.Error()) + } + + if err := k.Keeper.CreateDenom(ctx, msg.Sender, msg.Denom); err != nil { + return nil, err + } + + return &types.MsgCreateDenomResponse{}, nil +} + +// Mint implements types.MsgServer. This function is used to mint tokens to msg.MintToAddress. +// msg.Sender must be the admin of the denom. +func (k msgServer) Mint(ctx context.Context, msg *types.MsgMint) (*types.MsgMintResponse, error) { + adminAddr, err := sdk.AccAddressFromBech32(msg.From) + if err != nil { + return nil, errorsmod.Wrapf(types.ErrInvalidAddress, "error: %s", err.Error()) + } + + mintToAddr, err := sdk.AccAddressFromBech32(msg.Address) + if err != nil { + return nil, errorsmod.Wrapf(types.ErrInvalidAddress, "error: %s", err.Error()) + } + + // authorization and denom existence checks are handled here (not in keeper) + if err := k.validateMintBurnPermission(ctx, msg.From, msg.Amount.Denom); err != nil { + return nil, err + } + + if err := k.mintToWithAdmin(ctx, adminAddr, msg.Amount, mintToAddr); err != nil { + return nil, err + } + + return &types.MsgMintResponse{}, nil +} + +// Burn implements types.MsgServer. This function is used to burn tokens from msg.BurnFromAddress. +// msg.Sender must be the admin of the denom. +func (k msgServer) Burn(ctx context.Context, msg *types.MsgBurn) (*types.MsgBurnResponse, error) { + adminAddr, err := sdk.AccAddressFromBech32(msg.From) + if err != nil { + return nil, errorsmod.Wrapf(types.ErrInvalidAddress, "error: %s", err.Error()) + } + + // authorization and denom existence checks are handled here (not in keeper) + if err := k.validateMintBurnPermission(ctx, msg.From, msg.Amount.Denom); err != nil { + return nil, err + } + + if err := k.burnFromWithAdmin(ctx, adminAddr, msg.Amount); err != nil { + return nil, err + } + + return &types.MsgBurnResponse{}, nil +} + +// ChangeAdmin implements types.MsgServer. Transfers admin authority to a new address. +func (k msgServer) ChangeAdmin(ctx context.Context, msg *types.MsgChangeAdmin) (*types.MsgChangeAdminResponse, error) { + if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil { + return nil, errorsmod.Wrapf(types.ErrInvalidAddress, "invalid sender: %s", err.Error()) + } + + if _, err := sdk.AccAddressFromBech32(msg.NewAdmin); err != nil { + return nil, errorsmod.Wrapf(types.ErrInvalidAddress, "invalid new admin: %s", err.Error()) + } + + if err := types.ValidateTokenFactoryDenom(msg.Denom); err != nil { + return nil, err + } + + if err := k.Keeper.ChangeAdmin(ctx, msg.Denom, msg.Sender, msg.NewAdmin); err != nil { + return nil, err + } + + return &types.MsgChangeAdminResponse{}, nil +} + +// RenounceAdmin implements types.MsgServer. Permanently removes admin authority. +func (k msgServer) RenounceAdmin(ctx context.Context, msg *types.MsgRenounceAdmin) (*types.MsgRenounceAdminResponse, error) { + if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil { + return nil, errorsmod.Wrapf(types.ErrInvalidAddress, "invalid sender: %s", err.Error()) + } + + if err := types.ValidateTokenFactoryDenom(msg.Denom); err != nil { + return nil, err + } + + if err := k.Keeper.RenounceAdmin(ctx, msg.Denom, msg.Sender); err != nil { + return nil, err + } + + return &types.MsgRenounceAdminResponse{}, nil +} diff --git a/prototypes/x/tokenfactory/keeper/msg_server_test.go b/prototypes/x/tokenfactory/keeper/msg_server_test.go new file mode 100644 index 00000000000..c7ece9b5746 --- /dev/null +++ b/prototypes/x/tokenfactory/keeper/msg_server_test.go @@ -0,0 +1,598 @@ +package keeper_test + +import ( + "testing" + + "github.com/cosmos/sandbox-ledger/app" + "github.com/cosmos/sandbox-ledger/x/tokenfactory/keeper" + "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/stretchr/testify/require" + + "cosmossdk.io/math" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// TestMsgServer_CreateDenom tests the CreateDenom message handler. +func TestMsgServer_CreateDenom(t *testing.T) { + cases := []struct { + name string + creator string + denom string + malleate func(wfapp *app.SandboxApp, ctx sdk.Context) + err error + }{ + { + name: "success", + creator: creatorAddrA, + denom: testDenom, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) {}, + }, + { + name: "failure: duplicate denom", + creator: creatorAddrA, + denom: testDenom, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { + err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) + require.NoError(t, err) + }, + err: types.ErrDenomExists, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) + + tc.malleate(wfapp, ctx) + + res, err := ms.CreateDenom(ctx, types.NewMsgCreateDenom(tc.creator, tc.denom)) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + return + } + require.NoError(t, err) + require.NotNil(t, res) + + denoms, err := wfapp.TokenFactoryKeeper.GetDenomsFromCreator(ctx, tc.creator) + require.NoError(t, err) + require.Contains(t, denoms, tc.denom) + + md, found := wfapp.BankKeeper.GetDenomMetaData(ctx, tc.denom) + require.True(t, found) + require.Equal(t, tc.denom, md.Base) + require.Len(t, md.DenomUnits, 1) + require.Equal(t, tc.denom, md.DenomUnits[0].Denom) + require.EqualValues(t, 0, md.DenomUnits[0].Exponent) + }) + } +} + +// TestMsgServer_Mint tests the Mint message handler. +func TestMsgServer_Mint(t *testing.T) { + cases := []struct { + name string + from string + to string + denom string + amount int64 + err error + }{ + { + name: "success", + from: creatorAddrA, + to: creatorAddrB, + denom: testDenom, + amount: 1_000_000, + }, + { + name: "failure: unauthorized", + from: creatorAddrB, + to: creatorAddrB, + denom: testDenom, + amount: 1, + err: types.ErrUnauthorized, + }, + { + name: "failure: invalid recipient", + from: creatorAddrA, + to: "invalid", + denom: testDenom, + amount: 1, + err: types.ErrInvalidAddress, + }, + { + name: "failure: invalid denom", + from: creatorAddrA, + to: creatorAddrA, + denom: invalidDenom, + amount: 1, + err: types.ErrInvalidDenom, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) + + err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, tc.denom) + require.NoError(t, err) + + amt := sdk.NewCoin(tc.denom, math.NewInt(tc.amount)) + _, err = ms.Mint(ctx, types.NewMsgMint(tc.from, tc.to, amt)) + + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + return + } + require.NoError(t, err) + }) + } +} + +// TestMsgServer_Burn tests the Burn message handler. +func TestMsgServer_Burn(t *testing.T) { + var ( + denom string + mintAmount int64 + burnAmount int64 + burnFrom string + ) + + cases := []struct { + name string + err error + malleate func() + }{ + { + name: "success", + malleate: func() {}, + }, + { + name: "failure: unauthorized", + malleate: func() { + burnFrom = creatorAddrB + }, + err: types.ErrUnauthorized, + }, + { + name: "failure: nonexistent denom", + malleate: func() { + denom = nonExistentDenom + }, + err: types.ErrDenomNotFound, + }, + { + name: "failure: invalid sender", + malleate: func() { + burnFrom = "invalid" + }, + err: types.ErrInvalidAddress, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) + + denom = testDenom + mintAmount = 1_000_000 + burnAmount = 300_000 + burnFrom = creatorAddrA + + var err error + err = wfapp.TokenFactoryKeeper.CreateDenom(ctx, burnFrom, denom) + require.NoError(t, err) + _, err = ms.Mint(ctx, types.NewMsgMint(burnFrom, burnFrom, sdk.NewCoin(denom, math.NewInt(mintAmount)))) + require.NoError(t, err) + + originalBurnFrom := burnFrom + originalDenom := denom + pre := wfapp.BankKeeper.GetBalance(ctx, sdk.MustAccAddressFromBech32(burnFrom), denom) + require.Equal(t, math.NewInt(mintAmount), pre.Amount) + + tc.malleate() + + _, err = ms.Burn(ctx, types.NewMsgBurn(burnFrom, sdk.NewCoin(denom, math.NewInt(burnAmount)))) + + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + post := wfapp.BankKeeper.GetBalance(ctx, sdk.MustAccAddressFromBech32(originalBurnFrom), originalDenom) + require.Equal(t, pre.Amount.Int64(), post.Amount.Int64()) + return + } + require.NoError(t, err) + post := wfapp.BankKeeper.GetBalance(ctx, sdk.MustAccAddressFromBech32(burnFrom), denom) + require.Equal(t, pre.Amount.Sub(math.NewInt(burnAmount)), post.Amount) + }) + } +} + +// TestMsgServer_CreateDenom_EmitsEvent tests that CreateDenom emits the correct event +func TestMsgServer_CreateDenom_EmitsEvent(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) + + _, err := ms.CreateDenom(ctx, types.NewMsgCreateDenom(creatorAddrA, testDenom)) + require.NoError(t, err) + + events := ctx.EventManager().Events() + var foundEvent bool + for _, event := range events { + if event.Type == types.TypeEvtCreateDenom { + foundEvent = true + // Verify event attributes + var hasAdmin, hasDenom bool + for _, attr := range event.Attributes { + if attr.Key == types.AttributeKeyAdmin && attr.Value == creatorAddrA { + hasAdmin = true + } + if attr.Key == types.AttributeKeyDenom && attr.Value == testDenom { + hasDenom = true + } + } + require.True(t, hasAdmin, "event should have admin attribute") + require.True(t, hasDenom, "event should have denom attribute") + break + } + } + require.True(t, foundEvent, "CreateDenom should emit tokenfactory_create_denom event") +} + +// TestMsgServer_Mint_EmitsEvent tests that Mint emits the correct event +func TestMsgServer_Mint_EmitsEvent(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) + + err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) + require.NoError(t, err) + + // Clear events from CreateDenom + ctx = ctx.WithEventManager(sdk.NewEventManager()) + + amt := sdk.NewCoin(testDenom, math.NewInt(1000000)) + _, err = ms.Mint(ctx, types.NewMsgMint(creatorAddrA, creatorAddrB, amt)) + require.NoError(t, err) + + events := ctx.EventManager().Events() + var foundEvent bool + for _, event := range events { + if event.Type == types.TypeEvtMint { + foundEvent = true + // Verify event attributes + var hasAdmin, hasMintTo, hasDenom, hasAmount bool + for _, attr := range event.Attributes { + if attr.Key == types.AttributeKeyAdmin && attr.Value == creatorAddrA { + hasAdmin = true + } + if attr.Key == types.AttributeKeyMintTo && attr.Value == creatorAddrB { + hasMintTo = true + } + if attr.Key == types.AttributeKeyDenom && attr.Value == testDenom { + hasDenom = true + } + if attr.Key == types.AttributeKeyAmount { + hasAmount = true + } + } + require.True(t, hasAdmin, "event should have admin attribute") + require.True(t, hasMintTo, "event should have mint_to attribute") + require.True(t, hasDenom, "event should have denom attribute") + require.True(t, hasAmount, "event should have amount attribute") + break + } + } + require.True(t, foundEvent, "Mint should emit tokenfactory_mint event") +} + +// TestMsgServer_Burn_EmitsEvent tests that Burn emits the correct event +func TestMsgServer_Burn_EmitsEvent(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) + + err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) + require.NoError(t, err) + + amt := sdk.NewCoin(testDenom, math.NewInt(1000000)) + _, err = ms.Mint(ctx, types.NewMsgMint(creatorAddrA, creatorAddrA, amt)) + require.NoError(t, err) + + // Clear events from CreateDenom and Mint + ctx = ctx.WithEventManager(sdk.NewEventManager()) + + burnAmt := sdk.NewCoin(testDenom, math.NewInt(500000)) + _, err = ms.Burn(ctx, types.NewMsgBurn(creatorAddrA, burnAmt)) + require.NoError(t, err) + + events := ctx.EventManager().Events() + var foundEvent bool + for _, event := range events { + if event.Type == types.TypeEvtBurn { + foundEvent = true + // Verify event attributes + var hasAdmin, hasDenom, hasAmount bool + for _, attr := range event.Attributes { + if attr.Key == types.AttributeKeyAdmin && attr.Value == creatorAddrA { + hasAdmin = true + } + if attr.Key == types.AttributeKeyDenom && attr.Value == testDenom { + hasDenom = true + } + if attr.Key == types.AttributeKeyAmount { + hasAmount = true + } + } + require.True(t, hasAdmin, "event should have admin attribute") + require.True(t, hasDenom, "event should have denom attribute") + require.True(t, hasAmount, "event should have amount attribute") + break + } + } + require.True(t, foundEvent, "Burn should emit tokenfactory_burn event") +} + +// TestMsgServer_ChangeAdmin tests the ChangeAdmin message handler. +func TestMsgServer_ChangeAdmin(t *testing.T) { + cases := []struct { + name string + sender string + newAdmin string + denom string + malleate func(wfapp *app.SandboxApp, ctx sdk.Context) + err error + }{ + { + name: "success", + sender: creatorAddrA, + newAdmin: creatorAddrB, + denom: testDenom, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) {}, + }, + { + name: "failure: unauthorized", + sender: creatorAddrB, + newAdmin: creatorAddrB, + denom: testDenom, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) {}, + err: types.ErrUnauthorized, + }, + { + name: "failure: invalid new admin", + sender: creatorAddrA, + newAdmin: "invalid", + denom: testDenom, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) {}, + err: types.ErrInvalidAddress, + }, + { + name: "failure: denom not found", + sender: creatorAddrA, + newAdmin: creatorAddrB, + denom: nonExistentDenom, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) {}, + err: types.ErrDenomNotFound, + }, + { + name: "failure: admin already renounced", + sender: creatorAddrA, + newAdmin: creatorAddrB, + denom: testDenom, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { + err := wfapp.TokenFactoryKeeper.RenounceAdmin(ctx, testDenom, creatorAddrA) + require.NoError(t, err) + }, + err: types.ErrAdminRenounced, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) + + err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) + require.NoError(t, err) + + tc.malleate(wfapp, ctx) + + _, err = ms.ChangeAdmin(ctx, types.NewMsgChangeAdmin(tc.sender, tc.denom, tc.newAdmin)) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + return + } + require.NoError(t, err) + + // Verify admin changed + md, err := wfapp.TokenFactoryKeeper.GetAuthorityMetadata(ctx, tc.denom) + require.NoError(t, err) + require.Equal(t, tc.newAdmin, md.Admin) + }) + } +} + +// TestMsgServer_RenounceAdmin tests the RenounceAdmin message handler. +func TestMsgServer_RenounceAdmin(t *testing.T) { + cases := []struct { + name string + sender string + denom string + malleate func(wfapp *app.SandboxApp, ctx sdk.Context) + err error + }{ + { + name: "success", + sender: creatorAddrA, + denom: testDenom, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) {}, + }, + { + name: "failure: unauthorized", + sender: creatorAddrB, + denom: testDenom, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) {}, + err: types.ErrUnauthorized, + }, + { + name: "failure: denom not found", + sender: creatorAddrA, + denom: nonExistentDenom, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) {}, + err: types.ErrDenomNotFound, + }, + { + name: "failure: already renounced", + sender: creatorAddrA, + denom: testDenom, + malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { + err := wfapp.TokenFactoryKeeper.RenounceAdmin(ctx, testDenom, creatorAddrA) + require.NoError(t, err) + }, + err: types.ErrAdminRenounced, + }, + } + + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) + + err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) + require.NoError(t, err) + + tc.malleate(wfapp, ctx) + + _, err = ms.RenounceAdmin(ctx, types.NewMsgRenounceAdmin(tc.sender, tc.denom)) + if tc.err != nil { + require.ErrorIs(t, err, tc.err) + return + } + require.NoError(t, err) + + // Verify admin is empty + md, err := wfapp.TokenFactoryKeeper.GetAuthorityMetadata(ctx, tc.denom) + require.NoError(t, err) + require.Empty(t, md.Admin) + }) + } +} + +// TestMsgServer_RenounceAdmin_BlocksMinting tests that renouncing admin blocks MsgMint +func TestMsgServer_RenounceAdmin_BlocksMinting(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) + + err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) + require.NoError(t, err) + + // Mint works before renouncing + amt := sdk.NewCoin(testDenom, math.NewInt(1000)) + _, err = ms.Mint(ctx, types.NewMsgMint(creatorAddrA, creatorAddrA, amt)) + require.NoError(t, err) + + // Renounce admin + _, err = ms.RenounceAdmin(ctx, types.NewMsgRenounceAdmin(creatorAddrA, testDenom)) + require.NoError(t, err) + + // Mint fails after renouncing + _, err = ms.Mint(ctx, types.NewMsgMint(creatorAddrA, creatorAddrA, amt)) + require.ErrorIs(t, err, types.ErrAdminRenounced) +} + +// TestMsgServer_RenounceAdmin_KeepsModuleMinting tests that renouncing admin doesn't block keeper MintTo +func TestMsgServer_RenounceAdmin_KeepsModuleMinting(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) + + err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) + require.NoError(t, err) + + // Renounce admin + _, err = ms.RenounceAdmin(ctx, types.NewMsgRenounceAdmin(creatorAddrA, testDenom)) + require.NoError(t, err) + + // Keeper MintTo still works (for module usage like IFT) + to := sdk.MustAccAddressFromBech32(creatorAddrB) + err = wfapp.TokenFactoryKeeper.MintTo(ctx, testDenom, math.NewInt(1000), to) + require.NoError(t, err) + + // Verify balance + balance := wfapp.BankKeeper.GetBalance(ctx, to, testDenom) + require.Equal(t, math.NewInt(1000), balance.Amount) +} + +// TestMsgServer_ChangeAdmin_EmitsEvent tests that ChangeAdmin emits the correct event +func TestMsgServer_ChangeAdmin_EmitsEvent(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) + + err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) + require.NoError(t, err) + + ctx = ctx.WithEventManager(sdk.NewEventManager()) + + _, err = ms.ChangeAdmin(ctx, types.NewMsgChangeAdmin(creatorAddrA, testDenom, creatorAddrB)) + require.NoError(t, err) + + events := ctx.EventManager().Events() + var foundEvent bool + for _, event := range events { + if event.Type == types.TypeEvtChangeAdmin { + foundEvent = true + var hasAdmin, hasNewAdmin, hasDenom bool + for _, attr := range event.Attributes { + if attr.Key == types.AttributeKeyAdmin && attr.Value == creatorAddrA { + hasAdmin = true + } + if attr.Key == types.AttributeKeyNewAdmin && attr.Value == creatorAddrB { + hasNewAdmin = true + } + if attr.Key == types.AttributeKeyDenom && attr.Value == testDenom { + hasDenom = true + } + } + require.True(t, hasAdmin, "event should have admin attribute") + require.True(t, hasNewAdmin, "event should have new_admin attribute") + require.True(t, hasDenom, "event should have denom attribute") + break + } + } + require.True(t, foundEvent, "ChangeAdmin should emit tokenfactory_change_admin event") +} + +// TestMsgServer_RenounceAdmin_EmitsEvent tests that RenounceAdmin emits the correct event +func TestMsgServer_RenounceAdmin_EmitsEvent(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) + + err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) + require.NoError(t, err) + + ctx = ctx.WithEventManager(sdk.NewEventManager()) + + _, err = ms.RenounceAdmin(ctx, types.NewMsgRenounceAdmin(creatorAddrA, testDenom)) + require.NoError(t, err) + + events := ctx.EventManager().Events() + var foundEvent bool + for _, event := range events { + if event.Type == types.TypeEvtRenounceAdmin { + foundEvent = true + var hasAdmin, hasDenom bool + for _, attr := range event.Attributes { + if attr.Key == types.AttributeKeyAdmin && attr.Value == creatorAddrA { + hasAdmin = true + } + if attr.Key == types.AttributeKeyDenom && attr.Value == testDenom { + hasDenom = true + } + } + require.True(t, hasAdmin, "event should have admin attribute") + require.True(t, hasDenom, "event should have denom attribute") + break + } + } + require.True(t, foundEvent, "RenounceAdmin should emit tokenfactory_renounce_admin event") +} diff --git a/prototypes/x/tokenfactory/keeper/params.go b/prototypes/x/tokenfactory/keeper/params.go new file mode 100644 index 00000000000..4d75799eb8b --- /dev/null +++ b/prototypes/x/tokenfactory/keeper/params.go @@ -0,0 +1,21 @@ +package keeper + +import ( + "context" + + "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" +) + +// GetParams gets the tokenfactory module's parameters. +func (k Keeper) GetParams(ctx context.Context) (types.Params, error) { + params, err := k.ParamsStore.Get(ctx) + if err != nil { + return types.Params{}, err + } + return params, nil +} + +// SetParams sets the tokenfactory module's parameters. +func (k Keeper) SetParams(ctx context.Context, params types.Params) error { + return k.ParamsStore.Set(ctx, params) +} diff --git a/prototypes/x/tokenfactory/keeper/query.go b/prototypes/x/tokenfactory/keeper/query.go new file mode 100644 index 00000000000..a280c2afc31 --- /dev/null +++ b/prototypes/x/tokenfactory/keeper/query.go @@ -0,0 +1,45 @@ +package keeper + +import ( + "context" + + "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" +) + +var _ types.QueryServer = Keeper{} + +// DenomAuthorityMetadata implements types.QueryServer. +func (k Keeper) DenomAuthorityMetadata(ctx context.Context, req *types.QueryDenomAuthorityMetadataRequest) (*types.QueryDenomAuthorityMetadataResponse, error) { + authorityMetadata, err := k.GetAuthorityMetadata(ctx, req.Denom) + if err != nil { + return nil, err + } + + return &types.QueryDenomAuthorityMetadataResponse{ + AuthorityMetadata: authorityMetadata, + }, nil +} + +// DenomsByCreator implements types.QueryServer. +func (k Keeper) DenomsByCreator(ctx context.Context, req *types.QueryDenomsByCreatorRequest) (*types.QueryDenomsByCreatorResponse, error) { + denoms, err := k.GetDenomsFromCreator(ctx, req.Creator) + if err != nil { + return nil, err + } + + return &types.QueryDenomsByCreatorResponse{ + Denoms: denoms, + }, nil +} + +// Params implements types.QueryServer. +func (k Keeper) Params(ctx context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + params, err := k.GetParams(ctx) + if err != nil { + return nil, err + } + + return &types.QueryParamsResponse{ + Params: params, + }, nil +} diff --git a/prototypes/x/tokenfactory/keeper/query_test.go b/prototypes/x/tokenfactory/keeper/query_test.go new file mode 100644 index 00000000000..43cbd62346e --- /dev/null +++ b/prototypes/x/tokenfactory/keeper/query_test.go @@ -0,0 +1,65 @@ +package keeper_test + +import ( + "testing" + + "github.com/cosmos/sandbox-ledger/x/tokenfactory/keeper" + "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/stretchr/testify/require" +) + +func TestQuery_DenomAuthorityMetadata(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) + denom := testDenom + + _, err := ms.CreateDenom(ctx, types.NewMsgCreateDenom(creatorAddrA, denom)) + require.NoError(t, err) + + res, err := wfapp.TokenFactoryKeeper.DenomAuthorityMetadata(ctx, &types.QueryDenomAuthorityMetadataRequest{Denom: denom}) + require.NoError(t, err) + require.NotNil(t, res) + require.Equal(t, creatorAddrA, res.AuthorityMetadata.Admin) + + res, err = wfapp.TokenFactoryKeeper.DenomAuthorityMetadata(ctx, &types.QueryDenomAuthorityMetadataRequest{Denom: "uwfdeposit"}) + require.Error(t, err) + require.Nil(t, res) +} + +func TestQuery_DenomsByCreator(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) + + denomA1 := "denom_a1" + denomA2 := "denom_a2" + denomB1 := "denom_b1" + + _, err := ms.CreateDenom(ctx, types.NewMsgCreateDenom(creatorAddrA, denomA1)) + require.NoError(t, err) + _, err = ms.CreateDenom(ctx, types.NewMsgCreateDenom(creatorAddrA, denomA2)) + require.NoError(t, err) + _, err = ms.CreateDenom(ctx, types.NewMsgCreateDenom(creatorAddrB, denomB1)) + require.NoError(t, err) + + res, err := wfapp.TokenFactoryKeeper.DenomsByCreator(ctx, &types.QueryDenomsByCreatorRequest{Creator: creatorAddrA}) + require.NoError(t, err) + require.NotNil(t, res) + require.Len(t, res.Denoms, 2) + require.Contains(t, res.Denoms, denomA1) + require.Contains(t, res.Denoms, denomA2) + + res, err = wfapp.TokenFactoryKeeper.DenomsByCreator(ctx, &types.QueryDenomsByCreatorRequest{Creator: "wf1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"}) + require.NoError(t, err) + require.Empty(t, res.Denoms) +} + +func TestQueryParams(t *testing.T) { + wfapp, ctx := setupIntegrationApp(t) + + params := types.DefaultParams() + require.NoError(t, wfapp.TokenFactoryKeeper.SetParams(ctx, params)) + + response, err := wfapp.TokenFactoryKeeper.Params(ctx, &types.QueryParamsRequest{}) + require.NoError(t, err) + require.Equal(t, params, response.Params) +} diff --git a/prototypes/x/tokenfactory/module.go b/prototypes/x/tokenfactory/module.go new file mode 100644 index 00000000000..974597d6f2e --- /dev/null +++ b/prototypes/x/tokenfactory/module.go @@ -0,0 +1,150 @@ +package tokenfactory + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/cosmos/sandbox-ledger/x/tokenfactory/cli" + "github.com/cosmos/sandbox-ledger/x/tokenfactory/keeper" + "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + + autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" + "cosmossdk.io/core/appmodule" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" +) + +var ( + _ module.AppModuleBasic = (*AppModule)(nil) + _ module.HasGenesis = (*AppModule)(nil) + _ module.HasConsensusVersion = (*AppModule)(nil) + + _ appmodule.AppModule = (*AppModule)(nil) + _ appmodule.HasBeginBlocker = (*AppModule)(nil) + _ appmodule.HasEndBlocker = (*AppModule)(nil) +) + +const ConsensusVersion = 1 + +// AppModuleBasic implements the AppModuleBasic interface that defines the +// independent methods a Cosmos SDK module needs to implement. +type AppModuleBasic struct { + cdc codec.BinaryCodec +} + +func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { + return AppModuleBasic{cdc: cdc} +} + +// Name returns the name of the module as a string. +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +// RegisterLegacyAminoCodec registers the amino codec for the module +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + types.RegisterCodec(cdc) +} + +// RegisterInterfaces registers the interfaces for the module +func (AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { + types.RegisterInterfaces(reg) +} + +// DefaultGenesis returns the default genesis state +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesis()) +} + +// ValidateGenesis performs genesis state validation +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + var genState types.GenesisState + if err := cdc.UnmarshalJSON(bz, &genState); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + return types.ValidateGenesis(genState) +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + if err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil { + panic(err) + } +} + +// AppModule implements the AppModule interface that defines the inter-dependent methods that modules need to implement +type AppModule struct { + AppModuleBasic + + keeper keeper.Keeper + accountKeeper types.AccountKeeper + bankKeeper types.BankKeeper +} + +// NewAppModule creates a new AppModule instance. +func NewAppModule(cdc codec.BinaryCodec, k keeper.Keeper, accountKeeper types.AccountKeeper, bankKeeper types.BankKeeper) AppModule { + return AppModule{ + AppModuleBasic: NewAppModuleBasic(cdc), + keeper: k, + accountKeeper: accountKeeper, + bankKeeper: bankKeeper, + } +} + +// RegisterServices registers a gRPC query service to respond to the module-specific gRPC queries +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServer(am.keeper)) + types.RegisterQueryServer(cfg.QueryServer(), am.keeper) +} + +// InitGenesis performs the tokenfactory module's genesis initialization +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) { + var genState types.GenesisState + cdc.MustUnmarshalJSON(gs, &genState) + + am.keeper.InitGenesis(ctx, genState) +} + +// ExportGenesis returns the tokenfactory module's exported genesis +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + genState := am.keeper.ExportGenesis(ctx) + return cdc.MustMarshalJSON(genState) +} + +// ConsensusVersion implements ConsensusVersion +func (AppModule) ConsensusVersion() uint64 { return ConsensusVersion } + +// BeginBlock contains the logic that is automatically triggered at the beginning of each block +func (AppModule) BeginBlock(_ context.Context) error { + return nil +} + +// EndBlock contains the logic that is automatically triggered at the end of each block +func (AppModule) EndBlock(_ context.Context) error { + return nil +} + +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (AppModule) IsOnePerModuleType() {} + +// IsAppModule implements the appmodule.AppModule interface. +func (AppModule) IsAppModule() {} + +// AutoCLIOptions implements the autocli.HasAutoCLIConfig interface. +func (AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { + return types.AutoCLIOptions() +} + +// GetTxCmd implements autocli.HasCustomTxCommand. +// Provides custom CLI commands for Mint and Burn which use cosmos.base.v1beta1.Coin +// positional args that are incompatible with AutoCLI's protov2 reflection. +func (AppModule) GetTxCmd() *cobra.Command { + return cli.GetTxCmd() +} diff --git a/prototypes/x/tokenfactory/module_test.go b/prototypes/x/tokenfactory/module_test.go new file mode 100644 index 00000000000..cf7e5e25c53 --- /dev/null +++ b/prototypes/x/tokenfactory/module_test.go @@ -0,0 +1,28 @@ +package tokenfactory_test + +import ( + "testing" + + "github.com/cosmos/sandbox-ledger/x/tokenfactory" + "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/stretchr/testify/require" +) + +func TestAutoCLIOptions(t *testing.T) { + module := tokenfactory.AppModule{} + opts := module.AutoCLIOptions() + + require.NotNil(t, opts) + require.NotNil(t, opts.Query) + require.NotNil(t, opts.Tx) +} + +func TestAppModuleName(t *testing.T) { + module := tokenfactory.AppModuleBasic{} + require.Equal(t, types.ModuleName, module.Name()) +} + +func TestAppModuleConsensusVersion(t *testing.T) { + module := tokenfactory.AppModule{} + require.Equal(t, uint64(1), module.ConsensusVersion()) +} diff --git a/prototypes/x/tokenfactory/types/autocli.go b/prototypes/x/tokenfactory/types/autocli.go new file mode 100644 index 00000000000..aefb56dddec --- /dev/null +++ b/prototypes/x/tokenfactory/types/autocli.go @@ -0,0 +1,77 @@ +package types + +import ( + autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" +) + +// AutoCLIOptions implements the autocli.HasAutoCLIConfig interface. +func AutoCLIOptions() *autocliv1.ModuleOptions { + return &autocliv1.ModuleOptions{ + Query: &autocliv1.ServiceCommandDescriptor{ + Service: Query_serviceDesc.ServiceName, + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "Params", + Use: "params", + Short: "Query the tokenfactory parameters", + }, + { + RpcMethod: "DenomAuthorityMetadata", + Use: "denom-authority-metadata [denom]", + Short: "Query the authority metadata for a specific denom", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{ + {ProtoField: "denom"}, + }, + }, + { + RpcMethod: "DenomsByCreator", + Use: "denoms-by-creator [creator]", + Short: "Query all denoms created by a specific creator", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{ + {ProtoField: "creator"}, + }, + }, + }, + }, + Tx: &autocliv1.ServiceCommandDescriptor{ + Service: Msg_serviceDesc.ServiceName, + EnhanceCustomCommand: true, + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "CreateDenom", + Use: "create-denom [denom]", + Short: "Create a new tokenfactory denomination", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{ + {ProtoField: "denom"}, + }, + }, + { + RpcMethod: "Mint", + Skip: true, // Custom CLI: Coin positional arg panics with AutoCLI's protov2 reflection + }, + { + RpcMethod: "Burn", + Skip: true, // Custom CLI: Coin positional arg panics with AutoCLI's protov2 reflection + }, + { + RpcMethod: "ChangeAdmin", + Use: "change-admin [denom] [new_admin]", + Short: "Transfer admin authority to a new address", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{ + {ProtoField: "denom"}, + {ProtoField: "new_admin"}, + }, + }, + { + RpcMethod: "RenounceAdmin", + Use: "renounce-admin [denom]", + Short: "Permanently remove admin authority", + Long: "Permanently remove admin authority. After renouncing, no one can mint or burn via MsgMint/MsgBurn.", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{ + {ProtoField: "denom"}, + }, + }, + }, + }, + } +} diff --git a/prototypes/x/tokenfactory/types/codec.go b/prototypes/x/tokenfactory/types/codec.go new file mode 100644 index 00000000000..0a36c4030b4 --- /dev/null +++ b/prototypes/x/tokenfactory/types/codec.go @@ -0,0 +1,27 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" +) + +// RegisterCodec registers the necessary x/tokenfactory interfaces and concrete types +// Required for legacy amino codec. +func RegisterCodec(cdc *codec.LegacyAmino) { + cdc.RegisterConcrete(&MsgCreateDenom{}, "tokenfactory/MsgCreateDenom", nil) + cdc.RegisterConcrete(&MsgMint{}, "tokenfactory/MsgMint", nil) + cdc.RegisterConcrete(&MsgBurn{}, "tokenfactory/MsgBurn", nil) +} + +// RegisterInterfaces register the tokenfactory module interfaces to protobuf Any. +func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { + registry.RegisterImplementations((*sdk.Msg)(nil), + &MsgCreateDenom{}, + &MsgMint{}, + &MsgBurn{}, + ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) +} diff --git a/prototypes/x/tokenfactory/types/denom.go b/prototypes/x/tokenfactory/types/denom.go new file mode 100644 index 00000000000..4eaea2ff840 --- /dev/null +++ b/prototypes/x/tokenfactory/types/denom.go @@ -0,0 +1,21 @@ +package types + +import ( + "regexp" + + errorsmod "cosmossdk.io/errors" +) + +// precompiled for performance +var denomRegex = regexp.MustCompile(`^[a-zA-Z0-9]+$`) + +// ValidateTokenFactoryDenom validates that a denom is a valid tokenfactory denom +func ValidateTokenFactoryDenom(denom string) error { + if len(denom) == 0 || len(denom) > 20 { + return errorsmod.Wrapf(ErrInvalidDenom, "invalid denom, must be between 1 and 20 characters: %s", denom) + } + if !denomRegex.MatchString(denom) { + return errorsmod.Wrapf(ErrInvalidDenom, "invalid denom, must contain only alphanumeric characters: %s", denom) + } + return nil +} diff --git a/prototypes/x/tokenfactory/types/denom_test.go b/prototypes/x/tokenfactory/types/denom_test.go new file mode 100644 index 00000000000..cf84518f7c3 --- /dev/null +++ b/prototypes/x/tokenfactory/types/denom_test.go @@ -0,0 +1,64 @@ +package types_test + +import ( + "testing" + + "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/stretchr/testify/require" +) + +const ( + testDenom = "testtoken" + invalidDenom = "not-so-alphanumeric" +) + +func TestValidateTokenFactoryDenom(t *testing.T) { + tests := []struct { + name string + denom string + expectErr error + }{ + { + name: "valid denom", + denom: testDenom, + expectErr: nil, + }, + { + name: "valid denom, max length", + denom: "aaaaaaaaaaaaaaaaaaaa", + expectErr: nil, + }, + { + name: "valid denom, min length", + denom: "a", + expectErr: nil, + }, + { + name: "valid denom, alphanumeric", + denom: "testtoken1234567890", + expectErr: nil, + }, + { + name: "invalid denom, too long", + denom: "testtoken123456789012345678901", + expectErr: types.ErrInvalidDenom, + }, + { + name: "invalid denom, too short", + denom: "", + expectErr: types.ErrInvalidDenom, + }, + { + name: "invalid denom, non alphanumeric", + denom: invalidDenom, + expectErr: types.ErrInvalidDenom, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := types.ValidateTokenFactoryDenom(tt.denom) + require.ErrorIs(t, err, tt.expectErr) + }) + } +} diff --git a/prototypes/x/tokenfactory/types/errors.go b/prototypes/x/tokenfactory/types/errors.go new file mode 100644 index 00000000000..d7a019f922f --- /dev/null +++ b/prototypes/x/tokenfactory/types/errors.go @@ -0,0 +1,22 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" +) + +// TokenFactory sentinel errors +var ( + ErrInvalidRequest = errorsmod.Register(ModuleName, 1, "invalid request") + ErrDenomExists = errorsmod.Register(ModuleName, 2, "attempting to create a denom that already exists (has bank metadata)") + ErrUnauthorized = errorsmod.Register(ModuleName, 3, "unauthorized account") + ErrInvalidDenom = errorsmod.Register(ModuleName, 4, "invalid denom") + ErrInvalidCreator = errorsmod.Register(ModuleName, 5, "invalid creator") + ErrInvalidAddress = errorsmod.Register(ModuleName, 6, "invalid address") + ErrDenomNotFound = errorsmod.Register(ModuleName, 8, "denom not found") + ErrCreatorNotFound = errorsmod.Register(ModuleName, 9, "creator not found") + ErrInvalidGenesis = errorsmod.Register(ModuleName, 10, "invalid genesis") + ErrDenomTooLong = errorsmod.Register(ModuleName, 11, "denom too long") + ErrInvalidAuthorityMetadata = errorsmod.Register(ModuleName, 12, "invalid authority metadata") + ErrInvalidAmount = errorsmod.Register(ModuleName, 13, "invalid amount") + ErrAdminRenounced = errorsmod.Register(ModuleName, 14, "admin has been renounced") +) diff --git a/prototypes/x/tokenfactory/types/events.go b/prototypes/x/tokenfactory/types/events.go new file mode 100644 index 00000000000..2aaebd11bdf --- /dev/null +++ b/prototypes/x/tokenfactory/types/events.go @@ -0,0 +1,18 @@ +package types + +const ( + // Event types + TypeEvtCreateDenom = "tokenfactory_create_denom" + TypeEvtMint = "tokenfactory_mint" + TypeEvtBurn = "tokenfactory_burn" + TypeEvtChangeAdmin = "tokenfactory_change_admin" + TypeEvtRenounceAdmin = "tokenfactory_renounce_admin" + + // Attribute keys + AttributeKeyDenom = "denom" + AttributeKeyAdmin = "admin" + AttributeKeyNewAdmin = "new_admin" + AttributeKeyMintTo = "mint_to" + AttributeKeyBurnFrom = "burn_from" + AttributeKeyAmount = "amount" +) diff --git a/prototypes/x/tokenfactory/types/expected_keepers.go b/prototypes/x/tokenfactory/types/expected_keepers.go new file mode 100644 index 00000000000..a9768fdb557 --- /dev/null +++ b/prototypes/x/tokenfactory/types/expected_keepers.go @@ -0,0 +1,25 @@ +package types + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" +) + +type BankKeeper interface { + MintCoins(ctx context.Context, moduleName string, amounts sdk.Coins) error + BurnCoins(ctx context.Context, moduleName string, amounts sdk.Coins) error + SendCoinsFromModuleToAccount(ctx context.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error + SendCoinsFromAccountToModule(ctx context.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error + GetBalance(ctx context.Context, addr sdk.AccAddress, denom string) sdk.Coin + GetAllBalances(ctx context.Context, addr sdk.AccAddress) sdk.Coins + GetSupply(ctx context.Context, denom string) sdk.Coin + HasSupply(ctx context.Context, denom string) bool + GetDenomMetaData(ctx context.Context, denom string) (banktypes.Metadata, bool) + SetDenomMetaData(ctx context.Context, denomMetaData banktypes.Metadata) +} + +type AccountKeeper interface { + GetModuleAccount(ctx context.Context, moduleName string) sdk.ModuleAccountI +} diff --git a/prototypes/x/tokenfactory/types/genesis.go b/prototypes/x/tokenfactory/types/genesis.go new file mode 100644 index 00000000000..869b385224a --- /dev/null +++ b/prototypes/x/tokenfactory/types/genesis.go @@ -0,0 +1,42 @@ +package types + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// DefaultGenesis returns the default genesis state +func DefaultGenesis() *GenesisState { + return &GenesisState{ + Params: DefaultParams(), + FactoryDenoms: []GenesisDenom{}, + } +} + +// DefaultParams returns the default parameters +func DefaultParams() Params { + return Params{} +} + +// ValidateGenesis validates the tokenfactory genesis parameters +func ValidateGenesis(data GenesisState) error { + if err := data.Params.Validate(); err != nil { + return err + } + + for _, denom := range data.FactoryDenoms { + if err := ValidateTokenFactoryDenom(denom.Denom); err != nil { + return err + } + + if _, err := sdk.AccAddressFromBech32(denom.AuthorityMetadata.Admin); err != nil { + return err + } + } + + return nil +} + +// Validate validates the parameters +func (Params) Validate() error { + return nil +} diff --git a/prototypes/x/tokenfactory/types/genesis.pb.go b/prototypes/x/tokenfactory/types/genesis.pb.go new file mode 100644 index 00000000000..83fb03f7344 --- /dev/null +++ b/prototypes/x/tokenfactory/types/genesis.pb.go @@ -0,0 +1,615 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: sandbox/tokenfactory/genesis.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// GenesisState defines the tokenfactory module's genesis state. +type GenesisState struct { + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` + FactoryDenoms []GenesisDenom `protobuf:"bytes,2,rep,name=factory_denoms,json=factoryDenoms,proto3" json:"factory_denoms"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_3dab0b9f9ff24ee2, []int{0} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func (m *GenesisState) GetFactoryDenoms() []GenesisDenom { + if m != nil { + return m.FactoryDenoms + } + return nil +} + +// GenesisDenom defines a genesis denom for the tokenfactory module. +type GenesisDenom struct { + Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"` + AuthorityMetadata DenomAuthorityMetadata `protobuf:"bytes,2,opt,name=authority_metadata,json=authorityMetadata,proto3" json:"authority_metadata"` +} + +func (m *GenesisDenom) Reset() { *m = GenesisDenom{} } +func (m *GenesisDenom) String() string { return proto.CompactTextString(m) } +func (*GenesisDenom) ProtoMessage() {} +func (*GenesisDenom) Descriptor() ([]byte, []int) { + return fileDescriptor_3dab0b9f9ff24ee2, []int{1} +} +func (m *GenesisDenom) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisDenom) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisDenom.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GenesisDenom) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisDenom.Merge(m, src) +} +func (m *GenesisDenom) XXX_Size() int { + return m.Size() +} +func (m *GenesisDenom) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisDenom.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisDenom proto.InternalMessageInfo + +func (m *GenesisDenom) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *GenesisDenom) GetAuthorityMetadata() DenomAuthorityMetadata { + if m != nil { + return m.AuthorityMetadata + } + return DenomAuthorityMetadata{} +} + +func init() { + proto.RegisterType((*GenesisState)(nil), "sandbox.tokenfactory.GenesisState") + proto.RegisterType((*GenesisDenom)(nil), "sandbox.tokenfactory.GenesisDenom") +} + +func init() { + proto.RegisterFile("sandbox/tokenfactory/genesis.proto", fileDescriptor_3dab0b9f9ff24ee2) +} + +var fileDescriptor_3dab0b9f9ff24ee2 = []byte{ + // 303 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2a, 0x4e, 0xcc, 0x4b, + 0x49, 0xca, 0xaf, 0xd0, 0x2f, 0xc9, 0xcf, 0x4e, 0xcd, 0x4b, 0x4b, 0x4c, 0x2e, 0xc9, 0x2f, 0xaa, + 0xd4, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, + 0x81, 0xaa, 0xd1, 0x43, 0x56, 0x23, 0x25, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x56, 0xa0, 0x0f, 0x62, + 0x41, 0xd4, 0x4a, 0xa9, 0x63, 0x35, 0x0f, 0x99, 0x03, 0x51, 0xa8, 0x34, 0x9b, 0x91, 0x8b, 0xc7, + 0x1d, 0x62, 0x4d, 0x70, 0x49, 0x62, 0x49, 0xaa, 0x90, 0x15, 0x17, 0x5b, 0x41, 0x62, 0x51, 0x62, + 0x6e, 0xb1, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0xb7, 0x91, 0x8c, 0x1e, 0x36, 0x6b, 0xf5, 0x02, 0xc0, + 0x6a, 0x9c, 0x58, 0x4e, 0xdc, 0x93, 0x67, 0x08, 0x82, 0xea, 0x10, 0xf2, 0xe7, 0xe2, 0x83, 0xca, + 0xc7, 0xa7, 0xa4, 0xe6, 0xe5, 0xe7, 0x16, 0x4b, 0x30, 0x29, 0x30, 0x6b, 0x70, 0x1b, 0x29, 0x61, + 0x37, 0x03, 0x6a, 0xaf, 0x0b, 0x48, 0x29, 0xd4, 0x24, 0x5e, 0xa8, 0x1c, 0x58, 0xac, 0x58, 0xa9, + 0x1d, 0xe1, 0x3a, 0xb0, 0x88, 0x90, 0x08, 0x17, 0x2b, 0xd8, 0x64, 0xb0, 0xe3, 0x38, 0x83, 0x20, + 0x1c, 0xa1, 0x44, 0x2e, 0xa1, 0xc4, 0xd2, 0x92, 0x8c, 0xfc, 0xa2, 0xcc, 0x92, 0xca, 0xf8, 0xdc, + 0xd4, 0x92, 0xc4, 0x94, 0xc4, 0x92, 0x44, 0x09, 0x26, 0xb0, 0xfb, 0x75, 0xb0, 0xdb, 0x0d, 0x36, + 0xce, 0x11, 0xa6, 0xc9, 0x17, 0xaa, 0x07, 0xea, 0x0a, 0xc1, 0x44, 0x0c, 0x09, 0xff, 0x13, 0x8f, + 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, + 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0x32, 0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, + 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xce, 0x2f, 0xce, 0xcd, 0x2f, 0xd6, 0x87, 0xda, 0xa8, 0x9b, 0x93, + 0x9a, 0x92, 0x9e, 0x5a, 0xa4, 0x8f, 0x1e, 0x0b, 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0xe0, 0xf0, + 0x37, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xa2, 0xaa, 0x67, 0xd0, 0xfa, 0x01, 0x00, 0x00, +} + +func (m *GenesisState) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.FactoryDenoms) > 0 { + for iNdEx := len(m.FactoryDenoms) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.FactoryDenoms[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *GenesisDenom) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenesisDenom) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisDenom) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.AuthorityMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + if len(m.FactoryDenoms) > 0 { + for _, e := range m.FactoryDenoms { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + return n +} + +func (m *GenesisDenom) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = m.AuthorityMetadata.Size() + n += 1 + l + sovGenesis(uint64(l)) + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *GenesisState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FactoryDenoms", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FactoryDenoms = append(m.FactoryDenoms, GenesisDenom{}) + if err := m.FactoryDenoms[len(m.FactoryDenoms)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GenesisDenom) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenesisDenom: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisDenom: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthorityMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.AuthorityMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/prototypes/x/tokenfactory/types/genesis_test.go b/prototypes/x/tokenfactory/types/genesis_test.go new file mode 100644 index 00000000000..77f2b4997f1 --- /dev/null +++ b/prototypes/x/tokenfactory/types/genesis_test.go @@ -0,0 +1,92 @@ +package types_test + +import ( + "testing" + + "github.com/cosmos/sandbox-ledger/testutil" + "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/stretchr/testify/require" +) + +func TestValidateGenesis(t *testing.T) { + testutil.SafeSetAddressPrefixes() + tests := []struct { + name string + genState types.GenesisState + expectErr bool + }{ + { + name: "default genesis", + genState: *types.DefaultGenesis(), + expectErr: false, + }, + { + name: "valid genesis with denoms", + genState: types.GenesisState{ + Params: types.DefaultParams(), + FactoryDenoms: []types.GenesisDenom{ + { + Denom: "uwfdeposit", + AuthorityMetadata: types.DenomAuthorityMetadata{ + Admin: "cosmos1nsh9vj9znccakn6xwlhlwx92acdt79yeqrkz4y", + }, + }, + { + Denom: "uwfdeposit2", + AuthorityMetadata: types.DenomAuthorityMetadata{ + Admin: "cosmos1uu635yk0hz3cvrypnryrggltrjq7975jrmeg97", + }, + }, + }, + }, + expectErr: false, + }, + { + name: "invalid denom in genesis", + genState: types.GenesisState{ + Params: types.DefaultParams(), + FactoryDenoms: []types.GenesisDenom{ + { + Denom: "invalid-denom", + AuthorityMetadata: types.DenomAuthorityMetadata{ + Admin: "wf1creator", + }, + }, + }, + }, + expectErr: true, + }, + { + name: "empty admin in genesis", + genState: types.GenesisState{ + Params: types.DefaultParams(), + FactoryDenoms: []types.GenesisDenom{ + { + Denom: "token1", + AuthorityMetadata: types.DenomAuthorityMetadata{ + Admin: "", + }, + }, + }, + }, + expectErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := types.ValidateGenesis(tt.genState) + if tt.expectErr { + require.Error(t, err) + return + } + require.NoError(t, err) + }) + } +} + +func TestParamsValidate(t *testing.T) { + testutil.SafeSetAddressPrefixes() + require.NoError(t, types.DefaultParams().Validate()) + require.NoError(t, types.Params{}.Validate()) +} diff --git a/prototypes/x/tokenfactory/types/keys.go b/prototypes/x/tokenfactory/types/keys.go new file mode 100644 index 00000000000..0ac8d2901e9 --- /dev/null +++ b/prototypes/x/tokenfactory/types/keys.go @@ -0,0 +1,27 @@ +package types + +import "cosmossdk.io/collections" + +const ( + ModuleName = "tokenfactory" + StoreKey = ModuleName +) + +var ( + ParamsKey = collections.NewPrefix(0) + + DenomAuthorityMetadataPrefix = collections.NewPrefix(1) + CreatorPrefixKey = collections.NewPrefix(2) +) + +func DenomPrefixStore(denom string) []byte { + return append(DenomAuthorityMetadataPrefix, []byte(denom)...) +} + +func CreatorPrefix(creator string) []byte { + return append(CreatorPrefixKey, []byte(creator)...) +} + +func CreatorPrefixStore(creator, denom string) []byte { + return append(CreatorPrefix(creator), []byte(denom)...) +} diff --git a/prototypes/x/tokenfactory/types/msgs.go b/prototypes/x/tokenfactory/types/msgs.go new file mode 100644 index 00000000000..0fe8c3b095f --- /dev/null +++ b/prototypes/x/tokenfactory/types/msgs.go @@ -0,0 +1,118 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +var ( + _ sdk.Msg = &MsgCreateDenom{} + _ sdk.Msg = &MsgMint{} + _ sdk.Msg = &MsgBurn{} + _ sdk.Msg = &MsgChangeAdmin{} + _ sdk.Msg = &MsgRenounceAdmin{} +) + +// NewMsgCreateDenom creates a new MsgCreateDenom instance +func NewMsgCreateDenom(sender, denom string) *MsgCreateDenom { + return &MsgCreateDenom{ + Sender: sender, + Denom: denom, + } +} + +// ValidateBasic implements Msg.ValidateBasic +func (msg MsgCreateDenom) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil { + return errorsmod.Wrapf(ErrInvalidCreator, "error: %s", err.Error()) + } + + return ValidateTokenFactoryDenom(msg.Denom) +} + +// NewMsgMint creates a new MsgMint instance +func NewMsgMint(from, address string, amount sdk.Coin) *MsgMint { + return &MsgMint{ + From: from, + Address: address, + Amount: amount, + } +} + +// ValidateBasic implements Msg.ValidateBasic +func (msg MsgMint) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.From); err != nil { + return errorsmod.Wrapf(ErrInvalidAddress, "from: %s, error: %s", msg.From, err.Error()) + } + + if _, err := sdk.AccAddressFromBech32(msg.Address); err != nil { + return errorsmod.Wrapf(ErrInvalidAddress, "address: %s, error: %s", msg.Address, err.Error()) + } + + if !msg.Amount.IsValid() || msg.Amount.IsZero() { + return errorsmod.Wrapf(ErrInvalidAmount, "amount: %s", msg.Amount.String()) + } + + return ValidateTokenFactoryDenom(msg.Amount.Denom) +} + +// NewMsgBurn creates a new MsgBurn instance +func NewMsgBurn(from string, amount sdk.Coin) *MsgBurn { + return &MsgBurn{ + From: from, + Amount: amount, + } +} + +// ValidateBasic implements Msg.ValidateBasic +func (msg MsgBurn) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.From); err != nil { + return errorsmod.Wrapf(ErrInvalidAddress, "from: %s, error: %s", msg.From, err.Error()) + } + + if !msg.Amount.IsValid() || msg.Amount.IsZero() { + return errorsmod.Wrapf(ErrInvalidAmount, "amount: %s", msg.Amount.String()) + } + + return ValidateTokenFactoryDenom(msg.Amount.Denom) +} + +// NewMsgChangeAdmin creates a new MsgChangeAdmin instance +func NewMsgChangeAdmin(sender, denom, newAdmin string) *MsgChangeAdmin { + return &MsgChangeAdmin{ + Sender: sender, + Denom: denom, + NewAdmin: newAdmin, + } +} + +// ValidateBasic implements Msg.ValidateBasic +func (msg MsgChangeAdmin) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil { + return errorsmod.Wrapf(ErrInvalidAddress, "sender: %s, error: %s", msg.Sender, err.Error()) + } + + if _, err := sdk.AccAddressFromBech32(msg.NewAdmin); err != nil { + return errorsmod.Wrapf(ErrInvalidAddress, "new_admin: %s, error: %s", msg.NewAdmin, err.Error()) + } + + return ValidateTokenFactoryDenom(msg.Denom) +} + +// NewMsgRenounceAdmin creates a new MsgRenounceAdmin instance +func NewMsgRenounceAdmin(sender, denom string) *MsgRenounceAdmin { + return &MsgRenounceAdmin{ + Sender: sender, + Denom: denom, + } +} + +// ValidateBasic implements Msg.ValidateBasic +func (msg MsgRenounceAdmin) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.Sender); err != nil { + return errorsmod.Wrapf(ErrInvalidAddress, "sender: %s, error: %s", msg.Sender, err.Error()) + } + + return ValidateTokenFactoryDenom(msg.Denom) +} diff --git a/prototypes/x/tokenfactory/types/msgs_test.go b/prototypes/x/tokenfactory/types/msgs_test.go new file mode 100644 index 00000000000..d2c2cc62439 --- /dev/null +++ b/prototypes/x/tokenfactory/types/msgs_test.go @@ -0,0 +1,195 @@ +package types_test + +import ( + "testing" + + "github.com/cosmos/sandbox-ledger/testutil" + "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/stretchr/testify/require" + + "cosmossdk.io/math" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +const ( + testAddr = "cosmos1y6xz2ggfc0pcsmyjlekh0j9pxh6hk87yfwcjct" +) + +func TestMsgCreateDenom_ValidateBasic(t *testing.T) { + testutil.SafeSetAddressPrefixes() + tests := []struct { + name string + msg types.MsgCreateDenom + expectErr error + }{ + { + name: "valid message", + msg: types.MsgCreateDenom{ + Sender: testAddr, + Denom: testDenom, + }, + expectErr: nil, + }, + { + name: "invalid sender", + msg: types.MsgCreateDenom{ + Sender: "invalid", + Denom: testDenom, + }, + expectErr: types.ErrInvalidCreator, + }, + { + name: "empty sender", + msg: types.MsgCreateDenom{ + Sender: "", + Denom: testDenom, + }, + expectErr: types.ErrInvalidCreator, + }, + { + name: "empty denom", + msg: types.MsgCreateDenom{ + Sender: testAddr, + Denom: "", + }, + expectErr: types.ErrInvalidDenom, + }, + { + name: "invalid denom", + msg: types.MsgCreateDenom{ + Sender: testAddr, + Denom: "not-so-alphanumeric", + }, + expectErr: types.ErrInvalidDenom, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := tt.msg.ValidateBasic() + require.ErrorIs(t, err, tt.expectErr, "got: %v want: %v", err, tt.expectErr) + }) + } +} + +func TestMsgMint_ValidateBasic(t *testing.T) { + testutil.SafeSetAddressPrefixes() + tests := []struct { + name string + msg types.MsgMint + expectErr error + }{ + { + name: "valid message", + msg: types.MsgMint{ + From: testAddr, + Address: testAddr, + Amount: sdk.NewCoin(testDenom, math.NewInt(1000000)), + }, + expectErr: nil, + }, + { + name: "invalid sender", + msg: types.MsgMint{ + From: "invalid", + Address: testAddr, + Amount: sdk.NewCoin(testDenom, math.NewInt(1000000)), + }, + expectErr: types.ErrInvalidAddress, + }, + { + name: "invalid mint to address", + msg: types.MsgMint{ + From: testAddr, + Address: "invalid", + Amount: sdk.NewCoin(testDenom, math.NewInt(1000000)), + }, + expectErr: types.ErrInvalidAddress, + }, + { + name: "zero amount", + msg: types.MsgMint{ + From: testAddr, + Address: testAddr, + Amount: sdk.NewCoin(testDenom, math.ZeroInt()), + }, + expectErr: types.ErrInvalidAmount, + }, + { + name: "negative amount", + msg: types.MsgMint{ + From: testAddr, + Address: testAddr, + Amount: sdk.Coin{Denom: testDenom, Amount: math.NewInt(-1000)}, + }, + expectErr: types.ErrInvalidAmount, + }, + { + name: "invalid denom", + msg: types.MsgMint{From: testAddr, Address: testAddr, Amount: sdk.NewCoin("not-so-alphanumeric", math.NewInt(1))}, + expectErr: types.ErrInvalidDenom, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := tt.msg.ValidateBasic() + require.ErrorIs(t, err, tt.expectErr) + }) + } +} + +func TestMsgBurn_ValidateBasic(t *testing.T) { + testutil.SafeSetAddressPrefixes() + tests := []struct { + name string + msg types.MsgBurn + expectErr error + }{ + { + name: "valid message", + msg: types.MsgBurn{ + From: testAddr, + Amount: sdk.NewCoin(testDenom, math.NewInt(1000000)), + }, + expectErr: nil, + }, + { + name: "invalid sender", + msg: types.MsgBurn{ + From: "invalid", + Amount: sdk.NewCoin(testDenom, math.NewInt(1000000)), + }, + expectErr: types.ErrInvalidAddress, + }, + { + name: "zero amount", + msg: types.MsgBurn{ + From: testAddr, + Amount: sdk.NewCoin(testDenom, math.ZeroInt()), + }, + expectErr: types.ErrInvalidAmount, + }, + { + name: "negative amount", + msg: types.MsgBurn{ + From: testAddr, + Amount: sdk.Coin{Denom: testDenom, Amount: math.NewInt(-1000)}, + }, + expectErr: types.ErrInvalidAmount, + }, + { + name: "invalid denom", + msg: types.MsgBurn{From: testAddr, Amount: sdk.NewCoin("not-so-alphanumeric", math.NewInt(1))}, + expectErr: types.ErrInvalidDenom, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := tt.msg.ValidateBasic() + require.ErrorIs(t, err, tt.expectErr) + }) + } +} diff --git a/prototypes/x/tokenfactory/types/query.pb.go b/prototypes/x/tokenfactory/types/query.pb.go new file mode 100644 index 00000000000..ef6989a419e --- /dev/null +++ b/prototypes/x/tokenfactory/types/query.pb.go @@ -0,0 +1,1318 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: sandbox/tokenfactory/query.proto + +package types + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// QueryDenomAuthorityMetadataRequest is the request type for the +// Query/DenomAuthorityMetadata RPC method. +type QueryDenomAuthorityMetadataRequest struct { + Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"` +} + +func (m *QueryDenomAuthorityMetadataRequest) Reset() { *m = QueryDenomAuthorityMetadataRequest{} } +func (m *QueryDenomAuthorityMetadataRequest) String() string { return proto.CompactTextString(m) } +func (*QueryDenomAuthorityMetadataRequest) ProtoMessage() {} +func (*QueryDenomAuthorityMetadataRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_488808f536ccac77, []int{0} +} +func (m *QueryDenomAuthorityMetadataRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryDenomAuthorityMetadataRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryDenomAuthorityMetadataRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryDenomAuthorityMetadataRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryDenomAuthorityMetadataRequest.Merge(m, src) +} +func (m *QueryDenomAuthorityMetadataRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryDenomAuthorityMetadataRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryDenomAuthorityMetadataRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryDenomAuthorityMetadataRequest proto.InternalMessageInfo + +func (m *QueryDenomAuthorityMetadataRequest) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +// QueryDenomAuthorityMetadataResponse is the response type for the +// Query/DenomAuthorityMetadata RPC method. +type QueryDenomAuthorityMetadataResponse struct { + AuthorityMetadata DenomAuthorityMetadata `protobuf:"bytes,1,opt,name=authority_metadata,json=authorityMetadata,proto3" json:"authority_metadata"` +} + +func (m *QueryDenomAuthorityMetadataResponse) Reset() { *m = QueryDenomAuthorityMetadataResponse{} } +func (m *QueryDenomAuthorityMetadataResponse) String() string { return proto.CompactTextString(m) } +func (*QueryDenomAuthorityMetadataResponse) ProtoMessage() {} +func (*QueryDenomAuthorityMetadataResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_488808f536ccac77, []int{1} +} +func (m *QueryDenomAuthorityMetadataResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryDenomAuthorityMetadataResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryDenomAuthorityMetadataResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryDenomAuthorityMetadataResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryDenomAuthorityMetadataResponse.Merge(m, src) +} +func (m *QueryDenomAuthorityMetadataResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryDenomAuthorityMetadataResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryDenomAuthorityMetadataResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryDenomAuthorityMetadataResponse proto.InternalMessageInfo + +func (m *QueryDenomAuthorityMetadataResponse) GetAuthorityMetadata() DenomAuthorityMetadata { + if m != nil { + return m.AuthorityMetadata + } + return DenomAuthorityMetadata{} +} + +// QueryDenomsByCreatorRequest is the request type for the +// Query/DenomsByCreator RPC method. +type QueryDenomsByCreatorRequest struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` +} + +func (m *QueryDenomsByCreatorRequest) Reset() { *m = QueryDenomsByCreatorRequest{} } +func (m *QueryDenomsByCreatorRequest) String() string { return proto.CompactTextString(m) } +func (*QueryDenomsByCreatorRequest) ProtoMessage() {} +func (*QueryDenomsByCreatorRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_488808f536ccac77, []int{2} +} +func (m *QueryDenomsByCreatorRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryDenomsByCreatorRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryDenomsByCreatorRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryDenomsByCreatorRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryDenomsByCreatorRequest.Merge(m, src) +} +func (m *QueryDenomsByCreatorRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryDenomsByCreatorRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryDenomsByCreatorRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryDenomsByCreatorRequest proto.InternalMessageInfo + +func (m *QueryDenomsByCreatorRequest) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +// QueryDenomsByCreatorResponse is the response type for the +// Query/DenomsByCreator RPC method. +type QueryDenomsByCreatorResponse struct { + Denoms []string `protobuf:"bytes,1,rep,name=denoms,proto3" json:"denoms,omitempty"` +} + +func (m *QueryDenomsByCreatorResponse) Reset() { *m = QueryDenomsByCreatorResponse{} } +func (m *QueryDenomsByCreatorResponse) String() string { return proto.CompactTextString(m) } +func (*QueryDenomsByCreatorResponse) ProtoMessage() {} +func (*QueryDenomsByCreatorResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_488808f536ccac77, []int{3} +} +func (m *QueryDenomsByCreatorResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryDenomsByCreatorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryDenomsByCreatorResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryDenomsByCreatorResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryDenomsByCreatorResponse.Merge(m, src) +} +func (m *QueryDenomsByCreatorResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryDenomsByCreatorResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryDenomsByCreatorResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryDenomsByCreatorResponse proto.InternalMessageInfo + +func (m *QueryDenomsByCreatorResponse) GetDenoms() []string { + if m != nil { + return m.Denoms + } + return nil +} + +// QueryParamsRequest is the request type for the Query/Params RPC method. +type QueryParamsRequest struct { +} + +func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } +func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_488808f536ccac77, []int{4} +} +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) +} +func (m *QueryParamsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo + +// QueryParamsResponse is the response type for the Query/Params RPC method. +type QueryParamsResponse struct { + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } +func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_488808f536ccac77, []int{5} +} +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) +} +func (m *QueryParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo + +func (m *QueryParamsResponse) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func init() { + proto.RegisterType((*QueryDenomAuthorityMetadataRequest)(nil), "sandbox.tokenfactory.QueryDenomAuthorityMetadataRequest") + proto.RegisterType((*QueryDenomAuthorityMetadataResponse)(nil), "sandbox.tokenfactory.QueryDenomAuthorityMetadataResponse") + proto.RegisterType((*QueryDenomsByCreatorRequest)(nil), "sandbox.tokenfactory.QueryDenomsByCreatorRequest") + proto.RegisterType((*QueryDenomsByCreatorResponse)(nil), "sandbox.tokenfactory.QueryDenomsByCreatorResponse") + proto.RegisterType((*QueryParamsRequest)(nil), "sandbox.tokenfactory.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "sandbox.tokenfactory.QueryParamsResponse") +} + +func init() { proto.RegisterFile("sandbox/tokenfactory/query.proto", fileDescriptor_488808f536ccac77) } + +var fileDescriptor_488808f536ccac77 = []byte{ + // 485 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x41, 0x6b, 0x13, 0x41, + 0x14, 0xce, 0x68, 0x1b, 0xe9, 0xf3, 0x20, 0x8e, 0xa1, 0x84, 0x35, 0xac, 0x61, 0x15, 0x8c, 0xa0, + 0x3b, 0x34, 0xa2, 0xb1, 0xbd, 0x88, 0xd1, 0xab, 0x68, 0x73, 0xf4, 0x22, 0x93, 0x64, 0xdc, 0x06, + 0xbb, 0xfb, 0xb6, 0x3b, 0x13, 0x70, 0x29, 0xbd, 0xe8, 0xc5, 0xa3, 0xe8, 0x2f, 0xf1, 0x5f, 0xf4, + 0x24, 0x05, 0x2f, 0x9e, 0x44, 0x12, 0x7f, 0x88, 0x64, 0xe6, 0x05, 0xdb, 0x74, 0x68, 0xb4, 0xa7, + 0xdd, 0x37, 0xef, 0xfb, 0xbe, 0xf9, 0xbe, 0x99, 0xc7, 0x40, 0x53, 0xcb, 0x6c, 0xd8, 0xc7, 0x77, + 0xc2, 0xe0, 0x5b, 0x95, 0xbd, 0x91, 0x03, 0x83, 0x45, 0x29, 0xf6, 0xc6, 0xaa, 0x28, 0xe3, 0xbc, + 0x40, 0x83, 0xbc, 0x46, 0x88, 0xf8, 0x38, 0x22, 0xa8, 0x25, 0x98, 0xa0, 0x05, 0x88, 0xd9, 0x9f, + 0xc3, 0x06, 0x8d, 0x04, 0x31, 0xd9, 0x55, 0x42, 0xe6, 0x23, 0x21, 0xb3, 0x0c, 0x8d, 0x34, 0x23, + 0xcc, 0x34, 0x75, 0x6f, 0x7b, 0xf7, 0x3a, 0x5e, 0x38, 0x60, 0xb4, 0x05, 0xd1, 0xf6, 0xcc, 0xc1, + 0x33, 0x95, 0x61, 0xfa, 0x64, 0x6c, 0x76, 0xb0, 0x18, 0x99, 0xf2, 0xb9, 0x32, 0x72, 0x28, 0x8d, + 0xec, 0xa9, 0xbd, 0xb1, 0xd2, 0x86, 0xd7, 0x60, 0x75, 0x38, 0x03, 0xd4, 0x59, 0x93, 0xb5, 0xd6, + 0x7a, 0xae, 0x88, 0x3e, 0x32, 0xb8, 0x79, 0x26, 0x59, 0xe7, 0x98, 0x69, 0xc5, 0x25, 0x70, 0x39, + 0x6f, 0xbe, 0x4e, 0xa9, 0x6b, 0xa5, 0x2e, 0xb7, 0xef, 0xc6, 0xbe, 0xcc, 0xb1, 0x5f, 0xb1, 0xbb, + 0x72, 0xf8, 0xf3, 0x46, 0xa5, 0x77, 0x55, 0x2e, 0x36, 0xa2, 0x0e, 0x5c, 0xff, 0xeb, 0x44, 0x77, + 0xcb, 0xa7, 0x85, 0x92, 0x06, 0x8b, 0xb9, 0xff, 0x3a, 0x5c, 0x1a, 0xb8, 0x15, 0x4a, 0x30, 0x2f, + 0xa3, 0x87, 0xd0, 0xf0, 0x13, 0xc9, 0xfb, 0x3a, 0x54, 0x6d, 0x58, 0x5d, 0x67, 0xcd, 0x8b, 0xad, + 0xb5, 0x1e, 0x55, 0x51, 0x0d, 0xb8, 0xe5, 0xbd, 0x94, 0x85, 0x4c, 0x35, 0xed, 0x13, 0x6d, 0xc3, + 0xb5, 0x13, 0xab, 0x24, 0xb2, 0x05, 0xd5, 0xdc, 0xae, 0x50, 0xe8, 0x86, 0x3f, 0xb4, 0x63, 0x51, + 0x48, 0x62, 0xb4, 0x3f, 0xaf, 0xc0, 0xaa, 0xd5, 0xe4, 0xdf, 0x18, 0xac, 0xfb, 0xcf, 0x85, 0x3f, + 0xf2, 0x0b, 0x2e, 0xbf, 0xd9, 0x60, 0xf3, 0x1c, 0x4c, 0x97, 0x2a, 0x7a, 0xfc, 0xfe, 0xfb, 0xef, + 0x2f, 0x17, 0x36, 0x79, 0x47, 0x78, 0x87, 0xcd, 0x1d, 0x94, 0xd8, 0xb7, 0xdf, 0x03, 0x71, 0x7a, + 0x02, 0xf8, 0x57, 0x06, 0x57, 0x16, 0xce, 0x9d, 0x6f, 0x2c, 0xf3, 0x73, 0xea, 0x72, 0x83, 0xf6, + 0xff, 0x50, 0xc8, 0x7b, 0xc7, 0x7a, 0xdf, 0xe0, 0xc2, 0xef, 0x9d, 0xa6, 0x43, 0x8b, 0x7d, 0xfa, + 0x3b, 0xa0, 0x38, 0xfc, 0x03, 0x83, 0xaa, 0xbb, 0x27, 0xde, 0x3a, 0x63, 0xdf, 0x13, 0x63, 0x11, + 0xdc, 0xf9, 0x07, 0x24, 0x19, 0xbb, 0x65, 0x8d, 0x85, 0xbc, 0xe1, 0x37, 0xe6, 0x86, 0xa2, 0xfb, + 0xe2, 0x70, 0x12, 0xb2, 0xa3, 0x49, 0xc8, 0x7e, 0x4d, 0x42, 0xf6, 0x69, 0x1a, 0x56, 0x8e, 0xa6, + 0x61, 0xe5, 0xc7, 0x34, 0xac, 0xbc, 0x7a, 0x90, 0x8c, 0xcc, 0xce, 0xb8, 0x1f, 0x0f, 0x30, 0x15, + 0x03, 0xd4, 0x29, 0xea, 0xb9, 0xd0, 0xbd, 0x5d, 0x35, 0x4c, 0x54, 0x21, 0x16, 0xdf, 0x84, 0x32, + 0x57, 0xba, 0x5f, 0xb5, 0xaf, 0xc1, 0xfd, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x72, 0x91, 0xa4, + 0x56, 0xa4, 0x04, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + // DenomAuthorityMetadata queries the authority metadata for a denom. + DenomAuthorityMetadata(ctx context.Context, in *QueryDenomAuthorityMetadataRequest, opts ...grpc.CallOption) (*QueryDenomAuthorityMetadataResponse, error) + // DenomsByCreator queries all denoms created by a specific address. + DenomsByCreator(ctx context.Context, in *QueryDenomsByCreatorRequest, opts ...grpc.CallOption) (*QueryDenomsByCreatorResponse, error) + // Params queries the parameters of the tokenfactory module. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) DenomAuthorityMetadata(ctx context.Context, in *QueryDenomAuthorityMetadataRequest, opts ...grpc.CallOption) (*QueryDenomAuthorityMetadataResponse, error) { + out := new(QueryDenomAuthorityMetadataResponse) + err := c.cc.Invoke(ctx, "/sandbox.tokenfactory.Query/DenomAuthorityMetadata", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) DenomsByCreator(ctx context.Context, in *QueryDenomsByCreatorRequest, opts ...grpc.CallOption) (*QueryDenomsByCreatorResponse, error) { + out := new(QueryDenomsByCreatorResponse) + err := c.cc.Invoke(ctx, "/sandbox.tokenfactory.Query/DenomsByCreator", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/sandbox.tokenfactory.Query/Params", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + // DenomAuthorityMetadata queries the authority metadata for a denom. + DenomAuthorityMetadata(context.Context, *QueryDenomAuthorityMetadataRequest) (*QueryDenomAuthorityMetadataResponse, error) + // DenomsByCreator queries all denoms created by a specific address. + DenomsByCreator(context.Context, *QueryDenomsByCreatorRequest) (*QueryDenomsByCreatorResponse, error) + // Params queries the parameters of the tokenfactory module. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) DenomAuthorityMetadata(ctx context.Context, req *QueryDenomAuthorityMetadataRequest) (*QueryDenomAuthorityMetadataResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DenomAuthorityMetadata not implemented") +} +func (*UnimplementedQueryServer) DenomsByCreator(ctx context.Context, req *QueryDenomsByCreatorRequest) (*QueryDenomsByCreatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DenomsByCreator not implemented") +} +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_DenomAuthorityMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryDenomAuthorityMetadataRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).DenomAuthorityMetadata(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sandbox.tokenfactory.Query/DenomAuthorityMetadata", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).DenomAuthorityMetadata(ctx, req.(*QueryDenomAuthorityMetadataRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_DenomsByCreator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryDenomsByCreatorRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).DenomsByCreator(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sandbox.tokenfactory.Query/DenomsByCreator", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).DenomsByCreator(ctx, req.(*QueryDenomsByCreatorRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sandbox.tokenfactory.Query/Params", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var Query_serviceDesc = _Query_serviceDesc +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "sandbox.tokenfactory.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "DenomAuthorityMetadata", + Handler: _Query_DenomAuthorityMetadata_Handler, + }, + { + MethodName: "DenomsByCreator", + Handler: _Query_DenomsByCreator_Handler, + }, + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "sandbox/tokenfactory/query.proto", +} + +func (m *QueryDenomAuthorityMetadataRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryDenomAuthorityMetadataRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDenomAuthorityMetadataRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryDenomAuthorityMetadataResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryDenomAuthorityMetadataResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDenomAuthorityMetadataResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.AuthorityMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryDenomsByCreatorRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryDenomsByCreatorRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDenomsByCreatorRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryDenomsByCreatorResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryDenomsByCreatorResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDenomsByCreatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Denoms) > 0 { + for iNdEx := len(m.Denoms) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Denoms[iNdEx]) + copy(dAtA[i:], m.Denoms[iNdEx]) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Denoms[iNdEx]))) + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryDenomAuthorityMetadataRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryDenomAuthorityMetadataResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.AuthorityMetadata.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryDenomsByCreatorRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryDenomsByCreatorResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Denoms) > 0 { + for _, s := range m.Denoms { + l = len(s) + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryDenomAuthorityMetadataRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryDenomAuthorityMetadataRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryDenomAuthorityMetadataRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryDenomAuthorityMetadataResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryDenomAuthorityMetadataResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryDenomAuthorityMetadataResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AuthorityMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.AuthorityMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryDenomsByCreatorRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryDenomsByCreatorRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryDenomsByCreatorRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryDenomsByCreatorResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryDenomsByCreatorResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryDenomsByCreatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denoms", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denoms = append(m.Denoms, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/prototypes/x/tokenfactory/types/query.pb.gw.go b/prototypes/x/tokenfactory/types/query.pb.gw.go new file mode 100644 index 00000000000..53545d3ade8 --- /dev/null +++ b/prototypes/x/tokenfactory/types/query.pb.gw.go @@ -0,0 +1,355 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: sandbox/tokenfactory/query.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +func request_Query_DenomAuthorityMetadata_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryDenomAuthorityMetadataRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["denom"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "denom") + } + + protoReq.Denom, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "denom", err) + } + + msg, err := client.DenomAuthorityMetadata(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_DenomAuthorityMetadata_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryDenomAuthorityMetadataRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["denom"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "denom") + } + + protoReq.Denom, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "denom", err) + } + + msg, err := server.DenomAuthorityMetadata(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_DenomsByCreator_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryDenomsByCreatorRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["creator"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "creator") + } + + protoReq.Creator, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "creator", err) + } + + msg, err := client.DenomsByCreator(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_DenomsByCreator_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryDenomsByCreatorRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["creator"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "creator") + } + + protoReq.Creator, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "creator", err) + } + + msg, err := server.DenomsByCreator(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_DenomAuthorityMetadata_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_DenomAuthorityMetadata_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_DenomAuthorityMetadata_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_DenomsByCreator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_DenomsByCreator_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_DenomsByCreator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryHandler(ctx, mux, conn) +} + +// RegisterQueryHandler registers the http handlers for service Query to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) +} + +// RegisterQueryHandlerClient registers the http handlers for service Query +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryClient" to call the correct interceptors. +func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + + mux.Handle("GET", pattern_Query_DenomAuthorityMetadata_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_DenomAuthorityMetadata_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_DenomAuthorityMetadata_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_DenomsByCreator_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_DenomsByCreator_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_DenomsByCreator_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_DenomAuthorityMetadata_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"sandbox", "tokenfactory", "denoms", "denom", "authority_metadata"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_DenomsByCreator_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"sandbox", "tokenfactory", "creators", "creator", "denoms"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"sandbox", "tokenfactory", "params"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_Query_DenomAuthorityMetadata_0 = runtime.ForwardResponseMessage + + forward_Query_DenomsByCreator_0 = runtime.ForwardResponseMessage + + forward_Query_Params_0 = runtime.ForwardResponseMessage +) diff --git a/prototypes/x/tokenfactory/types/tokenfactory.pb.go b/prototypes/x/tokenfactory/types/tokenfactory.pb.go new file mode 100644 index 00000000000..242302b84ec --- /dev/null +++ b/prototypes/x/tokenfactory/types/tokenfactory.pb.go @@ -0,0 +1,441 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: sandbox/tokenfactory/tokenfactory.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Params defines the parameters for the tokenfactory module. +type Params struct { +} + +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_17f074b5b5a22274, []int{0} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +// DenomAuthorityMetadata defines the authority metadata for a denom. +type DenomAuthorityMetadata struct { + Admin string `protobuf:"bytes,1,opt,name=admin,proto3" json:"admin,omitempty"` +} + +func (m *DenomAuthorityMetadata) Reset() { *m = DenomAuthorityMetadata{} } +func (m *DenomAuthorityMetadata) String() string { return proto.CompactTextString(m) } +func (*DenomAuthorityMetadata) ProtoMessage() {} +func (*DenomAuthorityMetadata) Descriptor() ([]byte, []int) { + return fileDescriptor_17f074b5b5a22274, []int{1} +} +func (m *DenomAuthorityMetadata) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DenomAuthorityMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DenomAuthorityMetadata.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *DenomAuthorityMetadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_DenomAuthorityMetadata.Merge(m, src) +} +func (m *DenomAuthorityMetadata) XXX_Size() int { + return m.Size() +} +func (m *DenomAuthorityMetadata) XXX_DiscardUnknown() { + xxx_messageInfo_DenomAuthorityMetadata.DiscardUnknown(m) +} + +var xxx_messageInfo_DenomAuthorityMetadata proto.InternalMessageInfo + +func (m *DenomAuthorityMetadata) GetAdmin() string { + if m != nil { + return m.Admin + } + return "" +} + +func init() { + proto.RegisterType((*Params)(nil), "sandbox.tokenfactory.Params") + proto.RegisterType((*DenomAuthorityMetadata)(nil), "sandbox.tokenfactory.DenomAuthorityMetadata") +} + +func init() { + proto.RegisterFile("sandbox/tokenfactory/tokenfactory.proto", fileDescriptor_17f074b5b5a22274) +} + +var fileDescriptor_17f074b5b5a22274 = []byte{ + // 203 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2f, 0x4e, 0xcc, 0x4b, + 0x49, 0xca, 0xaf, 0xd0, 0x2f, 0xc9, 0xcf, 0x4e, 0xcd, 0x4b, 0x4b, 0x4c, 0x2e, 0xc9, 0x2f, 0xaa, + 0x44, 0xe1, 0xe8, 0x15, 0x14, 0xe5, 0x97, 0xe4, 0x0b, 0x89, 0x40, 0x15, 0xea, 0x21, 0xcb, 0x49, + 0x09, 0x26, 0xe6, 0x66, 0xe6, 0xe5, 0xeb, 0x83, 0x49, 0x88, 0x42, 0x25, 0x0e, 0x2e, 0xb6, 0x80, + 0xc4, 0xa2, 0xc4, 0xdc, 0x62, 0x25, 0x53, 0x2e, 0x31, 0x97, 0xd4, 0xbc, 0xfc, 0x5c, 0xc7, 0xd2, + 0x92, 0x8c, 0xfc, 0xa2, 0xcc, 0x92, 0x4a, 0xdf, 0xd4, 0x92, 0xc4, 0x94, 0xc4, 0x92, 0x44, 0x21, + 0x69, 0x2e, 0xd6, 0xc4, 0x94, 0xdc, 0xcc, 0x3c, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x4e, 0x27, 0xd6, + 0x15, 0xcf, 0x37, 0x68, 0x31, 0x06, 0x41, 0xc4, 0x9c, 0xfc, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, + 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, + 0xf1, 0x58, 0x8e, 0x21, 0xca, 0x34, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, + 0x3f, 0x39, 0xbf, 0x38, 0x37, 0xbf, 0x58, 0x1f, 0xea, 0x2a, 0xdd, 0x9c, 0xd4, 0x94, 0xf4, 0xd4, + 0x22, 0x7d, 0x74, 0x7f, 0x54, 0x16, 0xa4, 0x16, 0x27, 0xb1, 0x81, 0x1d, 0x66, 0x0c, 0x08, 0x00, + 0x00, 0xff, 0xff, 0xf0, 0x16, 0x0d, 0xb5, 0xec, 0x00, 0x00, 0x00, +} + +func (m *Params) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *DenomAuthorityMetadata) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DenomAuthorityMetadata) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DenomAuthorityMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Admin) > 0 { + i -= len(m.Admin) + copy(dAtA[i:], m.Admin) + i = encodeVarintTokenfactory(dAtA, i, uint64(len(m.Admin))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintTokenfactory(dAtA []byte, offset int, v uint64) int { + offset -= sovTokenfactory(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *DenomAuthorityMetadata) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Admin) + if l > 0 { + n += 1 + l + sovTokenfactory(uint64(l)) + } + return n +} + +func sovTokenfactory(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTokenfactory(x uint64) (n int) { + return sovTokenfactory(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Params) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTokenfactory + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTokenfactory(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTokenfactory + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DenomAuthorityMetadata) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTokenfactory + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DenomAuthorityMetadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DenomAuthorityMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Admin", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTokenfactory + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTokenfactory + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTokenfactory + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Admin = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTokenfactory(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTokenfactory + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTokenfactory(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTokenfactory + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTokenfactory + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTokenfactory + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTokenfactory + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTokenfactory + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTokenfactory + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTokenfactory = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTokenfactory = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTokenfactory = fmt.Errorf("proto: unexpected end of group") +) diff --git a/prototypes/x/tokenfactory/types/tx.pb.go b/prototypes/x/tokenfactory/types/tx.pb.go new file mode 100644 index 00000000000..7887e972438 --- /dev/null +++ b/prototypes/x/tokenfactory/types/tx.pb.go @@ -0,0 +1,2200 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: sandbox/tokenfactory/tx.proto + +package types + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// MsgCreateDenom is the message for creating a new denom. +type MsgCreateDenom struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` +} + +func (m *MsgCreateDenom) Reset() { *m = MsgCreateDenom{} } +func (m *MsgCreateDenom) String() string { return proto.CompactTextString(m) } +func (*MsgCreateDenom) ProtoMessage() {} +func (*MsgCreateDenom) Descriptor() ([]byte, []int) { + return fileDescriptor_5a175bee69e54b5d, []int{0} +} +func (m *MsgCreateDenom) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgCreateDenom) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgCreateDenom.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgCreateDenom) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgCreateDenom.Merge(m, src) +} +func (m *MsgCreateDenom) XXX_Size() int { + return m.Size() +} +func (m *MsgCreateDenom) XXX_DiscardUnknown() { + xxx_messageInfo_MsgCreateDenom.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgCreateDenom proto.InternalMessageInfo + +func (m *MsgCreateDenom) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *MsgCreateDenom) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +// MsgCreateDenomResponse is the response for creating a new denom. +type MsgCreateDenomResponse struct { +} + +func (m *MsgCreateDenomResponse) Reset() { *m = MsgCreateDenomResponse{} } +func (m *MsgCreateDenomResponse) String() string { return proto.CompactTextString(m) } +func (*MsgCreateDenomResponse) ProtoMessage() {} +func (*MsgCreateDenomResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_5a175bee69e54b5d, []int{1} +} +func (m *MsgCreateDenomResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgCreateDenomResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgCreateDenomResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgCreateDenomResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgCreateDenomResponse.Merge(m, src) +} +func (m *MsgCreateDenomResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgCreateDenomResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgCreateDenomResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgCreateDenomResponse proto.InternalMessageInfo + +// MsgMint is the message for minting new tokens. +type MsgMint struct { + From string `protobuf:"bytes,1,opt,name=from,proto3" json:"from,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + Amount types.Coin `protobuf:"bytes,3,opt,name=amount,proto3" json:"amount"` +} + +func (m *MsgMint) Reset() { *m = MsgMint{} } +func (m *MsgMint) String() string { return proto.CompactTextString(m) } +func (*MsgMint) ProtoMessage() {} +func (*MsgMint) Descriptor() ([]byte, []int) { + return fileDescriptor_5a175bee69e54b5d, []int{2} +} +func (m *MsgMint) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgMint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgMint.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgMint) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgMint.Merge(m, src) +} +func (m *MsgMint) XXX_Size() int { + return m.Size() +} +func (m *MsgMint) XXX_DiscardUnknown() { + xxx_messageInfo_MsgMint.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgMint proto.InternalMessageInfo + +// MsgMintResponse is the response for minting new tokens. +type MsgMintResponse struct { +} + +func (m *MsgMintResponse) Reset() { *m = MsgMintResponse{} } +func (m *MsgMintResponse) String() string { return proto.CompactTextString(m) } +func (*MsgMintResponse) ProtoMessage() {} +func (*MsgMintResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_5a175bee69e54b5d, []int{3} +} +func (m *MsgMintResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgMintResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgMintResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgMintResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgMintResponse.Merge(m, src) +} +func (m *MsgMintResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgMintResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgMintResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgMintResponse proto.InternalMessageInfo + +// MsgBurn is the message for burning tokens. +type MsgBurn struct { + From string `protobuf:"bytes,1,opt,name=from,proto3" json:"from,omitempty"` + Amount types.Coin `protobuf:"bytes,2,opt,name=amount,proto3" json:"amount"` +} + +func (m *MsgBurn) Reset() { *m = MsgBurn{} } +func (m *MsgBurn) String() string { return proto.CompactTextString(m) } +func (*MsgBurn) ProtoMessage() {} +func (*MsgBurn) Descriptor() ([]byte, []int) { + return fileDescriptor_5a175bee69e54b5d, []int{4} +} +func (m *MsgBurn) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgBurn) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgBurn.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgBurn) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgBurn.Merge(m, src) +} +func (m *MsgBurn) XXX_Size() int { + return m.Size() +} +func (m *MsgBurn) XXX_DiscardUnknown() { + xxx_messageInfo_MsgBurn.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgBurn proto.InternalMessageInfo + +// MsgBurnResponse is the response for burning tokens. +type MsgBurnResponse struct { +} + +func (m *MsgBurnResponse) Reset() { *m = MsgBurnResponse{} } +func (m *MsgBurnResponse) String() string { return proto.CompactTextString(m) } +func (*MsgBurnResponse) ProtoMessage() {} +func (*MsgBurnResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_5a175bee69e54b5d, []int{5} +} +func (m *MsgBurnResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgBurnResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgBurnResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgBurnResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgBurnResponse.Merge(m, src) +} +func (m *MsgBurnResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgBurnResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgBurnResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgBurnResponse proto.InternalMessageInfo + +// MsgChangeAdmin transfers admin authority to a new address. +type MsgChangeAdmin struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` + NewAdmin string `protobuf:"bytes,3,opt,name=new_admin,json=newAdmin,proto3" json:"new_admin,omitempty"` +} + +func (m *MsgChangeAdmin) Reset() { *m = MsgChangeAdmin{} } +func (m *MsgChangeAdmin) String() string { return proto.CompactTextString(m) } +func (*MsgChangeAdmin) ProtoMessage() {} +func (*MsgChangeAdmin) Descriptor() ([]byte, []int) { + return fileDescriptor_5a175bee69e54b5d, []int{6} +} +func (m *MsgChangeAdmin) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgChangeAdmin) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgChangeAdmin.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgChangeAdmin) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgChangeAdmin.Merge(m, src) +} +func (m *MsgChangeAdmin) XXX_Size() int { + return m.Size() +} +func (m *MsgChangeAdmin) XXX_DiscardUnknown() { + xxx_messageInfo_MsgChangeAdmin.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgChangeAdmin proto.InternalMessageInfo + +func (m *MsgChangeAdmin) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *MsgChangeAdmin) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *MsgChangeAdmin) GetNewAdmin() string { + if m != nil { + return m.NewAdmin + } + return "" +} + +// MsgChangeAdminResponse is the response for changing admin. +type MsgChangeAdminResponse struct { +} + +func (m *MsgChangeAdminResponse) Reset() { *m = MsgChangeAdminResponse{} } +func (m *MsgChangeAdminResponse) String() string { return proto.CompactTextString(m) } +func (*MsgChangeAdminResponse) ProtoMessage() {} +func (*MsgChangeAdminResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_5a175bee69e54b5d, []int{7} +} +func (m *MsgChangeAdminResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgChangeAdminResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgChangeAdminResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgChangeAdminResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgChangeAdminResponse.Merge(m, src) +} +func (m *MsgChangeAdminResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgChangeAdminResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgChangeAdminResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgChangeAdminResponse proto.InternalMessageInfo + +// MsgRenounceAdmin permanently removes admin authority. +// After renouncing, no one can mint/burn via MsgMint/MsgBurn. +type MsgRenounceAdmin struct { + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` +} + +func (m *MsgRenounceAdmin) Reset() { *m = MsgRenounceAdmin{} } +func (m *MsgRenounceAdmin) String() string { return proto.CompactTextString(m) } +func (*MsgRenounceAdmin) ProtoMessage() {} +func (*MsgRenounceAdmin) Descriptor() ([]byte, []int) { + return fileDescriptor_5a175bee69e54b5d, []int{8} +} +func (m *MsgRenounceAdmin) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRenounceAdmin) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRenounceAdmin.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRenounceAdmin) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRenounceAdmin.Merge(m, src) +} +func (m *MsgRenounceAdmin) XXX_Size() int { + return m.Size() +} +func (m *MsgRenounceAdmin) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRenounceAdmin.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRenounceAdmin proto.InternalMessageInfo + +func (m *MsgRenounceAdmin) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *MsgRenounceAdmin) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +// MsgRenounceAdminResponse is the response for renouncing admin. +type MsgRenounceAdminResponse struct { +} + +func (m *MsgRenounceAdminResponse) Reset() { *m = MsgRenounceAdminResponse{} } +func (m *MsgRenounceAdminResponse) String() string { return proto.CompactTextString(m) } +func (*MsgRenounceAdminResponse) ProtoMessage() {} +func (*MsgRenounceAdminResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_5a175bee69e54b5d, []int{9} +} +func (m *MsgRenounceAdminResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRenounceAdminResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRenounceAdminResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRenounceAdminResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRenounceAdminResponse.Merge(m, src) +} +func (m *MsgRenounceAdminResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgRenounceAdminResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRenounceAdminResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRenounceAdminResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgCreateDenom)(nil), "sandbox.tokenfactory.MsgCreateDenom") + proto.RegisterType((*MsgCreateDenomResponse)(nil), "sandbox.tokenfactory.MsgCreateDenomResponse") + proto.RegisterType((*MsgMint)(nil), "sandbox.tokenfactory.MsgMint") + proto.RegisterType((*MsgMintResponse)(nil), "sandbox.tokenfactory.MsgMintResponse") + proto.RegisterType((*MsgBurn)(nil), "sandbox.tokenfactory.MsgBurn") + proto.RegisterType((*MsgBurnResponse)(nil), "sandbox.tokenfactory.MsgBurnResponse") + proto.RegisterType((*MsgChangeAdmin)(nil), "sandbox.tokenfactory.MsgChangeAdmin") + proto.RegisterType((*MsgChangeAdminResponse)(nil), "sandbox.tokenfactory.MsgChangeAdminResponse") + proto.RegisterType((*MsgRenounceAdmin)(nil), "sandbox.tokenfactory.MsgRenounceAdmin") + proto.RegisterType((*MsgRenounceAdminResponse)(nil), "sandbox.tokenfactory.MsgRenounceAdminResponse") +} + +func init() { proto.RegisterFile("sandbox/tokenfactory/tx.proto", fileDescriptor_5a175bee69e54b5d) } + +var fileDescriptor_5a175bee69e54b5d = []byte{ + // 612 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xcd, 0x6e, 0xd3, 0x4c, + 0x14, 0xb5, 0x9b, 0x34, 0xfd, 0x3a, 0xd5, 0x07, 0xd4, 0x8a, 0xc0, 0xb5, 0xa8, 0x53, 0x05, 0x8a, + 0xaa, 0xa8, 0xb5, 0x49, 0xaa, 0x08, 0x29, 0xbb, 0xa6, 0x2c, 0x89, 0x90, 0xc2, 0x8e, 0x4d, 0x35, + 0x89, 0xa7, 0x53, 0x0b, 0x3c, 0x13, 0x79, 0x26, 0xfd, 0xd9, 0x21, 0x56, 0x08, 0x09, 0x09, 0xde, + 0xa0, 0x0b, 0x1e, 0x20, 0x0b, 0x1e, 0x81, 0x45, 0x97, 0x15, 0x1b, 0xba, 0x42, 0x28, 0x59, 0x84, + 0xc7, 0x40, 0x33, 0x9e, 0xfc, 0x38, 0xd4, 0xa6, 0x95, 0xca, 0x26, 0x99, 0xb9, 0xe7, 0xdc, 0x7b, + 0xcf, 0xc9, 0xdc, 0xc9, 0x80, 0x55, 0x06, 0x89, 0xd7, 0xa2, 0xc7, 0x2e, 0xa7, 0xaf, 0x10, 0xd9, + 0x87, 0x6d, 0x4e, 0xc3, 0x13, 0x97, 0x1f, 0x3b, 0x9d, 0x90, 0x72, 0x6a, 0xe4, 0x15, 0xec, 0x4c, + 0xc3, 0xd6, 0x32, 0x0c, 0x7c, 0x42, 0x5d, 0xf9, 0x19, 0x11, 0x2d, 0xbb, 0x4d, 0x59, 0x40, 0x99, + 0xdb, 0x82, 0x0c, 0xb9, 0x87, 0xe5, 0x16, 0xe2, 0xb0, 0xec, 0xb6, 0xa9, 0x4f, 0x14, 0x7e, 0x4f, + 0xe1, 0x01, 0xc3, 0xee, 0x61, 0x59, 0x7c, 0x29, 0x60, 0x25, 0x02, 0xf6, 0xe4, 0xce, 0x8d, 0x36, + 0x0a, 0xca, 0x63, 0x8a, 0x69, 0x14, 0x17, 0xab, 0x28, 0x5a, 0xfc, 0xa0, 0x83, 0x5b, 0x0d, 0x86, + 0x77, 0x43, 0x04, 0x39, 0x7a, 0x8a, 0x08, 0x0d, 0x8c, 0xc7, 0x20, 0xc7, 0x10, 0xf1, 0x50, 0x68, + 0xea, 0x6b, 0xfa, 0xc6, 0x62, 0xdd, 0xfc, 0xf6, 0x65, 0x2b, 0xaf, 0x4a, 0xed, 0x78, 0x5e, 0x88, + 0x18, 0x7b, 0xc1, 0x43, 0x9f, 0xe0, 0xa6, 0xe2, 0x19, 0x79, 0x30, 0xef, 0x89, 0x54, 0x73, 0x4e, + 0x24, 0x34, 0xa3, 0x4d, 0x6d, 0xfb, 0xed, 0xb0, 0x57, 0x52, 0x94, 0xf7, 0xc3, 0x5e, 0xe9, 0xc1, + 0xa5, 0x3f, 0x4e, 0xbc, 0x79, 0xd1, 0x04, 0x77, 0xe3, 0x91, 0x26, 0x62, 0x1d, 0x4a, 0x18, 0x2a, + 0x5e, 0xe8, 0x60, 0xa1, 0xc1, 0x70, 0xc3, 0x27, 0xdc, 0xd8, 0x04, 0xd9, 0xfd, 0x90, 0x06, 0x7f, + 0x15, 0x28, 0x59, 0x46, 0x05, 0x2c, 0xc0, 0x28, 0x1c, 0x09, 0x4c, 0x49, 0x18, 0x11, 0x8d, 0x27, + 0x20, 0x07, 0x03, 0xda, 0x25, 0xdc, 0xcc, 0xac, 0xe9, 0x1b, 0x4b, 0x95, 0x15, 0x47, 0xf1, 0xc5, + 0x91, 0x38, 0xea, 0x48, 0x9c, 0x5d, 0xea, 0x93, 0x7a, 0xf6, 0xec, 0x47, 0x41, 0x6b, 0x2a, 0x7a, + 0xad, 0xf2, 0xee, 0xb4, 0xa0, 0xfd, 0x3a, 0x2d, 0x68, 0xc2, 0xbd, 0xec, 0x2f, 0xbc, 0xdf, 0x4f, + 0xf2, 0x2e, 0xec, 0x14, 0x97, 0xc1, 0x6d, 0xb5, 0x1c, 0xbb, 0xfd, 0x1c, 0xb9, 0xad, 0x77, 0x43, + 0x72, 0x4d, 0xb7, 0x13, 0xe5, 0x73, 0xff, 0x54, 0xb9, 0x90, 0xa6, 0x94, 0x8b, 0xe5, 0x58, 0xf9, + 0x57, 0x35, 0x51, 0x07, 0x90, 0x60, 0xb4, 0xe3, 0x05, 0x3e, 0xb9, 0xa9, 0x89, 0x32, 0xaa, 0x60, + 0x91, 0xa0, 0xa3, 0x3d, 0x28, 0x8a, 0xca, 0x73, 0x49, 0x2b, 0xf5, 0x1f, 0x41, 0x47, 0xb2, 0xfd, + 0x35, 0x06, 0x71, 0xa2, 0x79, 0x34, 0x88, 0x93, 0xc8, 0xd8, 0xe0, 0x27, 0x1d, 0xdc, 0x69, 0x30, + 0xdc, 0x44, 0x84, 0x76, 0x49, 0xfb, 0x66, 0x2d, 0xd6, 0xaa, 0x33, 0x5a, 0xd7, 0x93, 0xb4, 0xc6, + 0xda, 0x17, 0x2d, 0x60, 0xce, 0xc6, 0x46, 0x7a, 0x2b, 0xdf, 0x33, 0x20, 0xd3, 0x60, 0xd8, 0x80, + 0x60, 0x69, 0xfa, 0x9a, 0x3f, 0x74, 0x2e, 0xfb, 0x37, 0x72, 0xe2, 0xb7, 0xcf, 0xda, 0xbc, 0x0a, + 0x6b, 0xd4, 0xca, 0x78, 0x06, 0xb2, 0xf2, 0x7e, 0xae, 0x26, 0x66, 0x09, 0xd8, 0x5a, 0x4f, 0x85, + 0xa7, 0xab, 0xc9, 0xf9, 0x4f, 0xae, 0x26, 0xe0, 0x94, 0x6a, 0xd3, 0x73, 0x29, 0xed, 0x4f, 0xcd, + 0x64, 0x8a, 0xfd, 0x09, 0x2b, 0xcd, 0xfe, 0x9f, 0x93, 0x61, 0x60, 0xf0, 0x7f, 0x7c, 0x2a, 0x1e, + 0x25, 0xa6, 0xc7, 0x78, 0x96, 0x73, 0x35, 0xde, 0xa8, 0x91, 0x35, 0xff, 0x66, 0xd8, 0x2b, 0xe9, + 0xf5, 0xe7, 0x67, 0x7d, 0x5b, 0x3f, 0xef, 0xdb, 0xfa, 0xcf, 0xbe, 0xad, 0x7f, 0x1c, 0xd8, 0xda, + 0xf9, 0xc0, 0xd6, 0x2e, 0x06, 0xb6, 0xf6, 0xb2, 0x8a, 0x7d, 0x7e, 0xd0, 0x6d, 0x39, 0x6d, 0x1a, + 0xa8, 0x57, 0xc0, 0x55, 0x1d, 0xb6, 0x5e, 0x23, 0x0f, 0xa3, 0xd0, 0x9d, 0x7d, 0xa3, 0x4e, 0x3a, + 0x88, 0xb5, 0x72, 0xf2, 0x51, 0xd8, 0xfe, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xe4, 0x49, 0xa5, 0x0a, + 0xc8, 0x06, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type MsgClient interface { + // CreateDenom creates a new denom. + CreateDenom(ctx context.Context, in *MsgCreateDenom, opts ...grpc.CallOption) (*MsgCreateDenomResponse, error) + // Mint mints new tokens. + Mint(ctx context.Context, in *MsgMint, opts ...grpc.CallOption) (*MsgMintResponse, error) + // Burn burns tokens. + Burn(ctx context.Context, in *MsgBurn, opts ...grpc.CallOption) (*MsgBurnResponse, error) + // ChangeAdmin transfers admin authority to a new address. + ChangeAdmin(ctx context.Context, in *MsgChangeAdmin, opts ...grpc.CallOption) (*MsgChangeAdminResponse, error) + // RenounceAdmin permanently removes admin authority. + RenounceAdmin(ctx context.Context, in *MsgRenounceAdmin, opts ...grpc.CallOption) (*MsgRenounceAdminResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) CreateDenom(ctx context.Context, in *MsgCreateDenom, opts ...grpc.CallOption) (*MsgCreateDenomResponse, error) { + out := new(MsgCreateDenomResponse) + err := c.cc.Invoke(ctx, "/sandbox.tokenfactory.Msg/CreateDenom", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) Mint(ctx context.Context, in *MsgMint, opts ...grpc.CallOption) (*MsgMintResponse, error) { + out := new(MsgMintResponse) + err := c.cc.Invoke(ctx, "/sandbox.tokenfactory.Msg/Mint", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) Burn(ctx context.Context, in *MsgBurn, opts ...grpc.CallOption) (*MsgBurnResponse, error) { + out := new(MsgBurnResponse) + err := c.cc.Invoke(ctx, "/sandbox.tokenfactory.Msg/Burn", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) ChangeAdmin(ctx context.Context, in *MsgChangeAdmin, opts ...grpc.CallOption) (*MsgChangeAdminResponse, error) { + out := new(MsgChangeAdminResponse) + err := c.cc.Invoke(ctx, "/sandbox.tokenfactory.Msg/ChangeAdmin", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) RenounceAdmin(ctx context.Context, in *MsgRenounceAdmin, opts ...grpc.CallOption) (*MsgRenounceAdminResponse, error) { + out := new(MsgRenounceAdminResponse) + err := c.cc.Invoke(ctx, "/sandbox.tokenfactory.Msg/RenounceAdmin", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + // CreateDenom creates a new denom. + CreateDenom(context.Context, *MsgCreateDenom) (*MsgCreateDenomResponse, error) + // Mint mints new tokens. + Mint(context.Context, *MsgMint) (*MsgMintResponse, error) + // Burn burns tokens. + Burn(context.Context, *MsgBurn) (*MsgBurnResponse, error) + // ChangeAdmin transfers admin authority to a new address. + ChangeAdmin(context.Context, *MsgChangeAdmin) (*MsgChangeAdminResponse, error) + // RenounceAdmin permanently removes admin authority. + RenounceAdmin(context.Context, *MsgRenounceAdmin) (*MsgRenounceAdminResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) CreateDenom(ctx context.Context, req *MsgCreateDenom) (*MsgCreateDenomResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateDenom not implemented") +} +func (*UnimplementedMsgServer) Mint(ctx context.Context, req *MsgMint) (*MsgMintResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Mint not implemented") +} +func (*UnimplementedMsgServer) Burn(ctx context.Context, req *MsgBurn) (*MsgBurnResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Burn not implemented") +} +func (*UnimplementedMsgServer) ChangeAdmin(ctx context.Context, req *MsgChangeAdmin) (*MsgChangeAdminResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ChangeAdmin not implemented") +} +func (*UnimplementedMsgServer) RenounceAdmin(ctx context.Context, req *MsgRenounceAdmin) (*MsgRenounceAdminResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RenounceAdmin not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_CreateDenom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgCreateDenom) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).CreateDenom(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sandbox.tokenfactory.Msg/CreateDenom", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).CreateDenom(ctx, req.(*MsgCreateDenom)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_Mint_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgMint) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).Mint(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sandbox.tokenfactory.Msg/Mint", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).Mint(ctx, req.(*MsgMint)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_Burn_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgBurn) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).Burn(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sandbox.tokenfactory.Msg/Burn", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).Burn(ctx, req.(*MsgBurn)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_ChangeAdmin_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgChangeAdmin) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ChangeAdmin(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sandbox.tokenfactory.Msg/ChangeAdmin", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ChangeAdmin(ctx, req.(*MsgChangeAdmin)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_RenounceAdmin_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRenounceAdmin) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RenounceAdmin(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/sandbox.tokenfactory.Msg/RenounceAdmin", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RenounceAdmin(ctx, req.(*MsgRenounceAdmin)) + } + return interceptor(ctx, in, info, handler) +} + +var Msg_serviceDesc = _Msg_serviceDesc +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "sandbox.tokenfactory.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "CreateDenom", + Handler: _Msg_CreateDenom_Handler, + }, + { + MethodName: "Mint", + Handler: _Msg_Mint_Handler, + }, + { + MethodName: "Burn", + Handler: _Msg_Burn_Handler, + }, + { + MethodName: "ChangeAdmin", + Handler: _Msg_ChangeAdmin_Handler, + }, + { + MethodName: "RenounceAdmin", + Handler: _Msg_RenounceAdmin_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "sandbox/tokenfactory/tx.proto", +} + +func (m *MsgCreateDenom) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgCreateDenom) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCreateDenom) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintTx(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x12 + } + if len(m.Sender) > 0 { + i -= len(m.Sender) + copy(dAtA[i:], m.Sender) + i = encodeVarintTx(dAtA, i, uint64(len(m.Sender))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgCreateDenomResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgCreateDenomResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCreateDenomResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgMint) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgMint) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgMint) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintTx(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0x12 + } + if len(m.From) > 0 { + i -= len(m.From) + copy(dAtA[i:], m.From) + i = encodeVarintTx(dAtA, i, uint64(len(m.From))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgMintResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgMintResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgMintResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgBurn) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgBurn) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgBurn) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.From) > 0 { + i -= len(m.From) + copy(dAtA[i:], m.From) + i = encodeVarintTx(dAtA, i, uint64(len(m.From))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgBurnResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgBurnResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgBurnResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgChangeAdmin) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgChangeAdmin) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgChangeAdmin) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.NewAdmin) > 0 { + i -= len(m.NewAdmin) + copy(dAtA[i:], m.NewAdmin) + i = encodeVarintTx(dAtA, i, uint64(len(m.NewAdmin))) + i-- + dAtA[i] = 0x1a + } + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintTx(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x12 + } + if len(m.Sender) > 0 { + i -= len(m.Sender) + copy(dAtA[i:], m.Sender) + i = encodeVarintTx(dAtA, i, uint64(len(m.Sender))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgChangeAdminResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgChangeAdminResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgChangeAdminResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgRenounceAdmin) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRenounceAdmin) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRenounceAdmin) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintTx(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x12 + } + if len(m.Sender) > 0 { + i -= len(m.Sender) + copy(dAtA[i:], m.Sender) + i = encodeVarintTx(dAtA, i, uint64(len(m.Sender))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgRenounceAdminResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRenounceAdminResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRenounceAdminResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintTx(dAtA []byte, offset int, v uint64) int { + offset -= sovTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgCreateDenom) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgCreateDenomResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgMint) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.From) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Address) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Amount.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgMintResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgBurn) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.From) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Amount.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgBurnResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgChangeAdmin) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.NewAdmin) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgChangeAdminResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgRenounceAdmin) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgRenounceAdminResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovTx(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTx(x uint64) (n int) { + return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgCreateDenom) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgCreateDenom: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCreateDenom: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgCreateDenomResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgCreateDenomResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCreateDenomResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgMint) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgMint: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgMint: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field From", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.From = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgMintResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgMintResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgMintResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgBurn) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgBurn: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgBurn: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field From", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.From = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgBurnResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgBurnResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgBurnResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgChangeAdmin) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgChangeAdmin: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgChangeAdmin: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NewAdmin", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NewAdmin = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgChangeAdminResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgChangeAdminResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgChangeAdminResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRenounceAdmin) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRenounceAdmin: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRenounceAdmin: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRenounceAdminResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRenounceAdminResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRenounceAdminResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTx(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTx + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTx + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTx + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTx = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTx = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTx = fmt.Errorf("proto: unexpected end of group") +) From c6892a6ef83a37841f4bf4caf33b5b552f563d40 Mon Sep 17 00:00:00 2001 From: Diana Borbe Date: Mon, 4 May 2026 10:25:23 +0200 Subject: [PATCH 02/11] Update prototypes modules --- prototypes/go.mod | 291 ++++ prototypes/go.sum | 1427 +++++++++++++++++ prototypes/x/ift/keeper/callbacks.go | 2 +- prototypes/x/ift/keeper/callbacks_test.go | 2 +- prototypes/x/ift/keeper/genesis.go | 2 +- prototypes/x/ift/keeper/genesis_test.go | 2 +- prototypes/x/ift/keeper/keeper.go | 2 +- .../{keeper_test.go => keeper_test.gooo} | 2 +- prototypes/x/ift/keeper/msg_server.go | 2 +- ...sg_server_test.go => msg_server_test.gooo} | 4 +- prototypes/x/ift/keeper/query.go | 2 +- prototypes/x/ift/keeper/query_test.go | 4 +- prototypes/x/ift/module.go | 4 +- prototypes/x/ift/module_test.go | 4 +- prototypes/x/ift/types/constructor_test.go | 2 +- prototypes/x/ift/types/mint_call_test.go | 2 +- prototypes/x/tokenfactory/cli/tx.go | 2 +- prototypes/x/tokenfactory/go.mod | 399 +++++ prototypes/x/tokenfactory/keeper/denom.go | 2 +- prototypes/x/tokenfactory/keeper/genesis.go | 2 +- .../x/tokenfactory/keeper/genesis_test.go | 62 - prototypes/x/tokenfactory/keeper/keeper.go | 2 +- .../x/tokenfactory/keeper/keeper_test.go | 210 --- prototypes/x/tokenfactory/keeper/mint_burn.go | 2 +- .../x/tokenfactory/keeper/msg_server.go | 2 +- .../x/tokenfactory/keeper/msg_server_test.go | 598 ------- prototypes/x/tokenfactory/keeper/params.go | 2 +- prototypes/x/tokenfactory/keeper/query.go | 2 +- .../x/tokenfactory/keeper/query_test.go | 4 +- prototypes/x/tokenfactory/module.go | 6 +- prototypes/x/tokenfactory/module_test.go | 4 +- prototypes/x/tokenfactory/types/denom_test.go | 2 +- .../x/tokenfactory/types/genesis_test.go | 92 -- prototypes/x/tokenfactory/types/msgs_test.go | 195 --- 34 files changed, 2150 insertions(+), 1192 deletions(-) create mode 100644 prototypes/go.mod create mode 100644 prototypes/go.sum rename prototypes/x/ift/keeper/{keeper_test.go => keeper_test.gooo} (99%) rename prototypes/x/ift/keeper/{msg_server_test.go => msg_server_test.gooo} (99%) create mode 100644 prototypes/x/tokenfactory/go.mod delete mode 100644 prototypes/x/tokenfactory/keeper/genesis_test.go delete mode 100644 prototypes/x/tokenfactory/keeper/keeper_test.go delete mode 100644 prototypes/x/tokenfactory/keeper/msg_server_test.go delete mode 100644 prototypes/x/tokenfactory/types/genesis_test.go delete mode 100644 prototypes/x/tokenfactory/types/msgs_test.go diff --git a/prototypes/go.mod b/prototypes/go.mod new file mode 100644 index 00000000000..9cf3859c9e4 --- /dev/null +++ b/prototypes/go.mod @@ -0,0 +1,291 @@ +module github.com/cosmos/ibc-go/prototypes + +go 1.25.9 + +require ( + cosmossdk.io/api v1.0.0 + cosmossdk.io/collections v1.4.0 + cosmossdk.io/core v1.1.0 + cosmossdk.io/errors v1.1.0 + cosmossdk.io/log/v2 v2.1.0 + cosmossdk.io/math v1.5.3 + github.com/cosmos/cosmos-proto v1.0.0-beta.5 + github.com/cosmos/cosmos-sdk v0.54.2 + github.com/cosmos/gogoproto v1.7.2 + github.com/cosmos/ibc-go/v11 v11.0.0 + github.com/cosmos/solidity-ibc-eureka/packages/go-proto v0.0.0-20260502103309-00b9d8658884 + github.com/ethereum/go-ethereum v1.17.2 + github.com/gagliardetto/binary v0.8.0 + github.com/gagliardetto/solana-go v1.19.0 + github.com/golang/protobuf v1.5.4 + github.com/grpc-ecosystem/grpc-gateway v1.16.0 + github.com/stretchr/testify v1.11.1 + google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4 + google.golang.org/grpc v1.81.0 +) + +require ( + cosmossdk.io/depinject v1.2.1 // indirect + cosmossdk.io/schema v1.1.0 // indirect + filippo.io/edwards25519 v1.2.0 // indirect + github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect + github.com/99designs/keyring v1.2.2 // indirect + github.com/DataDog/datadog-go v4.8.3+incompatible // indirect + github.com/DataDog/zstd v1.5.7 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20260116142910-60249400e523 // indirect + github.com/RoaringBitmap/roaring/v2 v2.15.0 // indirect + github.com/benbjohnson/clock v1.3.5 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/bgentry/speakeasy v0.2.0 // indirect + github.com/bits-and-blooms/bitset v1.24.4 // indirect + github.com/blendle/zapdriver v1.3.1 // indirect + github.com/bytedance/gopkg v0.1.4 // indirect + github.com/bytedance/sonic v1.15.0 // indirect + github.com/bytedance/sonic/loader v0.5.1 // indirect + github.com/cenkalti/backoff/v4 v4.3.0 // indirect + github.com/cenkalti/backoff/v5 v5.0.3 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/cloudwego/base64x v0.1.6 // indirect + github.com/cockroachdb/errors v1.12.0 // indirect + github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0 // indirect + github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 // indirect + github.com/cockroachdb/pebble v1.1.5 // indirect + github.com/cockroachdb/redact v1.1.8 // indirect + github.com/cockroachdb/tokenbucket v0.0.0-20250429170803-42689b6311bb // indirect + github.com/cometbft/cometbft v0.39.1 // indirect + github.com/cometbft/cometbft-db v1.0.4 // indirect + github.com/cosmos/btcutil v1.0.5 // indirect + github.com/cosmos/btree v1.0.0 // indirect + github.com/cosmos/cosmos-db v1.1.3 // indirect + github.com/cosmos/cosmos-sdk/store/v2 v2.0.0 // indirect + github.com/cosmos/go-bip39 v1.0.0 // indirect + github.com/cosmos/gogogateway v1.2.0 // indirect + github.com/cosmos/iavl v1.2.8 // indirect + github.com/cosmos/ics23/go v0.11.0 // indirect + github.com/cosmos/ledger-cosmos-go v1.0.0 // indirect + github.com/danieljoos/wincred v1.2.3 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 // indirect + github.com/desertbit/timer v1.0.1 // indirect + github.com/dgraph-io/badger/v4 v4.9.1 // indirect + github.com/dgraph-io/ristretto/v2 v2.4.0 // indirect + github.com/dunglas/httpsfv v1.1.0 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/dvsekhvalnov/jose2go v1.8.0 // indirect + github.com/ebitengine/purego v0.10.0 // indirect + github.com/emicklei/dot v1.11.0 // indirect + github.com/fatih/color v1.18.0 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/flynn/noise v1.1.0 // indirect + github.com/fsnotify/fsnotify v1.9.0 // indirect + github.com/gagliardetto/treeout v0.1.4 // indirect + github.com/getsentry/sentry-go v0.44.1 // indirect + github.com/go-kit/kit v0.13.0 // indirect + github.com/go-kit/log v0.2.1 // indirect + github.com/go-logfmt/logfmt v0.6.1 // indirect + github.com/go-logr/logr v1.4.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect + github.com/go-viper/mapstructure/v2 v2.5.0 // indirect + github.com/goccy/go-json v0.10.6 // indirect + github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect + github.com/gogo/googleapis v1.4.1 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/snappy v1.0.0 // indirect + github.com/google/btree v1.1.3 // indirect + github.com/google/flatbuffers v25.2.10+incompatible // indirect + github.com/google/go-cmp v0.7.0 // indirect + github.com/google/orderedcode v0.0.1 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/gorilla/handlers v1.5.2 // indirect + github.com/gorilla/mux v1.8.1 // indirect + github.com/gorilla/websocket v1.5.3 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect + github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect + github.com/hashicorp/go-hclog v1.6.3 // indirect + github.com/hashicorp/go-immutable-radix v1.3.1 // indirect + github.com/hashicorp/go-metrics v0.5.4 // indirect + github.com/hashicorp/go-plugin v1.7.0 // indirect + github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect + github.com/hashicorp/yamux v0.1.2 // indirect + github.com/hdevalence/ed25519consensus v0.2.0 // indirect + github.com/holiman/uint256 v1.3.2 // indirect + github.com/huandu/skiplist v1.2.1 // indirect + github.com/huin/goupnp v1.3.0 // indirect + github.com/iancoleman/strcase v0.3.0 // indirect + github.com/improbable-eng/grpc-web v0.15.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/ipfs/go-cid v0.5.0 // indirect + github.com/jackpal/go-nat-pmp v1.0.2 // indirect + github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect + github.com/jmhodges/levigo v1.0.0 // indirect + github.com/klauspost/compress v1.18.5 // indirect + github.com/klauspost/cpuid/v2 v2.3.0 // indirect + github.com/koron/go-ssdp v0.0.6 // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/kr/text v0.2.0 // indirect + github.com/lib/pq v1.11.2 // indirect + github.com/libp2p/go-buffer-pool v0.1.0 // indirect + github.com/libp2p/go-flow-metrics v0.2.0 // indirect + github.com/libp2p/go-libp2p v0.47.0 // indirect + github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect + github.com/libp2p/go-msgio v0.3.0 // indirect + github.com/libp2p/go-netroute v0.3.0 // indirect + github.com/libp2p/go-reuseport v0.4.0 // indirect + github.com/libp2p/go-yamux/v5 v5.0.1 // indirect + github.com/linxGnu/grocksdb v1.10.7 // indirect + github.com/logrusorgru/aurora v2.0.3+incompatible // indirect + github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88 // indirect + github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect + github.com/mattn/go-colorable v0.1.14 // indirect + github.com/mattn/go-isatty v0.0.21 // indirect + github.com/miekg/dns v1.1.66 // indirect + github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect + github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect + github.com/minio/highwayhash v1.0.4 // indirect + github.com/minio/sha256-simd v1.0.1 // indirect + github.com/mitchellh/go-testing-interface v1.14.1 // indirect + github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1 // indirect + github.com/mr-tron/base58 v1.2.0 // indirect + github.com/mschoch/smat v0.2.0 // indirect + github.com/mtibben/percent v0.2.1 // indirect + github.com/multiformats/go-base32 v0.1.0 // indirect + github.com/multiformats/go-base36 v0.2.0 // indirect + github.com/multiformats/go-multiaddr v0.16.1 // indirect + github.com/multiformats/go-multiaddr-dns v0.4.1 // indirect + github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect + github.com/multiformats/go-multibase v0.2.0 // indirect + github.com/multiformats/go-multicodec v0.9.1 // indirect + github.com/multiformats/go-multihash v0.2.3 // indirect + github.com/multiformats/go-multistream v0.6.1 // indirect + github.com/multiformats/go-varint v0.0.7 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/oasisprotocol/curve25519-voi v0.0.0-20251114093237-2ab5a27a1729 // indirect + github.com/oklog/run v1.2.0 // indirect + github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect + github.com/pelletier/go-toml/v2 v2.2.4 // indirect + github.com/petermattis/goid v0.0.0-20260113132338-7c7de50cc741 // indirect + github.com/pion/datachannel v1.5.10 // indirect + github.com/pion/dtls/v2 v2.2.12 // indirect + github.com/pion/dtls/v3 v3.1.2 // indirect + github.com/pion/ice/v4 v4.0.10 // indirect + github.com/pion/interceptor v0.1.40 // indirect + github.com/pion/logging v0.2.4 // indirect + github.com/pion/mdns/v2 v2.0.7 // indirect + github.com/pion/randutil v0.1.0 // indirect + github.com/pion/rtcp v1.2.15 // indirect + github.com/pion/rtp v1.8.19 // indirect + github.com/pion/sctp v1.8.39 // indirect + github.com/pion/sdp/v3 v3.0.13 // indirect + github.com/pion/srtp/v3 v3.0.6 // indirect + github.com/pion/stun v0.6.1 // indirect + github.com/pion/stun/v3 v3.0.0 // indirect + github.com/pion/transport/v2 v2.2.10 // indirect + github.com/pion/transport/v3 v3.0.7 // indirect + github.com/pion/transport/v4 v4.0.1 // indirect + github.com/pion/turn/v4 v4.0.2 // indirect + github.com/pion/webrtc/v4 v4.1.2 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect + github.com/prometheus/client_golang v1.23.2 // indirect + github.com/prometheus/client_model v0.6.2 // indirect + github.com/prometheus/common v0.67.5 // indirect + github.com/prometheus/otlptranslator v1.0.0 // indirect + github.com/prometheus/procfs v0.20.1 // indirect + github.com/quic-go/qpack v0.6.0 // indirect + github.com/quic-go/quic-go v0.59.0 // indirect + github.com/quic-go/webtransport-go v0.10.0 // indirect + github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9 // indirect + github.com/rogpeppe/go-internal v1.14.1 // indirect + github.com/rs/cors v1.11.1 // indirect + github.com/rs/zerolog v1.35.0 // indirect + github.com/sagikazarmark/locafero v0.11.0 // indirect + github.com/sasha-s/go-deadlock v0.3.7 // indirect + github.com/shirou/gopsutil/v4 v4.26.3 // indirect + github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect + github.com/spaolacci/murmur3 v1.1.0 // indirect + github.com/spf13/afero v1.15.0 // indirect + github.com/spf13/cast v1.10.0 // indirect + github.com/spf13/cobra v1.10.2 // indirect + github.com/spf13/pflag v1.0.10 // indirect + github.com/spf13/viper v1.21.0 // indirect + github.com/streamingfast/logging v0.0.0-20250404134358-92b15d2fbd2e // indirect + github.com/subosito/gotenv v1.6.0 // indirect + github.com/supranational/blst v0.3.16 // indirect + github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect + github.com/tendermint/go-amino v0.16.0 // indirect + github.com/tidwall/btree v1.8.1 // indirect + github.com/tklauser/go-sysconf v0.3.16 // indirect + github.com/tklauser/numcpus v0.11.0 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + github.com/wlynxg/anet v0.0.5 // indirect + github.com/yusufpapurcu/wmi v1.2.4 // indirect + github.com/zondax/golem v0.27.0 // indirect + github.com/zondax/hid v0.9.2 // indirect + github.com/zondax/ledger-go v1.0.1 // indirect + go.etcd.io/bbolt v1.4.3 // indirect + go.mongodb.org/mongo-driver/v2 v2.5.0 // indirect + go.opentelemetry.io/auto/sdk v1.2.1 // indirect + go.opentelemetry.io/contrib/bridges/otelslog v0.17.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 // indirect + go.opentelemetry.io/contrib/instrumentation/host v0.67.0 // indirect + go.opentelemetry.io/contrib/instrumentation/runtime v0.67.0 // indirect + go.opentelemetry.io/contrib/otelconf v0.22.0 // indirect + go.opentelemetry.io/contrib/propagators/autoprop v0.67.0 // indirect + go.opentelemetry.io/contrib/propagators/aws v1.42.0 // indirect + go.opentelemetry.io/contrib/propagators/b3 v1.42.0 // indirect + go.opentelemetry.io/contrib/propagators/jaeger v1.42.0 // indirect + go.opentelemetry.io/contrib/propagators/ot v1.42.0 // indirect + go.opentelemetry.io/otel v1.43.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.18.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.18.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.42.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.42.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.42.0 // indirect + go.opentelemetry.io/otel/exporters/prometheus v0.64.0 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.18.0 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.42.0 // indirect + go.opentelemetry.io/otel/log v0.19.0 // indirect + go.opentelemetry.io/otel/metric v1.43.0 // indirect + go.opentelemetry.io/otel/sdk v1.43.0 // indirect + go.opentelemetry.io/otel/sdk/log v0.18.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect + go.opentelemetry.io/otel/trace v1.43.0 // indirect + go.opentelemetry.io/proto/otlp v1.9.0 // indirect + go.uber.org/dig v1.19.0 // indirect + go.uber.org/fx v1.24.0 // indirect + go.uber.org/mock v0.6.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.27.1 // indirect + go.yaml.in/yaml/v2 v2.4.4 // indirect + go.yaml.in/yaml/v3 v3.0.4 // indirect + golang.org/x/arch v0.26.0 // indirect + golang.org/x/crypto v0.50.0 // indirect + golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 // indirect + golang.org/x/mod v0.34.0 // indirect + golang.org/x/net v0.53.0 // indirect + golang.org/x/sync v0.20.0 // indirect + golang.org/x/sys v0.43.0 // indirect + golang.org/x/telemetry v0.0.0-20260311193753-579e4da9a98c // indirect + golang.org/x/term v0.42.0 // indirect + golang.org/x/text v0.36.0 // indirect + golang.org/x/time v0.15.0 // indirect + golang.org/x/tools v0.43.0 // indirect + google.golang.org/genproto v0.0.0-20260414002931-afd174a4e478 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260420184626-e10c466a9529 // indirect + google.golang.org/protobuf v1.36.11 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + gotest.tools/v3 v3.5.2 // indirect + lukechampine.com/blake3 v1.4.1 // indirect + nhooyr.io/websocket v1.8.17 // indirect + pgregory.net/rapid v1.2.0 // indirect + sigs.k8s.io/yaml v1.6.0 // indirect +) diff --git a/prototypes/go.sum b/prototypes/go.sum new file mode 100644 index 00000000000..e8a21351bd5 --- /dev/null +++ b/prototypes/go.sum @@ -0,0 +1,1427 @@ +cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4= +cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= +cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= +cloud.google.com/go/auth v0.20.0 h1:kXTssoVb4azsVDoUiF8KvxAqrsQcQtB53DcSgta74CA= +cloud.google.com/go/auth v0.20.0/go.mod h1:942/yi/itH1SsmpyrbnTMDgGfdy2BUqIKyd0cyYLc5Q= +cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= +cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= +cloud.google.com/go/compute v1.58.0 h1:WQamD8d9Vxu+m5IJBxgUzqsbHxXwx/T7Ol4V5GyVCZE= +cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= +cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= +cloud.google.com/go/iam v1.9.0 h1:89wyjxT6DL4b5rk/Nk8eBC9DHqf+JiMstrn5IEYxFw4= +cloud.google.com/go/iam v1.9.0/go.mod h1:KP+nKGugNJW4LcLx1uEZcq1ok5sQHFaQehQNl4QDgV4= +cloud.google.com/go/monitoring v1.27.0 h1:BhYwMqao+e5Nn7JtWMM9m6zRtKtVUK6kJWMizXChkLU= +cloud.google.com/go/monitoring v1.27.0/go.mod h1:72NOVjJXHY/HBfoLT0+qlCZBT059+9VXLeAnL2PeeVM= +cloud.google.com/go/storage v1.62.1 h1:Os0G3XbUbjZumkpDUf2Y0rLoXJTCF1kU2kWUujKYXD8= +cloud.google.com/go/storage v1.62.1/go.mod h1:cpYz/kRVZ+UQAF1uHeea10/9ewcRbxGoGNKsS9daSXA= +cosmossdk.io/api v1.0.0 h1:qTV8OPVEwcBPwp2b9p4Qy4noZyihJ+sOMaWL/VT+RCc= +cosmossdk.io/api v1.0.0/go.mod h1:fKRljeYk+04p4T8Shdyv+uH2fSVyzHoWrvDAs/7OxfI= +cosmossdk.io/collections v1.4.0 h1:b373bkxCxKiRbapxZ42TRmcKJEnBVBebdQVk9I5IkkE= +cosmossdk.io/collections v1.4.0/go.mod h1:gxbieVY3tjbvWlkm3yOXf7sGyDrVi12haZH+sek6whw= +cosmossdk.io/core v1.1.0 h1:iJ7j2DjNsFzg4/z4ImNQYzy2D4LfMCsaQ8Lrz1KCmxk= +cosmossdk.io/core v1.1.0/go.mod h1:qGmJxBFHobvG1k4bROQnueslotBU5MIKZLC57xVBYYI= +cosmossdk.io/depinject v1.2.1 h1:eD6FxkIjlVaNZT+dXTQuwQTKZrFZ4UrfCq1RKgzyhMw= +cosmossdk.io/depinject v1.2.1/go.mod h1:lqQEycz0H2JXqvOgVwTsjEdMI0plswI7p6KX+MVqFOM= +cosmossdk.io/errors v1.1.0 h1:X2DSt9JYgH7cuiaDr318aUqIl2z5Lfo/PdGzAtmczUU= +cosmossdk.io/errors v1.1.0/go.mod h1:lnjBmx7etZpMTLnxdspZupH0d9HGRWZhiezDZX2ayyI= +cosmossdk.io/log/v2 v2.1.0 h1:oWLWqZ1UObWu5hIS3dvTW7QyjtvlmSzC3LOy04U/hVI= +cosmossdk.io/log/v2 v2.1.0/go.mod h1:zDNpuRD2sWw4zuw1lZYg/jxKftVG+VizgcWAWkIorwY= +cosmossdk.io/math v1.5.3 h1:WH6tu6Z3AUCeHbeOSHg2mt9rnoiUWVWaQ2t6Gkll96U= +cosmossdk.io/math v1.5.3/go.mod h1:uqcZv7vexnhMFJF+6zh9EWdm/+Ylyln34IvPnBauPCQ= +cosmossdk.io/schema v1.1.0 h1:mmpuz3dzouCoyjjcMcA/xHBEmMChN+EHh8EHxHRHhzE= +cosmossdk.io/schema v1.1.0/go.mod h1:Gb7pqO+tpR+jLW5qDcNOSv0KtppYs7881kfzakguhhI= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= +filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= +github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= +github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= +github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0= +github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk= +github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg= +github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/DataDog/datadog-go v4.8.3+incompatible h1:fNGaYSuObuQb5nzeTQqowRAd9bpDIRRV4/gUtIBjh8Q= +github.com/DataDog/datadog-go v4.8.3+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/DataDog/zstd v1.5.7 h1:ybO8RBeh29qrxIhCA9E8gKY6xfONU9T6G6aP9DTKfLE= +github.com/DataDog/zstd v1.5.7/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0 h1:rIkQfkCOVKc1OiRCNcSDD8ml5RJlZbH/Xsq7lbpynwc= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0/go.mod h1:RD2SsorTmYhF6HkTmDw7KmPYQk8OBYwTkuasChwv7R4= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0 h1:O2sXMyJh8b7devAGdE+163xtRurt0RVpB6DIzX5vGfg= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0/go.mod h1:hEpiGU18xf70qb3jbTcIggWAiEfX/cOIVc2OTe4OegA= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 h1:0YP0+/ixwu+Uqeu/FGiBZNQ19huiUxxiPXIc9WsLKuQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0/go.mod h1:6ZZMQhZKDvUvkJw2rc+oDP90tMMzuU/J+5HG1ZmPOmE= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= +github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20260116142910-60249400e523 h1:pQUezn45oyv/8VcOQvPCg2851EIIusY0YKkJhAXsy2I= +github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20260116142910-60249400e523/go.mod h1:ioLG6R+5bUSO1oeGSDxOV3FADARuMoytZCSX6MEMQkI= +github.com/RoaringBitmap/roaring/v2 v2.15.0 h1:gCbixa3UiG7g6WUZNVOfEEg2HTc1vR4OVdMkX8t1ZFc= +github.com/RoaringBitmap/roaring/v2 v2.15.0/go.mod h1:eq4wdNXxtJIS/oikeCzdX1rBzek7ANzbth041hrU8Q4= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/adlio/schema v1.4.0 h1:dekxG6P0my/bPvlyWzMULelR2Xej8RGErlnJcoY5ddw= +github.com/adlio/schema v1.4.0/go.mod h1:3/ojUldWBCWp4e+6VN9ets6unG5WdqbjF7vyzM0zTVQ= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/aws/aws-sdk-go-v2 v1.41.5 h1:dj5kopbwUsVUVFgO4Fi5BIT3t4WyqIDjGKCangnV/yY= +github.com/aws/aws-sdk-go-v2 v1.41.5/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 h1:eBMB84YGghSocM7PsjmmPffTa+1FBUeNvGvFou6V/4o= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI= +github.com/aws/aws-sdk-go-v2/config v1.32.14 h1:opVIRo/ZbbI8OIqSOKmpFaY7IwfFUOCCXBsUpJOwDdI= +github.com/aws/aws-sdk-go-v2/config v1.32.14/go.mod h1:U4/V0uKxh0Tl5sxmCBZ3AecYny4UNlVmObYjKuuaiOo= +github.com/aws/aws-sdk-go-v2/credentials v1.19.14 h1:n+UcGWAIZHkXzYt87uMFBv/l8THYELoX6gVcUvgl6fI= +github.com/aws/aws-sdk-go-v2/credentials v1.19.14/go.mod h1:cJKuyWB59Mqi0jM3nFYQRmnHVQIcgoxjEMAbLkpr62w= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21 h1:NUS3K4BTDArQqNu2ih7yeDLaS3bmHD0YndtA6UP884g= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21/go.mod h1:YWNWJQNjKigKY1RHVJCuupeWDrrHjRqHm0N9rdrWzYI= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21 h1:Rgg6wvjjtX8bNHcvi9OnXWwcE0a2vGpbwmtICOsvcf4= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21/go.mod h1:A/kJFst/nm//cyqonihbdpQZwiUhhzpqTsdbhDdRF9c= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21 h1:PEgGVtPoB6NTpPrBgqSE5hE/o47Ij9qk/SEZFbUOe9A= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21/go.mod h1:p+hz+PRAYlY3zcpJhPwXlLC4C+kqn70WIHwnzAfs6ps= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 h1:qYQ4pzQ2Oz6WpQ8T3HvGHnZydA72MnLuFK9tJwmrbHw= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.22 h1:rWyie/PxDRIdhNf4DzRk0lvjVOqFJuNnO8WwaIRVxzQ= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.22/go.mod h1:zd/JsJ4P7oGfUhXn1VyLqaRZwPmZwg44Jf2dS84Dm3Y= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 h1:5EniKhLZe4xzL7a+fU3C2tfUN4nWIqlLesfrjkuPFTY= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13 h1:JRaIgADQS/U6uXDqlPiefP32yXTda7Kqfx+LgspooZM= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13/go.mod h1:CEuVn5WqOMilYl+tbccq8+N2ieCy0gVn3OtRb0vBNNM= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21 h1:c31//R3xgIJMSC8S6hEVq+38DcvUlgFY0FM6mSI5oto= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21/go.mod h1:r6+pf23ouCB718FUxaqzZdbpYFyDtehyZcmP5KL9FkA= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21 h1:ZlvrNcHSFFWURB8avufQq9gFsheUgjVD9536obIknfM= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21/go.mod h1:cv3TNhVrssKR0O/xxLJVRfd2oazSnZnkUeTf6ctUwfQ= +github.com/aws/aws-sdk-go-v2/service/s3 v1.99.0 h1:hlSuz394kV0vhv9drL5lhuEFbEOEP1VyQpy15qWh1Pk= +github.com/aws/aws-sdk-go-v2/service/s3 v1.99.0/go.mod h1:uoA43SdFwacedBfSgfFSjjCvYe8aYBS7EnU5GZ/YKMM= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.9 h1:QKZH0S178gCmFEgst8hN0mCX1KxLgHBKKY/CLqwP8lg= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.9/go.mod h1:7yuQJoT+OoH8aqIxw9vwF+8KpvLZ8AWmvmUWHsGQZvI= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.15 h1:lFd1+ZSEYJZYvv9d6kXzhkZu07si3f+GQ1AaYwa2LUM= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.15/go.mod h1:WSvS1NLr7JaPunCXqpJnWk1Bjo7IxzZXrZi1QQCkuqM= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.19 h1:dzztQ1YmfPrxdrOiuZRMF6fuOwWlWpD2StNLTceKpys= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.19/go.mod h1:YO8TrYtFdl5w/4vmjL8zaBSsiNp3w0L1FfKVKenZT7w= +github.com/aws/aws-sdk-go-v2/service/sts v1.41.10 h1:p8ogvvLugcR/zLBXTXrTkj0RYBUdErbMnAFFp12Lm/U= +github.com/aws/aws-sdk-go-v2/service/sts v1.41.10/go.mod h1:60dv0eZJfeVXfbT1tFJinbHrDfSJ2GZl4Q//OSSNAVw= +github.com/aws/smithy-go v1.24.3 h1:XgOAaUgx+HhVBoP4v8n6HCQoTRDhoMghKqw4LNHsDNg= +github.com/aws/smithy-go v1.24.3/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o= +github.com/benbjohnson/clock v1.3.5/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bgentry/speakeasy v0.2.0 h1:tgObeVOf8WAvtuAX6DhJ4xks4CFNwPDZiqzGqIHE51E= +github.com/bgentry/speakeasy v0.2.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bits-and-blooms/bitset v1.24.4 h1:95H15Og1clikBrKr/DuzMXkQzECs1M6hhoGXLwLQOZE= +github.com/bits-and-blooms/bitset v1.24.4/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/blendle/zapdriver v1.3.1 h1:C3dydBOWYRiOk+B8X9IVZ5IOe+7cl+tGOexN4QqHfpE= +github.com/blendle/zapdriver v1.3.1/go.mod h1:mdXfREi6u5MArG4j9fewC+FGnXaBR+T4Ox4J2u4eHCc= +github.com/btcsuite/btcd/btcec/v2 v2.3.5 h1:dpAlnAwmT1yIBm3exhT1/8iUSD98RDJM5vqJVQDQLiU= +github.com/btcsuite/btcd/btcec/v2 v2.3.5/go.mod h1:m22FrOAiuxl/tht9wIqAoGHcbnCCaPWyauO8y2LGGtQ= +github.com/btcsuite/btcd/btcutil v1.1.6 h1:zFL2+c3Lb9gEgqKNzowKUPQNb8jV7v5Oaodi/AYFd6c= +github.com/btcsuite/btcd/btcutil v1.1.6/go.mod h1:9dFymx8HpuLqBnsPELrImQeTQfKBQqzqGbbV3jK55aE= +github.com/bytedance/gopkg v0.1.4 h1:oZnQwnX82KAIWb7033bEwtxvTqXcYMxDBaQxo5JJHWM= +github.com/bytedance/gopkg v0.1.4/go.mod h1:v1zWfPm21Fb+OsyXN2VAHdL6TBb2L88anLQgdyje6R4= +github.com/bytedance/sonic v1.15.0 h1:/PXeWFaR5ElNcVE84U0dOHjiMHQOwNIx3K4ymzh/uSE= +github.com/bytedance/sonic v1.15.0/go.mod h1:tFkWrPz0/CUCLEF4ri4UkHekCIcdnkqXw9VduqpJh0k= +github.com/bytedance/sonic/loader v0.5.1 h1:Ygpfa9zwRCCKSlrp5bBP/b/Xzc3VxsAW+5NIYXrOOpI= +github.com/bytedance/sonic/loader v0.5.1/go.mod h1:AR4NYCk5DdzZizZ5djGqQ92eEhCCcdf5x77udYiSJRo= +github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= +github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= +github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= +github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M= +github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 h1:aBangftG7EVZoUb69Os8IaYg++6uMOdKK83QtkkvJik= +github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2/go.mod h1:qwXFYgsP6T7XnJtbKlf1HP8AjxZZyzxMmc+Lq5GjlU4= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= +github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/errors v1.12.0 h1:d7oCs6vuIMUQRVbi6jWWWEJZahLCfJpnJSVobd1/sUo= +github.com/cockroachdb/errors v1.12.0/go.mod h1:SvzfYNNBshAVbZ8wzNc/UPK3w1vf0dKDUP41ucAIf7g= +github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0 h1:pU88SPhIFid6/k0egdR5V6eALQYq2qbSmukrkgIh/0A= +github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M= +github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 h1:ASDL+UJcILMqgNeV5jiqR4j+sTuvQNHdf2chuKj1M5k= +github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506/go.mod h1:Mw7HqKr2kdtu6aYGn3tPmAftiP3QPX63LdK/zcariIo= +github.com/cockroachdb/pebble v1.1.5 h1:5AAWCBWbat0uE0blr8qzufZP5tBjkRyy/jWe1QWLnvw= +github.com/cockroachdb/pebble v1.1.5/go.mod h1:17wO9el1YEigxkP/YtV8NtCivQDgoCyBg5c4VR/eOWo= +github.com/cockroachdb/redact v1.1.8 h1:8eVLLj6juKxiKrAEw2b8cJvNqWq++U8WOfQFuL7KTaA= +github.com/cockroachdb/redact v1.1.8/go.mod h1:GceHHpJ0rMDpYARL5In88Alq/xMBUtVlz7Qxix6ZVkw= +github.com/cockroachdb/tokenbucket v0.0.0-20250429170803-42689b6311bb h1:3bCgBvB8PbJVMX1ouCcSIxvsqKPYM7gs72o0zC76n9g= +github.com/cockroachdb/tokenbucket v0.0.0-20250429170803-42689b6311bb/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/cometbft/cometbft v0.39.1 h1:rPMgpKVd6OUIMDQW6InsAxGCdV+6uiwMQjKYmACjH/o= +github.com/cometbft/cometbft v0.39.1/go.mod h1:lkMTqoPc3h77h6i0oe3wyZgZQBwEwXq+lYpnZLmKJYI= +github.com/cometbft/cometbft-db v1.0.4 h1:cezb8yx/ZWcF124wqUtAFjAuDksS1y1yXedvtprUFxs= +github.com/cometbft/cometbft-db v1.0.4/go.mod h1:M+BtHAGU2XLrpUxo3Nn1nOCcnVCiLM9yx5OuT0u5SCA= +github.com/containerd/continuity v0.4.5 h1:ZRoN1sXq9u7V6QoHMcVWGhOwDFqZ4B9i5H6un1Wh0x4= +github.com/containerd/continuity v0.4.5/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= +github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= +github.com/cosmos/btree v1.0.0 h1:V3OdIzTQw2yE7f6pD6FfA9j2/YLj1UpB9MdY0zU3v3k= +github.com/cosmos/btree v1.0.0/go.mod h1:BZML+flLn4d3MOa4POmzDWf5HQ7EGh0y1OLlfhh7A0k= +github.com/cosmos/cosmos-db v1.1.3 h1:7QNT77+vkefostcKkhrzDK9uoIEryzFrU9eoMeaQOPY= +github.com/cosmos/cosmos-db v1.1.3/go.mod h1:kN+wGsnwUJZYn8Sy5Q2O0vCYA99MJllkKASbs6Unb9U= +github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= +github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= +github.com/cosmos/cosmos-sdk v0.54.2 h1:TBcKN4z++XJ8Tu/NCbLV14KQ3pKhoSwSTDipeWmuaxs= +github.com/cosmos/cosmos-sdk v0.54.2/go.mod h1:yU5ttNdGYTVPfdYhrD8HN1hGg9s3jm7Ub42SpFW3T/Y= +github.com/cosmos/cosmos-sdk/store/v2 v2.0.0 h1:5CFXBU5cHIvxMpz5QBrTwR5DL/W3uZL2BYYMoDp4siY= +github.com/cosmos/cosmos-sdk/store/v2 v2.0.0/go.mod h1:XyRyi5fGjIcokBqS1cyA8/QVbVNy4ui8hmpk1gezuHo= +github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= +github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= +github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= +github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= +github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= +github.com/cosmos/gogoproto v1.7.2 h1:5G25McIraOC0mRFv9TVO139Uh3OklV2hczr13KKVHCA= +github.com/cosmos/gogoproto v1.7.2/go.mod h1:8S7w53P1Y1cHwND64o0BnArT6RmdgIvsBuco6uTllsk= +github.com/cosmos/iavl v1.2.8 h1:55F96BGUJ7KT7h+Ky/cEqS+pEvhFqsU4O8Th3F0N1js= +github.com/cosmos/iavl v1.2.8/go.mod h1:FRHN4tO+6crf0p2zsqye+nAbsMgiwdkxpWm18DyP6+Y= +github.com/cosmos/ibc-go/v11 v11.0.0 h1:9EIehi88hNP1cCU83NC+J8UXNn+05YZt9eqmnzCQLSg= +github.com/cosmos/ibc-go/v11 v11.0.0/go.mod h1:iWlzLuCu+ctVbQwoVf5z51HE5e/NE8/pwnLVVDmP++4= +github.com/cosmos/ics23/go v0.11.0 h1:jk5skjT0TqX5e5QJbEnwXIS2yI2vnmLOgpQPeM5RtnU= +github.com/cosmos/ics23/go v0.11.0/go.mod h1:A8OjxPE67hHST4Icw94hOxxFEJMBG031xIGF/JHNIY0= +github.com/cosmos/ledger-cosmos-go v1.0.0 h1:jNKW89nPf0vR0EkjHG8Zz16h6p3zqwYEOxlHArwgYtw= +github.com/cosmos/ledger-cosmos-go v1.0.0/go.mod h1:mGaw2wDOf+Z6SfRJsMGxU9DIrBa4du0MAiPlpPhLAOE= +github.com/cosmos/solidity-ibc-eureka/packages/go-proto v0.0.0-20260502103309-00b9d8658884 h1:qe6m1bDONjbSjr8rgJyXtnbmllRI/WrHftODkkE8VOk= +github.com/cosmos/solidity-ibc-eureka/packages/go-proto v0.0.0-20260502103309-00b9d8658884/go.mod h1:OXel42XVhxNaFBPhA8URw1f/UG6pWEjkBB3DMRQD/hM= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/danieljoos/wincred v1.2.3 h1:v7dZC2x32Ut3nEfRH+vhoZGvN72+dQ/snVXo/vMFLdQ= +github.com/danieljoos/wincred v1.2.3/go.mod h1:6qqX0WNrS4RzPZ1tnroDzq9kY3fu1KwE7MRLQK4X0bs= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= +github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= +github.com/decred/dcrd/crypto/blake256 v1.1.0 h1:zPMNGQCm0g4QTY27fOCorQW7EryeQ/U0x++OzVrdms8= +github.com/decred/dcrd/crypto/blake256 v1.1.0/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 h1:5RVFMOWjMyRy8cARdy79nAmgYw3hK/4HUq48LQ6Wwqo= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40= +github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= +github.com/desertbit/timer v1.0.1 h1:yRpYNn5Vaaj6QXecdLMPMJsW81JLiI1eokUft5nBmeo= +github.com/desertbit/timer v1.0.1/go.mod h1:htRrYeY5V/t4iu1xCJ5XsQvp4xve8QulXXctAzxqcwE= +github.com/dgraph-io/badger/v4 v4.9.1 h1:DocZXZkg5JJHJPtUErA0ibyHxOVUDVoXLSCV6t8NC8w= +github.com/dgraph-io/badger/v4 v4.9.1/go.mod h1:5/MEx97uzdPUHR4KtkNt8asfI2T4JiEiQlV7kWUo8c0= +github.com/dgraph-io/ristretto/v2 v2.4.0 h1:I/w09yLjhdcVD2QV192UJcq8dPBaAJb9pOuMyNy0XlU= +github.com/dgraph-io/ristretto/v2 v2.4.0/go.mod h1:0KsrXtXvnv0EqnzyowllbVJB8yBonswa2lTCK2gGo9E= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa512G+w+Pxci9hJPB8oMnkcP3iZF38= +github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/docker/go-connections v0.6.0 h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94= +github.com/docker/go-connections v0.6.0/go.mod h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/dunglas/httpsfv v1.1.0 h1:Jw76nAyKWKZKFrpMMcL76y35tOpYHqQPzHQiwDvpe54= +github.com/dunglas/httpsfv v1.1.0/go.mod h1:zID2mqw9mFsnt7YC3vYQ9/cjq30q41W+1AnDwH8TiMg= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/dvsekhvalnov/jose2go v1.8.0 h1:LqkkVKAlHFfH9LOEl5fe4p/zL02OhWE7pCufMBG2jLA= +github.com/dvsekhvalnov/jose2go v1.8.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/ebitengine/purego v0.10.0 h1:QIw4xfpWT6GWTzaW5XEKy3HXoqrJGx1ijYHzTF0/ISU= +github.com/ebitengine/purego v0.10.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/emicklei/dot v1.11.0 h1:zsrhCuFHAJge/aZIC4N4LdHy5tqYu4tWEaUzIwdYj4Y= +github.com/emicklei/dot v1.11.0/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA= +github.com/envoyproxy/go-control-plane/envoy v1.37.0 h1:u3riX6BoYRfF4Dr7dwSOroNfdSbEPe9Yyl09/B6wBrQ= +github.com/envoyproxy/go-control-plane/envoy v1.37.0/go.mod h1:DReE9MMrmecPy+YvQOAOHNYMALuowAnbjjEMkkWOi6A= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMDjpqGAGacLe2T0ds= +github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0= +github.com/ethereum/go-ethereum v1.17.2 h1:ag6geu0kn8Hv5FLKTpH+Hm2DHD+iuFtuqKxEuwUsDOI= +github.com/ethereum/go-ethereum v1.17.2/go.mod h1:KHcRXfGOUfUmKg51IhQ0IowiqZ6PqZf08CMtk0g5K1o= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/flynn/noise v1.1.0 h1:KjPQoQCEFdZDiP03phOvGi11+SVVhBG2wOWAorLsstg= +github.com/flynn/noise v1.1.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= +github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/gagliardetto/binary v0.8.0 h1:U9ahc45v9HW0d15LoN++vIXSJyqR/pWw8DDlhd7zvxg= +github.com/gagliardetto/binary v0.8.0/go.mod h1:2tfj51g5o9dnvsc+fL3Jxr22MuWzYXwx9wEoN0XQ7/c= +github.com/gagliardetto/solana-go v1.19.0 h1:m3fPxI7/+VpE6WgOzwmRBY9t4QY6ljvpJLhwWaJVOE8= +github.com/gagliardetto/solana-go v1.19.0/go.mod h1:M88UnNo9tGt64VizMeR1+jZuyrFF8vho9ZOCtYKPXxQ= +github.com/gagliardetto/treeout v0.1.4 h1:ozeYerrLCmCubo1TcIjFiOWTTGteOOHND1twdFpgwaw= +github.com/gagliardetto/treeout v0.1.4/go.mod h1:loUefvXTrlRG5rYmJmExNryyBRh8f89VZhmMOyCyqok= +github.com/getsentry/sentry-go v0.44.1 h1:/cPtrA5qB7uMRrhgSn9TYtcEF36auGP3Y6+ThvD/yaI= +github.com/getsentry/sentry-go v0.44.1/go.mod h1:XDotiNZbgf5U8bPDUAfvcFmOnMQQceESxyKaObSssW0= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= +github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= +github.com/go-kit/kit v0.13.0 h1:OoneCcHKHQ03LfBpoQCUfCluwd2Vt3ohz+kvbJneZAU= +github.com/go-kit/kit v0.13.0/go.mod h1:phqEHMMUbyrCFCTgH48JueqrM3md2HcAZ8N3XE4FKDg= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.6.1 h1:4hvbpePJKnIzH1B+8OR/JPbTx37NktoI9LE2QZBBkvE= +github.com/go-logfmt/logfmt v0.6.1/go.mod h1:EV2pOAQoZaT1ZXZbqDl5hrymndi4SY9ED9/z6CO0XAk= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= +github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro= +github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= +github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/goccy/go-json v0.10.6 h1:p8HrPJzOakx/mn/bQtjgNjdTcN+/S6FcG2CTtQOrHVU= +github.com/goccy/go-json v0.10.6/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= +github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= +github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= +github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= +github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= +github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= +github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/flatbuffers v25.2.10+incompatible h1:F3vclr7C3HpB1k9mxCGRMXq6FdUalZ6H/pNX4FP1v0Q= +github.com/google/flatbuffers v25.2.10+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= +github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= +github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/enterprise-certificate-proxy v0.3.14 h1:yh8ncqsbUY4shRD5dA6RlzjJaT4hi3kII+zYw8wmLb8= +github.com/googleapis/enterprise-certificate-proxy v0.3.14/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= +github.com/googleapis/gax-go/v2 v2.22.0 h1:PjIWBpgGIVKGoCXuiCoP64altEJCj3/Ei+kSU5vlZD4= +github.com/googleapis/gax-go/v2 v2.22.0/go.mod h1:irWBbALSr0Sk3qlqb9SyJ1h68WjgeFuiOzI4Rqw5+aY= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= +github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= +github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= +github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= +github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= +github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72 h1:vTCWu1wbdYo7PEZFem/rlr01+Un+wwVmI7wiegFdRLk= +github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72/go.mod h1:Vn+BBgKQHVQYdVQ4NZDICE1Brb+JfaONyDHr3q07oQc= +github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= +github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-getter v1.8.6 h1:9sQboWULaydVphxc4S64oAI4YqpuCk7nPmvbk131ebY= +github.com/hashicorp/go-getter v1.8.6/go.mod h1:nVH12eOV2P58dIiL3rsU6Fh3wLeJEKBOJzhMmzlSWoo= +github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= +github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= +github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-metrics v0.5.4 h1:8mmPiIJkTPPEbAiV97IxdAGNdRdaWwVap1BU6elejKY= +github.com/hashicorp/go-metrics v0.5.4/go.mod h1:CG5yz4NZ/AI/aQt9Ucm/vdBnbh7fvmv4lxZ350i+QQI= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-plugin v1.7.0 h1:YghfQH/0QmPNc/AZMTFE3ac8fipZyZECHdDPshfk+mA= +github.com/hashicorp/go-plugin v1.7.0/go.mod h1:BExt6KEaIYx804z8k4gRzRLEvxKVb+kn0NMcihqOqb8= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.9.0 h1:CeOIz6k+LoN3qX9Z0tyQrPtiB1DFYRPfCIBtaXPSCnA= +github.com/hashicorp/go-version v1.9.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= +github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8= +github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns= +github.com/hdevalence/ed25519consensus v0.2.0 h1:37ICyZqdyj0lAZ8P4D1d1id3HqbbG1N3iBb1Tb4rdcU= +github.com/hdevalence/ed25519consensus v0.2.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= +github.com/holiman/uint256 v1.3.2 h1:a9EgMPSC1AAaj1SZL5zIQD3WbwTuHrMGOerLjGmM/TA= +github.com/holiman/uint256 v1.3.2/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= +github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= +github.com/huandu/skiplist v1.2.1 h1:dTi93MgjwErA/8idWTzIw4Y1kZsMWx35fmI2c8Rij7w= +github.com/huandu/skiplist v1.2.1/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= +github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= +github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= +github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= +github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/ipfs/go-cid v0.5.0 h1:goEKKhaGm0ul11IHA7I6p1GmKz8kEYniqFopaB5Otwg= +github.com/ipfs/go-cid v0.5.0/go.mod h1:0L7vmeNXpQpUS9vt+yEARkJ8rOg43DF3iPgn4GIN0mk= +github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= +github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= +github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= +github.com/jhump/protoreflect v1.18.0 h1:TOz0MSR/0JOZ5kECB/0ufGnC2jdsgZ123Rd/k4Z5/2w= +github.com/jhump/protoreflect v1.18.0/go.mod h1:ezWcltJIVF4zYdIFM+D/sHV4Oh5LNU08ORzCGfwvTz8= +github.com/jhump/protoreflect/v2 v2.0.0-beta.1 h1:Dw1rslK/VotaUGYsv53XVWITr+5RCPXfvvlGrM/+B6w= +github.com/jhump/protoreflect/v2 v2.0.0-beta.1/go.mod h1:D9LBEowZyv8/iSu97FU2zmXG3JxVTmNw21mu63niFzU= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= +github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE= +github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= +github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= +github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/koron/go-ssdp v0.0.6 h1:Jb0h04599eq/CY7rB5YEqPS83HmRfHP2azkxMN2rFtU= +github.com/koron/go-ssdp v0.0.6/go.mod h1:0R9LfRJGek1zWTjN3JUNlm5INCDYGpRDfAptnct63fI= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/lib/pq v1.11.2 h1:x6gxUeu39V0BHZiugWe8LXZYZ+Utk7hSJGThs8sdzfs= +github.com/lib/pq v1.11.2/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA= +github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= +github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= +github.com/libp2p/go-flow-metrics v0.2.0 h1:EIZzjmeOE6c8Dav0sNv35vhZxATIXWZg6j/C08XmmDw= +github.com/libp2p/go-flow-metrics v0.2.0/go.mod h1:st3qqfu8+pMfh+9Mzqb2GTiwrAGjIPszEjZmtksN8Jc= +github.com/libp2p/go-libp2p v0.47.0 h1:qQpBjSCWNQFF0hjBbKirMXE9RHLtSuzTDkTfr1rw0yc= +github.com/libp2p/go-libp2p v0.47.0/go.mod h1:s8HPh7mMV933OtXzONaGFseCg/BE//m1V34p3x4EUOY= +github.com/libp2p/go-libp2p-asn-util v0.4.1 h1:xqL7++IKD9TBFMgnLPZR6/6iYhawHKHl950SO9L6n94= +github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8= +github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA= +github.com/libp2p/go-libp2p-testing v0.12.0/go.mod h1:KcGDRXyN7sQCllucn1cOOS+Dmm7ujhfEyXQL5lvkcPg= +github.com/libp2p/go-msgio v0.3.0 h1:mf3Z8B1xcFN314sWX+2vOTShIE0Mmn2TXn3YCUQGNj0= +github.com/libp2p/go-msgio v0.3.0/go.mod h1:nyRM819GmVaF9LX3l03RMh10QdOroF++NBbxAb0mmDM= +github.com/libp2p/go-netroute v0.3.0 h1:nqPCXHmeNmgTJnktosJ/sIef9hvwYCrsLxXmfNks/oc= +github.com/libp2p/go-netroute v0.3.0/go.mod h1:Nkd5ShYgSMS5MUKy/MU2T57xFoOKvvLR92Lic48LEyA= +github.com/libp2p/go-reuseport v0.4.0 h1:nR5KU7hD0WxXCJbmw7r2rhRYruNRl2koHw8fQscQm2s= +github.com/libp2p/go-reuseport v0.4.0/go.mod h1:ZtI03j/wO5hZVDFo2jKywN6bYKWLOy8Se6DrI2E1cLU= +github.com/libp2p/go-yamux/v5 v5.0.1 h1:f0WoX/bEF2E8SbE4c/k1Mo+/9z0O4oC/hWEA+nfYRSg= +github.com/libp2p/go-yamux/v5 v5.0.1/go.mod h1:en+3cdX51U0ZslwRdRLrvQsdayFt3TSUKvBGErzpWbU= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= +github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/linxGnu/grocksdb v1.10.7 h1:fCi4qvZWo04VgFwGWmO8HQJgUVounJBy+C2TMVPU/ho= +github.com/linxGnu/grocksdb v1.10.7/go.mod h1:OLQKZwiKwaJiAVCsOzWKvwiLwfZ5Vz8Md5TYR7t7pM8= +github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= +github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= +github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88 h1:PTw+yKnXcOFCR6+8hHTyWBeQ/P4Nb7dd4/0ohEcWQuM= +github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE= +github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= +github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= +github.com/marcopolo/simnet v0.0.4 h1:50Kx4hS9kFGSRIbrt9xUS3NJX33EyPqHVmpXvaKLqrY= +github.com/marcopolo/simnet v0.0.4/go.mod h1:tfQF1u2DmaB6WHODMtQaLtClEf3a296CKQLq5gAsIS0= +github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= +github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.21 h1:xYae+lCNBP7QuW4PUnNG61ffM4hVIfm+zUzDuSzYLGs= +github.com/mattn/go-isatty v0.0.21/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.66 h1:FeZXOS3VCVsKnEAd+wBkjMC3D2K+ww66Cq3VnCINuJE= +github.com/miekg/dns v1.1.66/go.mod h1:jGFzBsSNbJw6z1HYut1RKBKHA9PBdxeHrZG8J+gC2WE= +github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8= +github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= +github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= +github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= +github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= +github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= +github.com/minio/highwayhash v1.0.4 h1:asJizugGgchQod2ja9NJlGOWq4s7KsAWr5XUc9Clgl4= +github.com/minio/highwayhash v1.0.4/go.mod h1:GGYsuwP/fPD6Y9hMiXuapVvlIUEhFhMTh0rxU3ik1LQ= +github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= +github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= +github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= +github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/moby/sys/user v0.4.0 h1:jhcMKit7SA80hivmFJcbB1vqmw//wU61Zdui2eQXuMs= +github.com/moby/sys/user v0.4.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1 h1:mPMvm6X6tf4w8y7j9YIt6V9jfWhL6QlbEc7CCmeQlWk= +github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1/go.mod h1:ye2e/VUEtE2BHE+G/QcKkcLQVAEJoYRFj5VUOQatCRE= +github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= +github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mschoch/smat v0.2.0 h1:8imxQsjDm8yFEAVBe7azKmKSgzSkZXDuKkSq9374khM= +github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw= +github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= +github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= +github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= +github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI= +github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= +github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= +github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= +github.com/multiformats/go-multiaddr v0.16.1 h1:fgJ0Pitow+wWXzN9do+1b8Pyjmo8m5WhGfzpL82MpCw= +github.com/multiformats/go-multiaddr v0.16.1/go.mod h1:JSVUmXDjsVFiW7RjIFMP7+Ev+h1DTbiJgVeTV/tcmP0= +github.com/multiformats/go-multiaddr-dns v0.4.1 h1:whi/uCLbDS3mSEUMb1MsoT4uzUeZB0N32yzufqS0i5M= +github.com/multiformats/go-multiaddr-dns v0.4.1/go.mod h1:7hfthtB4E4pQwirrz+J0CcDUfbWzTqEzVyYKKIKpgkc= +github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= +github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= +github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= +github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk= +github.com/multiformats/go-multicodec v0.9.1 h1:x/Fuxr7ZuR4jJV4Os5g444F7xC4XmyUaT/FWtE+9Zjo= +github.com/multiformats/go-multicodec v0.9.1/go.mod h1:LLWNMtyV5ithSBUo3vFIMaeDy+h3EbkMTek1m+Fybbo= +github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= +github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U= +github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM= +github.com/multiformats/go-multistream v0.6.1 h1:4aoX5v6T+yWmc2raBHsTvzmFhOI8WVOer28DeBBEYdQ= +github.com/multiformats/go-multistream v0.6.1/go.mod h1:ksQf6kqHAb6zIsyw7Zm+gAuVo57Qbq84E27YlYqavqw= +github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= +github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oasisprotocol/curve25519-voi v0.0.0-20251114093237-2ab5a27a1729 h1:yfQ2sO9WJXUAIUR+g7NUkxJSKCAFJcR5sUDu+ZmjTZI= +github.com/oasisprotocol/curve25519-voi v0.0.0-20251114093237-2ab5a27a1729/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s= +github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/run v1.2.0 h1:O8x3yXwah4A73hJdlrwo/2X6J62gE5qTMusH0dvz60E= +github.com/oklog/run v1.2.0/go.mod h1:mgDbKRSwPhJfesJ4PntqFUbKQRZ50NgmZTSPlFA0YFk= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= +github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= +github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= +github.com/opencontainers/runc v1.2.8 h1:RnEICeDReapbZ5lZEgHvj7E9Q3Eex9toYmaGBsbvU5Q= +github.com/opencontainers/runc v1.2.8/go.mod h1:cC0YkmZcuvr+rtBZ6T7NBoVbMGNAdLa/21vIElJDOzI= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= +github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= +github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= +github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/petermattis/goid v0.0.0-20250813065127-a731cc31b4fe/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/petermattis/goid v0.0.0-20260113132338-7c7de50cc741 h1:KPpdlQLZcHfTMQRi6bFQ7ogNO0ltFT4PmtwTLW4W+14= +github.com/petermattis/goid v0.0.0-20260113132338-7c7de50cc741/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +github.com/pion/datachannel v1.5.10 h1:ly0Q26K1i6ZkGf42W7D4hQYR90pZwzFOjTq5AuCKk4o= +github.com/pion/datachannel v1.5.10/go.mod h1:p/jJfC9arb29W7WrxyKbepTU20CFgyx5oLo8Rs4Py/M= +github.com/pion/dtls/v2 v2.2.7/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s= +github.com/pion/dtls/v2 v2.2.12 h1:KP7H5/c1EiVAAKUmXyCzPiQe5+bCJrpOeKg/L05dunk= +github.com/pion/dtls/v2 v2.2.12/go.mod h1:d9SYc9fch0CqK90mRk1dC7AkzzpwJj6u2GU3u+9pqFE= +github.com/pion/dtls/v3 v3.1.2 h1:gqEdOUXLtCGW+afsBLO0LtDD8GnuBBjEy6HRtyofZTc= +github.com/pion/dtls/v3 v3.1.2/go.mod h1:Hw/igcX4pdY69z1Hgv5x7wJFrUkdgHwAn/Q/uo7YHRo= +github.com/pion/ice/v4 v4.0.10 h1:P59w1iauC/wPk9PdY8Vjl4fOFL5B+USq1+xbDcN6gT4= +github.com/pion/ice/v4 v4.0.10/go.mod h1:y3M18aPhIxLlcO/4dn9X8LzLLSma84cx6emMSu14FGw= +github.com/pion/interceptor v0.1.40 h1:e0BjnPcGpr2CFQgKhrQisBU7V3GXK6wrfYrGYaU6Jq4= +github.com/pion/interceptor v0.1.40/go.mod h1:Z6kqH7M/FYirg3frjGJ21VLSRJGBXB/KqaTIrdqnOic= +github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= +github.com/pion/logging v0.2.4 h1:tTew+7cmQ+Mc1pTBLKH2puKsOvhm32dROumOZ655zB8= +github.com/pion/logging v0.2.4/go.mod h1:DffhXTKYdNZU+KtJ5pyQDjvOAh/GsNSyv1lbkFbe3so= +github.com/pion/mdns/v2 v2.0.7 h1:c9kM8ewCgjslaAmicYMFQIde2H9/lrZpjBkN8VwoVtM= +github.com/pion/mdns/v2 v2.0.7/go.mod h1:vAdSYNAT0Jy3Ru0zl2YiW3Rm/fJCwIeM0nToenfOJKA= +github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= +github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= +github.com/pion/rtcp v1.2.15 h1:LZQi2JbdipLOj4eBjK4wlVoQWfrZbh3Q6eHtWtJBZBo= +github.com/pion/rtcp v1.2.15/go.mod h1:jlGuAjHMEXwMUHK78RgX0UmEJFV4zUKOFHR7OP+D3D0= +github.com/pion/rtp v1.8.19 h1:jhdO/3XhL/aKm/wARFVmvTfq0lC/CvN1xwYKmduly3c= +github.com/pion/rtp v1.8.19/go.mod h1:bAu2UFKScgzyFqvUKmbvzSdPr+NGbZtv6UB2hesqXBk= +github.com/pion/sctp v1.8.39 h1:PJma40vRHa3UTO3C4MyeJDQ+KIobVYRZQZ0Nt7SjQnE= +github.com/pion/sctp v1.8.39/go.mod h1:cNiLdchXra8fHQwmIoqw0MbLLMs+f7uQ+dGMG2gWebE= +github.com/pion/sdp/v3 v3.0.13 h1:uN3SS2b+QDZnWXgdr69SM8KB4EbcnPnPf2Laxhty/l4= +github.com/pion/sdp/v3 v3.0.13/go.mod h1:88GMahN5xnScv1hIMTqLdu/cOcUkj6a9ytbncwMCq2E= +github.com/pion/srtp/v3 v3.0.6 h1:E2gyj1f5X10sB/qILUGIkL4C2CqK269Xq167PbGCc/4= +github.com/pion/srtp/v3 v3.0.6/go.mod h1:BxvziG3v/armJHAaJ87euvkhHqWe9I7iiOy50K2QkhY= +github.com/pion/stun v0.6.1 h1:8lp6YejULeHBF8NmV8e2787BogQhduZugh5PdhDyyN4= +github.com/pion/stun v0.6.1/go.mod h1:/hO7APkX4hZKu/D0f2lHzNyvdkTGtIy3NDmLR7kSz/8= +github.com/pion/stun/v3 v3.0.0 h1:4h1gwhWLWuZWOJIJR9s2ferRO+W3zA/b6ijOI6mKzUw= +github.com/pion/stun/v3 v3.0.0/go.mod h1:HvCN8txt8mwi4FBvS3EmDghW6aQJ24T+y+1TKjB5jyU= +github.com/pion/transport/v2 v2.2.1/go.mod h1:cXXWavvCnFF6McHTft3DWS9iic2Mftcz1Aq29pGcU5g= +github.com/pion/transport/v2 v2.2.4/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= +github.com/pion/transport/v2 v2.2.10 h1:ucLBLE8nuxiHfvkFKnkDQRYWYfp8ejf4YBOPfaQpw6Q= +github.com/pion/transport/v2 v2.2.10/go.mod h1:sq1kSLWs+cHW9E+2fJP95QudkzbK7wscs8yYgQToO5E= +github.com/pion/transport/v3 v3.0.7 h1:iRbMH05BzSNwhILHoBoAPxoB9xQgOaJk+591KC9P1o0= +github.com/pion/transport/v3 v3.0.7/go.mod h1:YleKiTZ4vqNxVwh77Z0zytYi7rXHl7j6uPLGhhz9rwo= +github.com/pion/transport/v4 v4.0.1 h1:sdROELU6BZ63Ab7FrOLn13M6YdJLY20wldXW2Cu2k8o= +github.com/pion/transport/v4 v4.0.1/go.mod h1:nEuEA4AD5lPdcIegQDpVLgNoDGreqM/YqmEx3ovP4jM= +github.com/pion/turn/v4 v4.0.2 h1:ZqgQ3+MjP32ug30xAbD6Mn+/K4Sxi3SdNOTFf+7mpps= +github.com/pion/turn/v4 v4.0.2/go.mod h1:pMMKP/ieNAG/fN5cZiN4SDuyKsXtNTr0ccN7IToA1zs= +github.com/pion/webrtc/v4 v4.1.2 h1:mpuUo/EJ1zMNKGE79fAdYNFZBX790KE7kQQpLMjjR54= +github.com/pion/webrtc/v4 v4.1.2/go.mod h1:xsCXiNAmMEjIdFxAYU0MbB3RwRieJsegSB2JZsGN+8U= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= +github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= +github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= +github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.67.5 h1:pIgK94WWlQt1WLwAC5j2ynLaBRDiinoAb86HZHTUGI4= +github.com/prometheus/common v0.67.5/go.mod h1:SjE/0MzDEEAyrdr5Gqc6G+sXI67maCxzaT3A2+HqjUw= +github.com/prometheus/otlptranslator v1.0.0 h1:s0LJW/iN9dkIH+EnhiD3BlkkP5QVIUVEoIwkU+A6qos= +github.com/prometheus/otlptranslator v1.0.0/go.mod h1:vRYWnXvI6aWGpsdY/mOT/cbeVRBlPWtBNDb7kGR3uKM= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.20.1 h1:XwbrGOIplXW/AU3YhIhLODXMJYyC1isLFfYCsTEycfc= +github.com/prometheus/procfs v0.20.1/go.mod h1:o9EMBZGRyvDrSPH1RqdxhojkuXstoe4UlK79eF5TGGo= +github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8= +github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII= +github.com/quic-go/quic-go v0.59.0 h1:OLJkp1Mlm/aS7dpKgTc6cnpynnD2Xg7C1pwL6vy/SAw= +github.com/quic-go/quic-go v0.59.0/go.mod h1:upnsH4Ju1YkqpLXC305eW3yDZ4NfnNbmQRCMWS58IKU= +github.com/quic-go/webtransport-go v0.10.0 h1:LqXXPOXuETY5Xe8ITdGisBzTYmUOy5eSj+9n4hLTjHI= +github.com/quic-go/webtransport-go v0.10.0/go.mod h1:LeGIXr5BQKE3UsynwVBeQrU1TPrbh73MGoC6jd+V7ow= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9 h1:bsUq1dX0N8AOIL7EB/X911+m4EHsnWEHeJ0c+3TTBrg= +github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= +github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= +github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/zerolog v1.35.0 h1:VD0ykx7HMiMJytqINBsKcbLS+BJ4WYjz+05us+LRTdI= +github.com/rs/zerolog v1.35.0/go.mod h1:EjML9kdfa/RMA7h/6z6pYmq1ykOuA8/mjWaEvGI+jcw= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc= +github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik= +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sasha-s/go-deadlock v0.3.7 h1:i3KnHMAptD/cZ8JmDXQnD44luuRbOn+CFeXGnLnf+YU= +github.com/sasha-s/go-deadlock v0.3.7/go.mod h1:KuZj51ZFmx42q/mPaYbRk0P1xcwe697zsJKE03vD4/Y= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/shirou/gopsutil/v4 v4.26.3 h1:2ESdQt90yU3oXF/CdOlRCJxrP+Am1aBYubTMTfxJ1qc= +github.com/shirou/gopsutil/v4 v4.26.3/go.mod h1:LZ6ewCSkBqUpvSOf+LsTGnRinC6iaNUNMGBtDkJBaLQ= +github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= +github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw= +github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U= +github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= +github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= +github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= +github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= +github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= +github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= +github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU= +github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY= +github.com/spiffe/go-spiffe/v2 v2.6.0 h1:l+DolpxNWYgruGQVV0xsfeya3CsC7m8iBzDnMpsbLuo= +github.com/spiffe/go-spiffe/v2 v2.6.0/go.mod h1:gm2SeUoMZEtpnzPNs2Csc0D/gX33k1xIx7lEzqblHEs= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091/go.mod h1:VlduQ80JcGJSargkRU4Sg9Xo63wZD/l8A5NC/Uo1/uU= +github.com/streamingfast/logging v0.0.0-20250404134358-92b15d2fbd2e h1:qGVGDR2/bXLyR498un1hvhDQPUJ/m14JBRTJz+c67Bc= +github.com/streamingfast/logging v0.0.0-20250404134358-92b15d2fbd2e/go.mod h1:VlduQ80JcGJSargkRU4Sg9Xo63wZD/l8A5NC/Uo1/uU= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= +github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/supranational/blst v0.3.16 h1:bTDadT+3fK497EvLdWRQEjiGnUtzJ7jjIUMF0jqwYhE= +github.com/supranational/blst v0.3.16/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= +github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= +github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= +github.com/test-go/testify v1.1.4 h1:Tf9lntrKUMHiXQ07qBScBTSA0dhYQlu83hswqelv1iE= +github.com/test-go/testify v1.1.4/go.mod h1:rH7cfJo/47vWGdi4GPj16x3/t1xGOj2YxzmNQzk2ghU= +github.com/tidwall/btree v1.8.1 h1:27ehoXvm5AG/g+1VxLS1SD3vRhp/H7LuEfwNvddEdmA= +github.com/tidwall/btree v1.8.1/go.mod h1:jBbTdUWhSZClZWoDg54VnvV7/54modSOzDN7VXftj1A= +github.com/tklauser/go-sysconf v0.3.16 h1:frioLaCQSsF5Cy1jgRBrzr6t502KIIwQ0MArYICU0nA= +github.com/tklauser/go-sysconf v0.3.16/go.mod h1:/qNL9xxDhc7tx3HSRsLWNnuzbVfh3e7gh/BmM179nYI= +github.com/tklauser/numcpus v0.11.0 h1:nSTwhKH5e1dMNsCdVBukSZrURJRoHbSEQjdEbY+9RXw= +github.com/tklauser/numcpus v0.11.0/go.mod h1:z+LwcLq54uWZTX0u/bGobaV34u6V7KNlTZejzM6/3MQ= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY= +github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/wlynxg/anet v0.0.3/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= +github.com/wlynxg/anet v0.0.5 h1:J3VJGi1gvo0JwZ/P1/Yc/8p63SoW98B5dHkYDmpgvvU= +github.com/wlynxg/anet v0.0.5/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= +github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +github.com/zondax/golem v0.27.0 h1:IbBjGIXF3SoGOZHsILJvIM/F/ylwJzMcHAcggiqniPw= +github.com/zondax/golem v0.27.0/go.mod h1:AmorCgJPt00L8xN1VrMBe13PSifoZksnQ1Ge906bu4A= +github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= +github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +github.com/zondax/ledger-go v1.0.1 h1:Ks/2tz/dOF+dbRynfZ0dEhcdL1lqw43Sa0zMXHpQ3aQ= +github.com/zondax/ledger-go v1.0.1/go.mod h1:j7IgMY39f30apthJYMd1YsHZRqdyu4KbVmUp0nU78X0= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.4.3 h1:dEadXpI6G79deX5prL3QRNP6JB8UxVkqo4UPnHaNXJo= +go.etcd.io/bbolt v1.4.3/go.mod h1:tKQlpPaYCVFctUIgFKFnAlvbmB3tpy1vkTnDWohtc0E= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.mongodb.org/mongo-driver/v2 v2.5.0 h1:yXUhImUjjAInNcpTcAlPHiT7bIXhshCTL3jVBkF3xaE= +go.mongodb.org/mongo-driver/v2 v2.5.0/go.mod h1:yOI9kBsufol30iFsl1slpdq1I0eHPzybRWdyYUs8K/0= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= +go.opentelemetry.io/contrib/bridges/otelslog v0.17.0 h1:NFIS6x7wyObQ7cR84x7bt1sr8nYBx89s3x3GwRjw40k= +go.opentelemetry.io/contrib/bridges/otelslog v0.17.0/go.mod h1:39SaByOyDMRMe872AE7uelMuQZidIw7LLFAnQi0FWTE= +go.opentelemetry.io/contrib/detectors/gcp v1.43.0 h1:62yY3dT7/ShwOxzA0RsKRgshBmfElKI4d/Myu2OxDFU= +go.opentelemetry.io/contrib/detectors/gcp v1.43.0/go.mod h1:RyaZMFY7yi1kAs45S6mbFGz8O8rqB0dTY14uzvG4LCs= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 h1:0Qx7VGBacMm9ZENQ7TnNObTYI4ShC+lHI16seduaxZo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0/go.mod h1:Sje3i3MjSPKTSPvVWCaL8ugBzJwik3u4smCjUeuupqg= +go.opentelemetry.io/contrib/instrumentation/host v0.67.0 h1:TBZlpWERGQYejjjxOCaul34rx1gM8Dc3erQH3DDe1ng= +go.opentelemetry.io/contrib/instrumentation/host v0.67.0/go.mod h1:gY4HjuF4CJmklxYjdJNH3wxBlAehJfX/g/vQo+kL0TU= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 h1:CqXxU8VOmDefoh0+ztfGaymYbhdB/tT3zs79QaZTNGY= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0/go.mod h1:BuhAPThV8PBHBvg8ZzZ/Ok3idOdhWIodywz2xEcRbJo= +go.opentelemetry.io/contrib/instrumentation/runtime v0.67.0 h1:fM78cKITJ2r08cl+nw5i+hI9zWAu3iak8o1Os/ca2Ck= +go.opentelemetry.io/contrib/instrumentation/runtime v0.67.0/go.mod h1:ybmlzIqGcQzwt5lAfi8TpSnHo/CI3yv1Czodmm+OJa8= +go.opentelemetry.io/contrib/otelconf v0.22.0 h1:+kpcfczGOFM85zDZyqQCzWefhovegfn24D0WwmQz0n4= +go.opentelemetry.io/contrib/otelconf v0.22.0/go.mod h1:ojdbOukO+JRDJQmJY2PRIZEg0UYVzcOuZR59hp7xffc= +go.opentelemetry.io/contrib/propagators/autoprop v0.67.0 h1:XhcQRf4MeqwQw96FcnatDAj6gwE19SUrWZ1VwNg77iE= +go.opentelemetry.io/contrib/propagators/autoprop v0.67.0/go.mod h1:7OK06SuNIBIlc5Uq3JGQEsKHuXw29t9OJemvDYyP1dk= +go.opentelemetry.io/contrib/propagators/aws v1.42.0 h1:Kbr3xDxs6kcxp5ThXTKWK2OtwLhNoXBVtqguNYcsZL0= +go.opentelemetry.io/contrib/propagators/aws v1.42.0/go.mod h1:Jzw9hZHtxdpCN7x8S17UH59X/EiFivp6VXLs9bdM1OQ= +go.opentelemetry.io/contrib/propagators/b3 v1.42.0 h1:B2Pew5ufEtgkjLF+tSkXjgYZXQr9m7aCm1wLKB0URbU= +go.opentelemetry.io/contrib/propagators/b3 v1.42.0/go.mod h1:iPgUcSEF5DORW6+yNbdw/YevUy+QqJ508ncjhrRSCjc= +go.opentelemetry.io/contrib/propagators/jaeger v1.42.0 h1:jP8unWI6q5kcb3gpGLjKDGaUa+JW+nHKWvpS/q+YuWA= +go.opentelemetry.io/contrib/propagators/jaeger v1.42.0/go.mod h1:xd89e/pUyPatUP1C4z1UknD9jHptESO99tWyvd4mWD4= +go.opentelemetry.io/contrib/propagators/ot v1.42.0 h1:uQjD1NNqX1+DfcAoWParPt1egNg9vC9gH4xarJ9Khxo= +go.opentelemetry.io/contrib/propagators/ot v1.42.0/go.mod h1:yw/c2TCmQLIv109HBOCn6NlJ8Dp7MNfjMcqQZRnAMmg= +go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= +go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.18.0 h1:deI9UQMoGFgrg5iLPgzueqFPHevDl+28YKfSpPTI6rY= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.18.0/go.mod h1:PFx9NgpNUKXdf7J4Q3agRxMs3Y07QhTCVipKmLsMKnU= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.18.0 h1:icqq3Z34UrEFk2u+HMhTtRsvo7Ues+eiJVjaJt62njs= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.18.0/go.mod h1:W2m8P+d5Wn5kipj4/xmbt9uMqezEKfBjzVJadfABSBE= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.42.0 h1:MdKucPl/HbzckWWEisiNqMPhRrAOQX8r4jTuGr636gk= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.42.0/go.mod h1:RolT8tWtfHcjajEH5wFIZ4Dgh5jpPdFXYV9pTAk/qjc= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.42.0 h1:H7O6RlGOMTizyl3R08Kn5pdM06bnH8oscSj7o11tmLA= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.42.0/go.mod h1:mBFWu/WOVDkWWsR7Tx7h6EpQB8wsv7P0Yrh0Pb7othc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 h1:THuZiwpQZuHPul65w4WcwEnkX2QIuMT+UFoOrygtoJw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0/go.mod h1:J2pvYM5NGHofZ2/Ru6zw/TNWnEQp5crgyDeSrYpXkAw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 h1:zWWrB1U6nqhS/k6zYB74CjRpuiitRtLLi68VcgmOEto= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0/go.mod h1:2qXPNBX1OVRC0IwOnfo1ljoid+RD0QK3443EaqVlsOU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.42.0 h1:uLXP+3mghfMf7XmV4PkGfFhFKuNWoCvvx5wP/wOXo0o= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.42.0/go.mod h1:v0Tj04armyT59mnURNUJf7RCKcKzq+lgJs6QSjHjaTc= +go.opentelemetry.io/otel/exporters/prometheus v0.64.0 h1:g0LRDXMX/G1SEZtK8zl8Chm4K6GBwRkjPKE36LxiTYs= +go.opentelemetry.io/otel/exporters/prometheus v0.64.0/go.mod h1:UrgcjnarfdlBDP3GjDIJWe6HTprwSazNjwsI+Ru6hro= +go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.18.0 h1:KJVjPD3rcPb98rIs3HznyJlrfx9ge5oJvxxlGR+P/7s= +go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.18.0/go.mod h1:K3kRa2ckmHWQaTWQdPRHc7qGXASuVuoEQXzrvlA98Ws= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0 h1:TC+BewnDpeiAmcscXbGMfxkO+mwYUwE/VySwvw88PfA= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0/go.mod h1:J/ZyF4vfPwsSr9xJSPyQ4LqtcTPULFR64KwTikGLe+A= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.42.0 h1:s/1iRkCKDfhlh1JF26knRneorus8aOwVIDhvYx9WoDw= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.42.0/go.mod h1:UI3wi0FXg1Pofb8ZBiBLhtMzgoTm1TYkMvn71fAqDzs= +go.opentelemetry.io/otel/log v0.19.0 h1:KUZs/GOsw79TBBMfDWsXS+KZ4g2Ckzksd1ymzsIEbo4= +go.opentelemetry.io/otel/log v0.19.0/go.mod h1:5DQYeGmxVIr4n0/BcJvF4upsraHjg6vudJJpnkL6Ipk= +go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= +go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= +go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= +go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= +go.opentelemetry.io/otel/sdk/log v0.18.0 h1:n8OyZr7t7otkeTnPTbDNom6rW16TBYGtvyy2Gk6buQw= +go.opentelemetry.io/otel/sdk/log v0.18.0/go.mod h1:C0+wxkTwKpOCZLrlJ3pewPiiQwpzycPI/u6W0Z9fuYk= +go.opentelemetry.io/otel/sdk/log/logtest v0.18.0 h1:l3mYuPsuBx6UKE47BVcPrZoZ0q/KER57vbj2qkgDLXA= +go.opentelemetry.io/otel/sdk/log/logtest v0.18.0/go.mod h1:7cHtiVJpZebB3wybTa4NG+FUo5NPe3PROz1FqB0+qdw= +go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= +go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= +go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= +go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= +go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/dig v1.19.0 h1:BACLhebsYdpQ7IROQ1AGPjrXcP5dF80U3gKoFzbaq/4= +go.uber.org/dig v1.19.0/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE= +go.uber.org/fx v1.24.0 h1:wE8mruvpg2kiiL1Vqd0CC+tr0/24XIB10Iwp2lLWzkg= +go.uber.org/fx v1.24.0/go.mod h1:AmDeGyS+ZARGKM4tlH4FY2Jr63VjbEDJHtqXTGP5hbo= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y= +go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc= +go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ= +go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ= +go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= +golang.org/x/arch v0.26.0 h1:jZ6dpec5haP/fUv1kLCbuJy6dnRrfX6iVK08lZBFpk4= +golang.org/x/arch v0.26.0/go.mod h1:0X+GdSIP+kL5wPmpK7sdkEVTt2XoYP0cSjQSbZBwOi8= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= +golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= +golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= +golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= +golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 h1:jiDhWWeC7jfWqR9c/uplMOqJ0sbNlNWv0UkzE0vX1MA= +golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90/go.mod h1:xE1HEv6b+1SCZ5/uscMRjUBKtIxworgEcEi+/n9NQDQ= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI= +golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= +golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= +golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= +golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/telemetry v0.0.0-20260311193753-579e4da9a98c h1:6a8FdnNk6bTXBjR4AGKFgUKuo+7GnR3FX5L7CbveeZc= +golang.org/x/telemetry v0.0.0-20260311193753-579e4da9a98c/go.mod h1:TpUTTEp9frx7rTdLpC9gFG9kdI7zVLFTFFlqaH2Cncw= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= +golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY= +golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= +golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= +golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= +golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= +gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +google.golang.org/api v0.276.0 h1:nVArUtfLEihtW+b0DdcqRGK1xoEm2+ltAihyztq7MKY= +google.golang.org/api v0.276.0/go.mod h1:Fnag/EWUPIcJXuIkP1pjoTgS5vdxlk3eeemL7Do6bvw= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20260414002931-afd174a4e478 h1:aLsVTW0lZ8+IY5u/ERjZSCvAmhuR7slKzyha3YikDNA= +google.golang.org/genproto v0.0.0-20260414002931-afd174a4e478/go.mod h1:YJAzKjfHIUHb9T+bfu8L7mthAp7VVXQBUs1PLdBWS7M= +google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4 h1:yOzSCGPx+cp5VO7IxvZ9SBFF7j1tZVcNtlHR2iYKtVo= +google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4/go.mod h1:Q9HWtNeE7tM9npdIsEvqXj1QJIvVoeAV3rtXtS715Cw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260420184626-e10c466a9529 h1:XF8+t6QQiS0o9ArVan/HW8Q7cycNPGsJf6GA2nXxYAg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260420184626-e10c466a9529/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.81.0 h1:W3G9N3KQf3BU+YuCtGKJk0CmxQNbAISICD/9AORxLIw= +google.golang.org/grpc v1.81.0/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= +gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +lukechampine.com/blake3 v1.4.1 h1:I3Smz7gso8w4/TunLKec6K2fn+kyKtDxr/xcQEN84Wg= +lukechampine.com/blake3 v1.4.1/go.mod h1:QFosUxmjB8mnrWFSNwKmvxHpfY72bmD2tQ0kBMM3kwo= +nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +nhooyr.io/websocket v1.8.17 h1:KEVeLJkUywCKVsnLIDlD/5gtayKp8VoCkksHCGGfT9Y= +nhooyr.io/websocket v1.8.17/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= +pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk= +pgregory.net/rapid v1.2.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs= +sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/prototypes/x/ift/keeper/callbacks.go b/prototypes/x/ift/keeper/callbacks.go index 644a1162018..f8da15bb04c 100644 --- a/prototypes/x/ift/keeper/callbacks.go +++ b/prototypes/x/ift/keeper/callbacks.go @@ -4,7 +4,7 @@ import ( "bytes" "strconv" - "github.com/cosmos/sandbox-ledger/x/ift/types" + "github.com/cosmos/ibc-go/prototypes/x/ift/types" "cosmossdk.io/collections" errorsmod "cosmossdk.io/errors" diff --git a/prototypes/x/ift/keeper/callbacks_test.go b/prototypes/x/ift/keeper/callbacks_test.go index e19fbfb2c08..ec638d6322b 100644 --- a/prototypes/x/ift/keeper/callbacks_test.go +++ b/prototypes/x/ift/keeper/callbacks_test.go @@ -4,7 +4,7 @@ import ( "errors" "testing" - "github.com/cosmos/sandbox-ledger/x/ift/types" + "github.com/cosmos/ibc-go/prototypes/x/ift/types" "github.com/stretchr/testify/require" "cosmossdk.io/collections" diff --git a/prototypes/x/ift/keeper/genesis.go b/prototypes/x/ift/keeper/genesis.go index a11423efba6..4f72aed54f0 100644 --- a/prototypes/x/ift/keeper/genesis.go +++ b/prototypes/x/ift/keeper/genesis.go @@ -3,7 +3,7 @@ package keeper import ( "context" - "github.com/cosmos/sandbox-ledger/x/ift/types" + "github.com/cosmos/ibc-go/prototypes/x/ift/types" "cosmossdk.io/collections" ) diff --git a/prototypes/x/ift/keeper/genesis_test.go b/prototypes/x/ift/keeper/genesis_test.go index caac0f96b53..413602f80f7 100644 --- a/prototypes/x/ift/keeper/genesis_test.go +++ b/prototypes/x/ift/keeper/genesis_test.go @@ -3,7 +3,7 @@ package keeper_test import ( "testing" - "github.com/cosmos/sandbox-ledger/x/ift/types" + "github.com/cosmos/ibc-go/prototypes/x/ift/types" "github.com/stretchr/testify/require" "cosmossdk.io/collections" diff --git a/prototypes/x/ift/keeper/keeper.go b/prototypes/x/ift/keeper/keeper.go index cc4e09b18e2..f9c7a07cc25 100644 --- a/prototypes/x/ift/keeper/keeper.go +++ b/prototypes/x/ift/keeper/keeper.go @@ -5,7 +5,7 @@ import ( "errors" "fmt" - "github.com/cosmos/sandbox-ledger/x/ift/types" + "github.com/cosmos/ibc-go/prototypes/x/ift/types" "cosmossdk.io/collections" "cosmossdk.io/core/address" diff --git a/prototypes/x/ift/keeper/keeper_test.go b/prototypes/x/ift/keeper/keeper_test.gooo similarity index 99% rename from prototypes/x/ift/keeper/keeper_test.go rename to prototypes/x/ift/keeper/keeper_test.gooo index d72afdcb9e2..e479c334088 100644 --- a/prototypes/x/ift/keeper/keeper_test.go +++ b/prototypes/x/ift/keeper/keeper_test.gooo @@ -6,9 +6,9 @@ import ( "time" dbm "github.com/cosmos/cosmos-db" + ifttypes "github.com/cosmos/ibc-go/prototypes/x/ift/types" "github.com/cosmos/sandbox-ledger/app" "github.com/cosmos/sandbox-ledger/testutil" - ifttypes "github.com/cosmos/sandbox-ledger/x/ift/types" ethcrypto "github.com/ethereum/go-ethereum/crypto" "github.com/stretchr/testify/require" diff --git a/prototypes/x/ift/keeper/msg_server.go b/prototypes/x/ift/keeper/msg_server.go index 4b4f0dae402..aa702753b05 100644 --- a/prototypes/x/ift/keeper/msg_server.go +++ b/prototypes/x/ift/keeper/msg_server.go @@ -5,7 +5,7 @@ import ( "strconv" "strings" - "github.com/cosmos/sandbox-ledger/x/ift/types" + "github.com/cosmos/ibc-go/prototypes/x/ift/types" "cosmossdk.io/collections" errorsmod "cosmossdk.io/errors" diff --git a/prototypes/x/ift/keeper/msg_server_test.go b/prototypes/x/ift/keeper/msg_server_test.gooo similarity index 99% rename from prototypes/x/ift/keeper/msg_server_test.go rename to prototypes/x/ift/keeper/msg_server_test.gooo index 7d99569e286..27c9fae6129 100644 --- a/prototypes/x/ift/keeper/msg_server_test.go +++ b/prototypes/x/ift/keeper/msg_server_test.gooo @@ -5,9 +5,9 @@ import ( "testing" "time" + "github.com/cosmos/ibc-go/prototypes/x/ift/keeper" + "github.com/cosmos/ibc-go/prototypes/x/ift/types" "github.com/cosmos/sandbox-ledger/app" - "github.com/cosmos/sandbox-ledger/x/ift/keeper" - "github.com/cosmos/sandbox-ledger/x/ift/types" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/crypto" "github.com/stretchr/testify/require" diff --git a/prototypes/x/ift/keeper/query.go b/prototypes/x/ift/keeper/query.go index 752ab84bd9f..4813cdcfeb9 100644 --- a/prototypes/x/ift/keeper/query.go +++ b/prototypes/x/ift/keeper/query.go @@ -3,7 +3,7 @@ package keeper import ( "context" - "github.com/cosmos/sandbox-ledger/x/ift/types" + "github.com/cosmos/ibc-go/prototypes/x/ift/types" "cosmossdk.io/collections" ) diff --git a/prototypes/x/ift/keeper/query_test.go b/prototypes/x/ift/keeper/query_test.go index 4dbb31d1401..b155e3aa4e3 100644 --- a/prototypes/x/ift/keeper/query_test.go +++ b/prototypes/x/ift/keeper/query_test.go @@ -3,7 +3,7 @@ package keeper_test import ( "testing" - "github.com/cosmos/sandbox-ledger/x/ift/types" + "github.com/cosmos/ibc-go/prototypes/x/ift/types" "github.com/stretchr/testify/require" "cosmossdk.io/collections" @@ -34,8 +34,6 @@ func TestQuery_IFTBridge(t *testing.T) { require.Equal(t, types.ConstructorEVM, resp.Bridge.IftSendCallConstructor) } - - func TestQuery_IFTBridges(t *testing.T) { wfapp, ctx := setupIntegrationApp(t) diff --git a/prototypes/x/ift/module.go b/prototypes/x/ift/module.go index f4633c6bffc..5333bb2a1b8 100644 --- a/prototypes/x/ift/module.go +++ b/prototypes/x/ift/module.go @@ -5,8 +5,8 @@ import ( "encoding/json" "fmt" - "github.com/cosmos/sandbox-ledger/x/ift/keeper" - "github.com/cosmos/sandbox-ledger/x/ift/types" + "github.com/cosmos/ibc-go/prototypes/x/ift/keeper" + "github.com/cosmos/ibc-go/prototypes/x/ift/types" "github.com/grpc-ecosystem/grpc-gateway/runtime" autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" diff --git a/prototypes/x/ift/module_test.go b/prototypes/x/ift/module_test.go index 18f799b0594..159d1cf5b92 100644 --- a/prototypes/x/ift/module_test.go +++ b/prototypes/x/ift/module_test.go @@ -3,8 +3,8 @@ package ift_test import ( "testing" - "github.com/cosmos/sandbox-ledger/x/ift" - "github.com/cosmos/sandbox-ledger/x/ift/types" + "github.com/cosmos/ibc-go/prototypes/x/ift" + "github.com/cosmos/ibc-go/prototypes/x/ift/types" "github.com/stretchr/testify/require" ) diff --git a/prototypes/x/ift/types/constructor_test.go b/prototypes/x/ift/types/constructor_test.go index 674db250af0..b49223e2e76 100644 --- a/prototypes/x/ift/types/constructor_test.go +++ b/prototypes/x/ift/types/constructor_test.go @@ -3,7 +3,7 @@ package types_test import ( "testing" - "github.com/cosmos/sandbox-ledger/x/ift/types" + "github.com/cosmos/ibc-go/prototypes/x/ift/types" "github.com/stretchr/testify/require" ) diff --git a/prototypes/x/ift/types/mint_call_test.go b/prototypes/x/ift/types/mint_call_test.go index 6138913f7a2..ccf28169205 100644 --- a/prototypes/x/ift/types/mint_call_test.go +++ b/prototypes/x/ift/types/mint_call_test.go @@ -6,8 +6,8 @@ import ( "testing" "github.com/cosmos/gogoproto/proto" + "github.com/cosmos/ibc-go/prototypes/x/ift/types" solanapb "github.com/cosmos/solidity-ibc-eureka/packages/go-proto/solana" - "github.com/cosmos/sandbox-ledger/x/ift/types" "github.com/ethereum/go-ethereum/crypto" "github.com/gagliardetto/solana-go" "github.com/stretchr/testify/require" diff --git a/prototypes/x/tokenfactory/cli/tx.go b/prototypes/x/tokenfactory/cli/tx.go index 1db3ef4aa54..5dd26629502 100644 --- a/prototypes/x/tokenfactory/cli/tx.go +++ b/prototypes/x/tokenfactory/cli/tx.go @@ -3,7 +3,7 @@ package cli import ( "fmt" - "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" "github.com/spf13/cobra" "github.com/cosmos/cosmos-sdk/client" diff --git a/prototypes/x/tokenfactory/go.mod b/prototypes/x/tokenfactory/go.mod new file mode 100644 index 00000000000..13e55541ceb --- /dev/null +++ b/prototypes/x/tokenfactory/go.mod @@ -0,0 +1,399 @@ +module github.com/cosmos/sandbox-ledger + +go 1.25.9 + +require ( + cosmossdk.io/api v1.0.0 + cosmossdk.io/client/v2 v2.11.0-rc.0 + cosmossdk.io/collections v1.4.0 + cosmossdk.io/core v1.1.0 + cosmossdk.io/errors v1.1.0 + cosmossdk.io/log/v2 v2.1.0 + cosmossdk.io/math v1.5.3 + cosmossdk.io/tools/confix v0.1.2 + github.com/cometbft/cometbft v0.39.1 + github.com/cosmos/cosmos-db v1.1.3 + github.com/cosmos/cosmos-proto v1.0.0-beta.5 + github.com/cosmos/cosmos-sdk v0.54.1-0.20260410193155-cbbc1d4f86b1 + github.com/cosmos/cosmos-sdk/enterprise/poa v0.0.0-20260410193155-cbbc1d4f86b1 + github.com/cosmos/cosmos-sdk/store/v2 v2.0.0 + github.com/cosmos/evm v0.5.0-rc.0.0.20260410210749-bbc4ca9b8c64 + github.com/cosmos/evm/evmd v0.0.0-20260410210749-bbc4ca9b8c64 + github.com/cosmos/gogoproto v1.7.2 + github.com/cosmos/ibc-go/v11 v11.0.0 + github.com/cosmos/solidity-ibc-eureka/packages/go-proto v0.0.0-20260403152650-2480eaf9d4a1 + github.com/ethereum/go-ethereum v1.16.8 + github.com/gagliardetto/binary v0.8.0 + github.com/gagliardetto/solana-go v1.14.0 + github.com/golang/protobuf v1.5.4 + github.com/grpc-ecosystem/grpc-gateway v1.16.0 + github.com/spf13/cast v1.10.0 + github.com/spf13/cobra v1.10.2 + github.com/spf13/viper v1.21.0 + github.com/stretchr/testify v1.11.1 + google.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171 + google.golang.org/grpc v1.80.0 + //github.com/cosmos/ibc-go/prototypes prototype-ift-tokenfactory +) + +require ( + cel.dev/expr v0.25.1 // indirect + cloud.google.com/go v0.123.0 // indirect + cloud.google.com/go/auth v0.18.2 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect + cloud.google.com/go/compute/metadata v0.9.0 // indirect + cloud.google.com/go/iam v1.5.3 // indirect + cloud.google.com/go/monitoring v1.24.3 // indirect + cloud.google.com/go/storage v1.60.0 // indirect + cosmossdk.io/depinject v1.2.1 // indirect + cosmossdk.io/schema v1.1.0 // indirect + filippo.io/edwards25519 v1.2.0 // indirect + github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect + github.com/99designs/keyring v1.2.2 // indirect + github.com/DataDog/datadog-go v4.8.3+incompatible // indirect + github.com/DataDog/zstd v1.5.7 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/RoaringBitmap/roaring/v2 v2.15.0 // indirect + github.com/VictoriaMetrics/fastcache v1.12.2 // indirect + github.com/aws/aws-sdk-go-v2 v1.41.1 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.4 // indirect + github.com/aws/aws-sdk-go-v2/config v1.32.9 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.19.9 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.17 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.17 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.17 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.17 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.8 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.17 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.17 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.96.0 // indirect + github.com/aws/aws-sdk-go-v2/service/signin v1.0.5 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.30.10 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.14 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.41.6 // indirect + github.com/aws/smithy-go v1.24.0 // indirect + github.com/benbjohnson/clock v1.3.5 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect + github.com/bgentry/speakeasy v0.2.0 // indirect + github.com/bits-and-blooms/bitset v1.24.4 // indirect + github.com/blendle/zapdriver v1.3.1 // indirect + github.com/btcsuite/btcd v0.24.2 // indirect + github.com/btcsuite/btcd/btcec/v2 v2.3.5 // indirect + github.com/btcsuite/btcd/btcutil v1.1.6 // indirect + github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect + github.com/bytedance/gopkg v0.1.4 // indirect + github.com/bytedance/sonic v1.15.0 // indirect + github.com/bytedance/sonic/loader v0.5.1 // indirect + github.com/cenkalti/backoff/v4 v4.3.0 // indirect + github.com/cenkalti/backoff/v5 v5.0.3 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/chzyer/readline v1.5.1 // indirect + github.com/cloudwego/base64x v0.1.6 // indirect + github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 // indirect + github.com/cockroachdb/errors v1.12.0 // indirect + github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0 // indirect + github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 // indirect + github.com/cockroachdb/pebble v1.1.5 // indirect + github.com/cockroachdb/redact v1.1.8 // indirect + github.com/cockroachdb/tokenbucket v0.0.0-20250429170803-42689b6311bb // indirect + github.com/cometbft/cometbft-db v1.0.4 // indirect + github.com/consensys/gnark-crypto v0.18.1 // indirect + github.com/cosmos/btcutil v1.0.5 // indirect + github.com/cosmos/btree v1.0.0 // indirect + github.com/cosmos/go-bip39 v1.0.0 // indirect + github.com/cosmos/gogogateway v1.2.0 // indirect + github.com/cosmos/iavl v1.2.8 // indirect + github.com/cosmos/ics23/go v0.11.0 // indirect + github.com/cosmos/ledger-cosmos-go v1.0.0 // indirect + github.com/crate-crypto/go-eth-kzg v1.3.0 // indirect + github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a // indirect + github.com/creachadair/atomicfile v0.3.8 // indirect + github.com/creachadair/tomledit v0.0.29 // indirect + github.com/danieljoos/wincred v1.2.3 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect + github.com/deckarep/golang-set/v2 v2.6.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 // indirect + github.com/desertbit/timer v1.0.1 // indirect + github.com/dgraph-io/badger/v4 v4.9.1 // indirect + github.com/dgraph-io/ristretto/v2 v2.4.0 // indirect + github.com/dlclark/regexp2 v1.7.0 // indirect + github.com/dop251/goja v0.0.0-20230605162241-28ee0ee714f3 // indirect + github.com/dunglas/httpsfv v1.1.0 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/dvsekhvalnov/jose2go v1.8.0 // indirect + github.com/ebitengine/purego v0.10.0 // indirect + github.com/emicklei/dot v1.11.0 // indirect + github.com/envoyproxy/go-control-plane/envoy v1.36.0 // indirect + github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect + github.com/ethereum/c-kzg-4844/v2 v2.1.0 // indirect + github.com/ethereum/go-verkle v0.2.2 // indirect + github.com/fatih/color v1.18.0 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/ferranbt/fastssz v0.1.4 // indirect + github.com/flynn/noise v1.1.0 // indirect + github.com/fsnotify/fsnotify v1.9.0 // indirect + github.com/gagliardetto/treeout v0.1.4 // indirect + github.com/gammazero/deque v1.2.0 // indirect + github.com/getsentry/sentry-go v0.44.1 // indirect + github.com/go-jose/go-jose/v4 v4.1.4 // indirect + github.com/go-kit/kit v0.13.0 // indirect + github.com/go-kit/log v0.2.1 // indirect + github.com/go-logfmt/logfmt v0.6.1 // indirect + github.com/go-logr/logr v1.4.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect + github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect + github.com/go-viper/mapstructure/v2 v2.5.0 // indirect + github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect + github.com/gofrs/flock v0.12.1 // indirect + github.com/gogo/googleapis v1.4.1 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/snappy v1.0.0 // indirect + github.com/google/btree v1.1.3 // indirect + github.com/google/flatbuffers v25.2.10+incompatible // indirect + github.com/google/go-cmp v0.7.0 // indirect + github.com/google/orderedcode v0.0.1 // indirect + github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 // indirect + github.com/google/s2a-go v0.1.9 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect + github.com/googleapis/gax-go/v2 v2.17.0 // indirect + github.com/gorilla/handlers v1.5.2 // indirect + github.com/gorilla/mux v1.8.1 // indirect + github.com/gorilla/websocket v1.5.3 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect + github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect + github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.70 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-getter v1.8.5 // indirect + github.com/hashicorp/go-hclog v1.6.3 // indirect + github.com/hashicorp/go-immutable-radix v1.3.1 // indirect + github.com/hashicorp/go-metrics v0.5.4 // indirect + github.com/hashicorp/go-plugin v1.7.0 // indirect + github.com/hashicorp/go-version v1.8.0 // indirect + github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect + github.com/hashicorp/yamux v0.1.2 // indirect + github.com/hdevalence/ed25519consensus v0.2.0 // indirect + github.com/holiman/bloomfilter/v2 v2.0.3 // indirect + github.com/holiman/uint256 v1.3.2 // indirect + github.com/huandu/skiplist v1.2.1 // indirect + github.com/huin/goupnp v1.3.0 // indirect + github.com/iancoleman/strcase v0.3.0 // indirect + github.com/improbable-eng/grpc-web v0.15.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/ipfs/go-cid v0.5.0 // indirect + github.com/jackpal/go-nat-pmp v1.0.2 // indirect + github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect + github.com/jmhodges/levigo v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/klauspost/compress v1.18.5 // indirect + github.com/klauspost/cpuid/v2 v2.3.0 // indirect + github.com/koron/go-ssdp v0.0.6 // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/kr/text v0.2.0 // indirect + github.com/lib/pq v1.11.2 // indirect + github.com/libp2p/go-buffer-pool v0.1.0 // indirect + github.com/libp2p/go-flow-metrics v0.2.0 // indirect + github.com/libp2p/go-libp2p v0.47.0 // indirect + github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect + github.com/libp2p/go-msgio v0.3.0 // indirect + github.com/libp2p/go-netroute v0.3.0 // indirect + github.com/libp2p/go-reuseport v0.4.0 // indirect + github.com/libp2p/go-yamux/v5 v5.0.1 // indirect + github.com/linxGnu/grocksdb v1.10.7 // indirect + github.com/logrusorgru/aurora v2.0.3+incompatible // indirect + github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88 // indirect + github.com/manifoldco/promptui v0.9.0 // indirect + github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect + github.com/mattn/go-colorable v0.1.14 // indirect + github.com/mattn/go-isatty v0.0.21 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/mdp/qrterminal/v3 v3.2.1 // indirect + github.com/miekg/dns v1.1.66 // indirect + github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect + github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect + github.com/minio/highwayhash v1.0.4 // indirect + github.com/minio/sha256-simd v1.0.1 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-testing-interface v1.14.1 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1 // indirect + github.com/mr-tron/base58 v1.2.0 // indirect + github.com/mschoch/smat v0.2.0 // indirect + github.com/mtibben/percent v0.2.1 // indirect + github.com/multiformats/go-base32 v0.1.0 // indirect + github.com/multiformats/go-base36 v0.2.0 // indirect + github.com/multiformats/go-multiaddr v0.16.1 // indirect + github.com/multiformats/go-multiaddr-dns v0.4.1 // indirect + github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect + github.com/multiformats/go-multibase v0.2.0 // indirect + github.com/multiformats/go-multicodec v0.9.1 // indirect + github.com/multiformats/go-multihash v0.2.3 // indirect + github.com/multiformats/go-multistream v0.6.1 // indirect + github.com/multiformats/go-varint v0.0.7 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/oasisprotocol/curve25519-voi v0.0.0-20251114093237-2ab5a27a1729 // indirect + github.com/oklog/run v1.2.0 // indirect + github.com/olekukonko/tablewriter v0.0.5 // indirect + github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect + github.com/pelletier/go-toml/v2 v2.2.4 // indirect + github.com/petermattis/goid v0.0.0-20260113132338-7c7de50cc741 // indirect + github.com/pion/datachannel v1.5.10 // indirect + github.com/pion/dtls/v2 v2.2.12 // indirect + github.com/pion/dtls/v3 v3.1.2 // indirect + github.com/pion/ice/v4 v4.0.10 // indirect + github.com/pion/interceptor v0.1.40 // indirect + github.com/pion/logging v0.2.4 // indirect + github.com/pion/mdns/v2 v2.0.7 // indirect + github.com/pion/randutil v0.1.0 // indirect + github.com/pion/rtcp v1.2.15 // indirect + github.com/pion/rtp v1.8.19 // indirect + github.com/pion/sctp v1.8.39 // indirect + github.com/pion/sdp/v3 v3.0.13 // indirect + github.com/pion/srtp/v3 v3.0.6 // indirect + github.com/pion/stun v0.6.1 // indirect + github.com/pion/stun/v2 v2.0.0 // indirect + github.com/pion/stun/v3 v3.0.0 // indirect + github.com/pion/transport/v2 v2.2.10 // indirect + github.com/pion/transport/v3 v3.0.7 // indirect + github.com/pion/transport/v4 v4.0.1 // indirect + github.com/pion/turn/v4 v4.0.2 // indirect + github.com/pion/webrtc/v4 v4.1.2 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect + github.com/prometheus/client_golang v1.23.2 // indirect + github.com/prometheus/client_model v0.6.2 // indirect + github.com/prometheus/common v0.67.5 // indirect + github.com/prometheus/otlptranslator v1.0.0 // indirect + github.com/prometheus/procfs v0.20.1 // indirect + github.com/quic-go/qpack v0.6.0 // indirect + github.com/quic-go/quic-go v0.59.0 // indirect + github.com/quic-go/webtransport-go v0.10.0 // indirect + github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9 // indirect + github.com/rivo/uniseg v0.2.0 // indirect + github.com/rogpeppe/go-internal v1.14.1 // indirect + github.com/rs/cors v1.11.1 // indirect + github.com/rs/zerolog v1.35.0 // indirect + github.com/sagikazarmark/locafero v0.12.0 // indirect + github.com/sasha-s/go-deadlock v0.3.7 // indirect + github.com/shirou/gopsutil v3.21.11+incompatible // indirect + github.com/shirou/gopsutil/v4 v4.26.2 // indirect + github.com/spaolacci/murmur3 v1.1.0 // indirect + github.com/spf13/afero v1.15.0 // indirect + github.com/spf13/pflag v1.0.10 // indirect + github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect + github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091 // indirect + github.com/subosito/gotenv v1.6.0 // indirect + github.com/supranational/blst v0.3.16 // indirect + github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect + github.com/tendermint/go-amino v0.16.0 // indirect + github.com/tidwall/btree v1.8.1 // indirect + github.com/tidwall/gjson v1.18.0 // indirect + github.com/tidwall/match v1.2.0 // indirect + github.com/tidwall/pretty v1.2.1 // indirect + github.com/tidwall/sjson v1.2.5 // indirect + github.com/tklauser/go-sysconf v0.3.16 // indirect + github.com/tklauser/numcpus v0.11.0 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect + github.com/tyler-smith/go-bip39 v1.1.0 // indirect + github.com/ulikunitz/xz v0.5.15 // indirect + github.com/wlynxg/anet v0.0.5 // indirect + github.com/yusufpapurcu/wmi v1.2.4 // indirect + github.com/zondax/golem v0.27.0 // indirect + github.com/zondax/hid v0.9.2 // indirect + github.com/zondax/ledger-go v1.0.1 // indirect + go.etcd.io/bbolt v1.4.3 // indirect + go.mongodb.org/mongo-driver v1.12.2 // indirect + go.opentelemetry.io/auto/sdk v1.2.1 // indirect + go.opentelemetry.io/contrib/bridges/otelslog v0.17.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.39.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.66.0 // indirect + go.opentelemetry.io/contrib/instrumentation/host v0.67.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 // indirect + go.opentelemetry.io/contrib/instrumentation/runtime v0.67.0 // indirect + go.opentelemetry.io/contrib/otelconf v0.22.0 // indirect + go.opentelemetry.io/contrib/propagators/autoprop v0.67.0 // indirect + go.opentelemetry.io/contrib/propagators/aws v1.42.0 // indirect + go.opentelemetry.io/contrib/propagators/b3 v1.42.0 // indirect + go.opentelemetry.io/contrib/propagators/jaeger v1.42.0 // indirect + go.opentelemetry.io/contrib/propagators/ot v1.42.0 // indirect + go.opentelemetry.io/otel v1.43.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.18.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.18.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.42.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.42.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.42.0 // indirect + go.opentelemetry.io/otel/exporters/prometheus v0.64.0 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.18.0 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.42.0 // indirect + go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.42.0 // indirect + go.opentelemetry.io/otel/log v0.19.0 // indirect + go.opentelemetry.io/otel/metric v1.43.0 // indirect + go.opentelemetry.io/otel/sdk v1.42.0 // indirect + go.opentelemetry.io/otel/sdk/log v0.18.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.42.0 // indirect + go.opentelemetry.io/otel/trace v1.43.0 // indirect + go.opentelemetry.io/proto/otlp v1.9.0 // indirect + go.uber.org/dig v1.19.0 // indirect + go.uber.org/fx v1.24.0 // indirect + go.uber.org/mock v0.6.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + go.uber.org/zap v1.27.1 // indirect + go.yaml.in/yaml/v2 v2.4.4 // indirect + go.yaml.in/yaml/v3 v3.0.4 // indirect + golang.org/x/arch v0.26.0 // indirect + golang.org/x/crypto v0.49.0 // indirect + golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 // indirect + golang.org/x/mod v0.34.0 // indirect + golang.org/x/net v0.52.0 // indirect + golang.org/x/oauth2 v0.36.0 // indirect + golang.org/x/sync v0.20.0 // indirect + golang.org/x/sys v0.43.0 // indirect + golang.org/x/telemetry v0.0.0-20260311193753-579e4da9a98c // indirect + golang.org/x/term v0.41.0 // indirect + golang.org/x/text v0.35.0 // indirect + golang.org/x/time v0.15.0 // indirect + golang.org/x/tools v0.43.0 // indirect + google.golang.org/api v0.271.0 // indirect + google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 // indirect + google.golang.org/protobuf v1.36.11 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + gotest.tools/v3 v3.5.2 // indirect + lukechampine.com/blake3 v1.4.1 // indirect + nhooyr.io/websocket v1.8.17 // indirect + pgregory.net/rapid v1.2.0 // indirect + rsc.io/qr v0.2.0 // indirect + sigs.k8s.io/yaml v1.6.0 // indirect +) + +replace ( + cosmossdk.io/log/v2 => github.com/cosmos/cosmos-sdk/log/v2 v2.0.2-0.20260302180736-2fbcc8d5f49e + + cosmossdk.io/x/group => github.com/cosmos/cosmos-sdk/enterprise/group v0.0.0-20260227212600-39d4711b8970 + // Required replace directives (inherited from cosmos/evm) + github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 + + github.com/cometbft/cometbft => github.com/cometbft/cometbft v0.39.1-0.20260410173500-f4a9ba93609e + github.com/cosmos/cosmos-sdk/x/group => github.com/cosmos/cosmos-sdk/enterprise/group v0.0.0-20260227212600-39d4711b8970 + github.com/ethereum/go-ethereum => github.com/cosmos/go-ethereum v1.16.2-cosmos-1.0.20260126204437-32ededcf907f + github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.9.1 + github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 + github.com/tidwall/btree => github.com/cosmos/btree v0.0.0-20250924232609-2c6195d95951 +) diff --git a/prototypes/x/tokenfactory/keeper/denom.go b/prototypes/x/tokenfactory/keeper/denom.go index 6600648e9d6..c407817895f 100644 --- a/prototypes/x/tokenfactory/keeper/denom.go +++ b/prototypes/x/tokenfactory/keeper/denom.go @@ -3,7 +3,7 @@ package keeper import ( "context" - "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" "cosmossdk.io/collections" errorsmod "cosmossdk.io/errors" diff --git a/prototypes/x/tokenfactory/keeper/genesis.go b/prototypes/x/tokenfactory/keeper/genesis.go index 302bd70db46..2678a73a85e 100644 --- a/prototypes/x/tokenfactory/keeper/genesis.go +++ b/prototypes/x/tokenfactory/keeper/genesis.go @@ -3,7 +3,7 @@ package keeper import ( "context" - "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" ) // InitGenesis initializes the tokenfactory module's state from a provided genesis state. diff --git a/prototypes/x/tokenfactory/keeper/genesis_test.go b/prototypes/x/tokenfactory/keeper/genesis_test.go deleted file mode 100644 index 97898ebbd87..00000000000 --- a/prototypes/x/tokenfactory/keeper/genesis_test.go +++ /dev/null @@ -1,62 +0,0 @@ -package keeper_test - -import ( - "testing" - - "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" - "github.com/stretchr/testify/require" - - _ "github.com/cosmos/sandbox-ledger/app" -) - -func TestGenesis(t *testing.T) { - params := types.DefaultParams() - - cases := []struct { - name string - gen *types.GenesisState - }{ - { - name: "init: denoms and params", - gen: &types.GenesisState{ - Params: params, - FactoryDenoms: []types.GenesisDenom{ - {Denom: "token1", AuthorityMetadata: types.DenomAuthorityMetadata{Admin: creatorAddrA}}, - {Denom: "token2", AuthorityMetadata: types.DenomAuthorityMetadata{Admin: creatorAddrB}}, - }, - }, - }, - { - name: "init empty", - gen: &types.GenesisState{Params: params, FactoryDenoms: []types.GenesisDenom{}}, - }, - } - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - k := wfapp.TokenFactoryKeeper - - require.NotNil(t, tc.gen) - k.InitGenesis(ctx, *tc.gen) - - got := k.ExportGenesis(ctx) - require.NotNil(t, got) - - require.Equal(t, tc.gen.Params, got.Params) - - wantDenoms := make(map[string]string) - for _, d := range tc.gen.FactoryDenoms { - wantDenoms[d.Denom] = d.AuthorityMetadata.Admin - } - gotDenoms := make(map[string]string) - for _, d := range got.FactoryDenoms { - gotDenoms[d.Denom] = d.AuthorityMetadata.Admin - } - require.Len(t, gotDenoms, len(wantDenoms)) - for denom, admin := range wantDenoms { - require.Equal(t, admin, gotDenoms[denom]) - } - }) - } -} diff --git a/prototypes/x/tokenfactory/keeper/keeper.go b/prototypes/x/tokenfactory/keeper/keeper.go index ae3d2139980..8bfe0f0fe1c 100644 --- a/prototypes/x/tokenfactory/keeper/keeper.go +++ b/prototypes/x/tokenfactory/keeper/keeper.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" "cosmossdk.io/collections" "cosmossdk.io/core/store" diff --git a/prototypes/x/tokenfactory/keeper/keeper_test.go b/prototypes/x/tokenfactory/keeper/keeper_test.go deleted file mode 100644 index 437265a31d9..00000000000 --- a/prototypes/x/tokenfactory/keeper/keeper_test.go +++ /dev/null @@ -1,210 +0,0 @@ -package keeper_test - -import ( - "fmt" - "testing" - "time" - - dbm "github.com/cosmos/cosmos-db" - "github.com/cosmos/sandbox-ledger/app" - "github.com/cosmos/sandbox-ledger/testutil" - "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" - "github.com/stretchr/testify/require" - - "cosmossdk.io/log/v2" - "cosmossdk.io/math" - - "github.com/cosmos/cosmos-sdk/baseapp" - "github.com/cosmos/cosmos-sdk/runtime" - simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - consensusparamkeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" - consensusparamtypes "github.com/cosmos/cosmos-sdk/x/consensus/types" - - cmtabcitypes "github.com/cometbft/cometbft/abci/types" -) - -const ( - // Addresses - creatorAddrA = "cosmos1nsh9vj9znccakn6xwlhlwx92acdt79yeqrkz4y" - creatorAddrB = "cosmos1uu635yk0hz3cvrypnryrggltrjq7975jrmeg97" - invalidAddress = "invalid" - - // Token denoms - testDenom = "testtoken" - nonExistentDenom = "doesnotexist" - invalidDenom = "not-so-alphanumeric" -) - -func setupIntegrationApp(tb testing.TB) (*app.SandboxApp, sdk.Context) { - tb.Helper() - // Ensure bech32 prefixes match wf* test addresses - testutil.SafeSetAddressPrefixes() - - db := dbm.NewMemDB() - wfapp := app.NewApp(log.NewNopLogger(), db, nil, false, simtestutil.NewAppOptionsWithFlagHome(tb.TempDir()), baseapp.SetChainID("chain-id")) - wfapp.SetInitChainer(func(ctx sdk.Context, _ *cmtabcitypes.RequestInitChain) (*cmtabcitypes.ResponseInitChain, error) { - for _, mod := range wfapp.ModuleManager.OrderInitGenesis { - if m, ok := wfapp.ModuleManager.Modules[mod].(module.HasGenesis); ok { - m.InitGenesis(ctx, wfapp.AppCodec(), m.DefaultGenesis(wfapp.AppCodec())) - } - } - - return &cmtabcitypes.ResponseInitChain{}, nil - }) - - // set baseApp param store - consensusParamsKeeper := consensusparamkeeper.NewKeeper(wfapp.AppCodec(), runtime.NewKVStoreService(wfapp.GetKey(consensusparamtypes.StoreKey)), authtypes.NewModuleAddress("gov").String(), runtime.EventService{}) - wfapp.SetParamStore(consensusParamsKeeper.ParamsStore) - - if err := wfapp.LoadLatestVersion(); err != nil { - panic(fmt.Errorf("failed to load application version from store: %w", err)) - } - - _, err := wfapp.InitChain(&cmtabcitypes.RequestInitChain{ChainId: "chain-id", ConsensusParams: simtestutil.DefaultConsensusParams}) - require.NoError(tb, err) - - // use deliver-state context backed by BaseApp finalizeBlockState - ctx := wfapp.NewContext(false). - WithChainID("chain-id"). - WithBlockTime(time.Now()). - WithBlockHeight(1) - - // Ensure module params exist (not strictly necessary if queries don’t touch them) - require.NoError(tb, wfapp.TokenFactoryKeeper.SetParams(ctx, types.DefaultParams())) - - return wfapp, ctx -} - -// TestKeeper_MintTo tests the MintTo function directly -func TestKeeper_MintTo(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - creator, err := sdk.AccAddressFromBech32(creatorAddrA) - require.NoError(t, err) - - recipient, err := sdk.AccAddressFromBech32(creatorAddrB) - require.NoError(t, err) - - // Create denom first - err = wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) - require.NoError(t, err) - - t.Run("successful mint", func(t *testing.T) { - amount := math.NewInt(1000000) - err := wfapp.TokenFactoryKeeper.MintTo(ctx, testDenom, amount, recipient) - require.NoError(t, err) - - // Verify balance - balance := wfapp.BankKeeper.GetBalance(ctx, recipient, testDenom) - require.True(t, balance.Amount.Equal(amount)) - }) - - t.Run("mint more tokens", func(t *testing.T) { - amount := math.NewInt(500000) - err := wfapp.TokenFactoryKeeper.MintTo(ctx, testDenom, amount, creator) - require.NoError(t, err) - - // Verify balance - balance := wfapp.BankKeeper.GetBalance(ctx, creator, testDenom) - require.True(t, balance.Amount.Equal(amount)) - }) - - t.Run("invalid denom format", func(t *testing.T) { - amount := math.NewInt(1000) - err := wfapp.TokenFactoryKeeper.MintTo(ctx, invalidDenom, amount, recipient) - require.Error(t, err) - require.ErrorIs(t, err, types.ErrInvalidDenom) - }) - - t.Run("empty denom", func(t *testing.T) { - amount := math.NewInt(1000) - err := wfapp.TokenFactoryKeeper.MintTo(ctx, "", amount, recipient) - require.Error(t, err) - }) -} - -// TestKeeper_BurnFrom tests the BurnFrom function directly -func TestKeeper_BurnFrom(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - holder, err := sdk.AccAddressFromBech32(creatorAddrA) - require.NoError(t, err) - - // Create denom and mint some tokens first - err = wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) - require.NoError(t, err) - - mintAmount := math.NewInt(1000000) - err = wfapp.TokenFactoryKeeper.MintTo(ctx, testDenom, mintAmount, holder) - require.NoError(t, err) - - t.Run("successful burn", func(t *testing.T) { - burnAmount := math.NewInt(400000) - err := wfapp.TokenFactoryKeeper.BurnFrom(ctx, testDenom, burnAmount, holder) - require.NoError(t, err) - - // Verify balance decreased - balance := wfapp.BankKeeper.GetBalance(ctx, holder, testDenom) - expected := mintAmount.Sub(burnAmount) - require.True(t, balance.Amount.Equal(expected)) - }) - - t.Run("burn remaining balance", func(t *testing.T) { - balance := wfapp.BankKeeper.GetBalance(ctx, holder, testDenom) - err := wfapp.TokenFactoryKeeper.BurnFrom(ctx, testDenom, balance.Amount, holder) - require.NoError(t, err) - - // Verify balance is zero - newBalance := wfapp.BankKeeper.GetBalance(ctx, holder, testDenom) - require.True(t, newBalance.Amount.IsZero()) - }) - - t.Run("insufficient balance", func(t *testing.T) { - burnAmount := math.NewInt(1000) - err := wfapp.TokenFactoryKeeper.BurnFrom(ctx, testDenom, burnAmount, holder) - require.Error(t, err) - }) - - t.Run("invalid denom format", func(t *testing.T) { - burnAmount := math.NewInt(1000) - err := wfapp.TokenFactoryKeeper.BurnFrom(ctx, invalidDenom, burnAmount, holder) - require.Error(t, err) - require.ErrorIs(t, err, types.ErrInvalidDenom) - }) -} - -// TestKeeper_HasDenom tests the HasDenom function -func TestKeeper_HasDenom(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - t.Run("denom does not exist", func(t *testing.T) { - exists := wfapp.TokenFactoryKeeper.HasDenom(ctx, testDenom) - require.False(t, exists) - }) - - t.Run("denom exists after creation", func(t *testing.T) { - err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) - require.NoError(t, err) - - exists := wfapp.TokenFactoryKeeper.HasDenom(ctx, testDenom) - require.True(t, exists) - }) - - t.Run("invalid denom format returns false", func(t *testing.T) { - exists := wfapp.TokenFactoryKeeper.HasDenom(ctx, invalidDenom) - require.False(t, exists) - }) - - t.Run("empty denom returns false", func(t *testing.T) { - exists := wfapp.TokenFactoryKeeper.HasDenom(ctx, "") - require.False(t, exists) - }) - - t.Run("non-existent valid denom returns false", func(t *testing.T) { - exists := wfapp.TokenFactoryKeeper.HasDenom(ctx, nonExistentDenom) - require.False(t, exists) - }) -} diff --git a/prototypes/x/tokenfactory/keeper/mint_burn.go b/prototypes/x/tokenfactory/keeper/mint_burn.go index 6d5af4e3ac3..05d9d942ab2 100644 --- a/prototypes/x/tokenfactory/keeper/mint_burn.go +++ b/prototypes/x/tokenfactory/keeper/mint_burn.go @@ -3,7 +3,7 @@ package keeper import ( "context" - "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" errorsmod "cosmossdk.io/errors" "cosmossdk.io/math" diff --git a/prototypes/x/tokenfactory/keeper/msg_server.go b/prototypes/x/tokenfactory/keeper/msg_server.go index 85e94473dc9..12ce77003ad 100644 --- a/prototypes/x/tokenfactory/keeper/msg_server.go +++ b/prototypes/x/tokenfactory/keeper/msg_server.go @@ -3,7 +3,7 @@ package keeper import ( "context" - "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" errorsmod "cosmossdk.io/errors" diff --git a/prototypes/x/tokenfactory/keeper/msg_server_test.go b/prototypes/x/tokenfactory/keeper/msg_server_test.go deleted file mode 100644 index c7ece9b5746..00000000000 --- a/prototypes/x/tokenfactory/keeper/msg_server_test.go +++ /dev/null @@ -1,598 +0,0 @@ -package keeper_test - -import ( - "testing" - - "github.com/cosmos/sandbox-ledger/app" - "github.com/cosmos/sandbox-ledger/x/tokenfactory/keeper" - "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" - "github.com/stretchr/testify/require" - - "cosmossdk.io/math" - - sdk "github.com/cosmos/cosmos-sdk/types" -) - -// TestMsgServer_CreateDenom tests the CreateDenom message handler. -func TestMsgServer_CreateDenom(t *testing.T) { - cases := []struct { - name string - creator string - denom string - malleate func(wfapp *app.SandboxApp, ctx sdk.Context) - err error - }{ - { - name: "success", - creator: creatorAddrA, - denom: testDenom, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) {}, - }, - { - name: "failure: duplicate denom", - creator: creatorAddrA, - denom: testDenom, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { - err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) - require.NoError(t, err) - }, - err: types.ErrDenomExists, - }, - } - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) - - tc.malleate(wfapp, ctx) - - res, err := ms.CreateDenom(ctx, types.NewMsgCreateDenom(tc.creator, tc.denom)) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - return - } - require.NoError(t, err) - require.NotNil(t, res) - - denoms, err := wfapp.TokenFactoryKeeper.GetDenomsFromCreator(ctx, tc.creator) - require.NoError(t, err) - require.Contains(t, denoms, tc.denom) - - md, found := wfapp.BankKeeper.GetDenomMetaData(ctx, tc.denom) - require.True(t, found) - require.Equal(t, tc.denom, md.Base) - require.Len(t, md.DenomUnits, 1) - require.Equal(t, tc.denom, md.DenomUnits[0].Denom) - require.EqualValues(t, 0, md.DenomUnits[0].Exponent) - }) - } -} - -// TestMsgServer_Mint tests the Mint message handler. -func TestMsgServer_Mint(t *testing.T) { - cases := []struct { - name string - from string - to string - denom string - amount int64 - err error - }{ - { - name: "success", - from: creatorAddrA, - to: creatorAddrB, - denom: testDenom, - amount: 1_000_000, - }, - { - name: "failure: unauthorized", - from: creatorAddrB, - to: creatorAddrB, - denom: testDenom, - amount: 1, - err: types.ErrUnauthorized, - }, - { - name: "failure: invalid recipient", - from: creatorAddrA, - to: "invalid", - denom: testDenom, - amount: 1, - err: types.ErrInvalidAddress, - }, - { - name: "failure: invalid denom", - from: creatorAddrA, - to: creatorAddrA, - denom: invalidDenom, - amount: 1, - err: types.ErrInvalidDenom, - }, - } - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) - - err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, tc.denom) - require.NoError(t, err) - - amt := sdk.NewCoin(tc.denom, math.NewInt(tc.amount)) - _, err = ms.Mint(ctx, types.NewMsgMint(tc.from, tc.to, amt)) - - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - return - } - require.NoError(t, err) - }) - } -} - -// TestMsgServer_Burn tests the Burn message handler. -func TestMsgServer_Burn(t *testing.T) { - var ( - denom string - mintAmount int64 - burnAmount int64 - burnFrom string - ) - - cases := []struct { - name string - err error - malleate func() - }{ - { - name: "success", - malleate: func() {}, - }, - { - name: "failure: unauthorized", - malleate: func() { - burnFrom = creatorAddrB - }, - err: types.ErrUnauthorized, - }, - { - name: "failure: nonexistent denom", - malleate: func() { - denom = nonExistentDenom - }, - err: types.ErrDenomNotFound, - }, - { - name: "failure: invalid sender", - malleate: func() { - burnFrom = "invalid" - }, - err: types.ErrInvalidAddress, - }, - } - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) - - denom = testDenom - mintAmount = 1_000_000 - burnAmount = 300_000 - burnFrom = creatorAddrA - - var err error - err = wfapp.TokenFactoryKeeper.CreateDenom(ctx, burnFrom, denom) - require.NoError(t, err) - _, err = ms.Mint(ctx, types.NewMsgMint(burnFrom, burnFrom, sdk.NewCoin(denom, math.NewInt(mintAmount)))) - require.NoError(t, err) - - originalBurnFrom := burnFrom - originalDenom := denom - pre := wfapp.BankKeeper.GetBalance(ctx, sdk.MustAccAddressFromBech32(burnFrom), denom) - require.Equal(t, math.NewInt(mintAmount), pre.Amount) - - tc.malleate() - - _, err = ms.Burn(ctx, types.NewMsgBurn(burnFrom, sdk.NewCoin(denom, math.NewInt(burnAmount)))) - - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - post := wfapp.BankKeeper.GetBalance(ctx, sdk.MustAccAddressFromBech32(originalBurnFrom), originalDenom) - require.Equal(t, pre.Amount.Int64(), post.Amount.Int64()) - return - } - require.NoError(t, err) - post := wfapp.BankKeeper.GetBalance(ctx, sdk.MustAccAddressFromBech32(burnFrom), denom) - require.Equal(t, pre.Amount.Sub(math.NewInt(burnAmount)), post.Amount) - }) - } -} - -// TestMsgServer_CreateDenom_EmitsEvent tests that CreateDenom emits the correct event -func TestMsgServer_CreateDenom_EmitsEvent(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) - - _, err := ms.CreateDenom(ctx, types.NewMsgCreateDenom(creatorAddrA, testDenom)) - require.NoError(t, err) - - events := ctx.EventManager().Events() - var foundEvent bool - for _, event := range events { - if event.Type == types.TypeEvtCreateDenom { - foundEvent = true - // Verify event attributes - var hasAdmin, hasDenom bool - for _, attr := range event.Attributes { - if attr.Key == types.AttributeKeyAdmin && attr.Value == creatorAddrA { - hasAdmin = true - } - if attr.Key == types.AttributeKeyDenom && attr.Value == testDenom { - hasDenom = true - } - } - require.True(t, hasAdmin, "event should have admin attribute") - require.True(t, hasDenom, "event should have denom attribute") - break - } - } - require.True(t, foundEvent, "CreateDenom should emit tokenfactory_create_denom event") -} - -// TestMsgServer_Mint_EmitsEvent tests that Mint emits the correct event -func TestMsgServer_Mint_EmitsEvent(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) - - err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) - require.NoError(t, err) - - // Clear events from CreateDenom - ctx = ctx.WithEventManager(sdk.NewEventManager()) - - amt := sdk.NewCoin(testDenom, math.NewInt(1000000)) - _, err = ms.Mint(ctx, types.NewMsgMint(creatorAddrA, creatorAddrB, amt)) - require.NoError(t, err) - - events := ctx.EventManager().Events() - var foundEvent bool - for _, event := range events { - if event.Type == types.TypeEvtMint { - foundEvent = true - // Verify event attributes - var hasAdmin, hasMintTo, hasDenom, hasAmount bool - for _, attr := range event.Attributes { - if attr.Key == types.AttributeKeyAdmin && attr.Value == creatorAddrA { - hasAdmin = true - } - if attr.Key == types.AttributeKeyMintTo && attr.Value == creatorAddrB { - hasMintTo = true - } - if attr.Key == types.AttributeKeyDenom && attr.Value == testDenom { - hasDenom = true - } - if attr.Key == types.AttributeKeyAmount { - hasAmount = true - } - } - require.True(t, hasAdmin, "event should have admin attribute") - require.True(t, hasMintTo, "event should have mint_to attribute") - require.True(t, hasDenom, "event should have denom attribute") - require.True(t, hasAmount, "event should have amount attribute") - break - } - } - require.True(t, foundEvent, "Mint should emit tokenfactory_mint event") -} - -// TestMsgServer_Burn_EmitsEvent tests that Burn emits the correct event -func TestMsgServer_Burn_EmitsEvent(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) - - err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) - require.NoError(t, err) - - amt := sdk.NewCoin(testDenom, math.NewInt(1000000)) - _, err = ms.Mint(ctx, types.NewMsgMint(creatorAddrA, creatorAddrA, amt)) - require.NoError(t, err) - - // Clear events from CreateDenom and Mint - ctx = ctx.WithEventManager(sdk.NewEventManager()) - - burnAmt := sdk.NewCoin(testDenom, math.NewInt(500000)) - _, err = ms.Burn(ctx, types.NewMsgBurn(creatorAddrA, burnAmt)) - require.NoError(t, err) - - events := ctx.EventManager().Events() - var foundEvent bool - for _, event := range events { - if event.Type == types.TypeEvtBurn { - foundEvent = true - // Verify event attributes - var hasAdmin, hasDenom, hasAmount bool - for _, attr := range event.Attributes { - if attr.Key == types.AttributeKeyAdmin && attr.Value == creatorAddrA { - hasAdmin = true - } - if attr.Key == types.AttributeKeyDenom && attr.Value == testDenom { - hasDenom = true - } - if attr.Key == types.AttributeKeyAmount { - hasAmount = true - } - } - require.True(t, hasAdmin, "event should have admin attribute") - require.True(t, hasDenom, "event should have denom attribute") - require.True(t, hasAmount, "event should have amount attribute") - break - } - } - require.True(t, foundEvent, "Burn should emit tokenfactory_burn event") -} - -// TestMsgServer_ChangeAdmin tests the ChangeAdmin message handler. -func TestMsgServer_ChangeAdmin(t *testing.T) { - cases := []struct { - name string - sender string - newAdmin string - denom string - malleate func(wfapp *app.SandboxApp, ctx sdk.Context) - err error - }{ - { - name: "success", - sender: creatorAddrA, - newAdmin: creatorAddrB, - denom: testDenom, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) {}, - }, - { - name: "failure: unauthorized", - sender: creatorAddrB, - newAdmin: creatorAddrB, - denom: testDenom, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) {}, - err: types.ErrUnauthorized, - }, - { - name: "failure: invalid new admin", - sender: creatorAddrA, - newAdmin: "invalid", - denom: testDenom, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) {}, - err: types.ErrInvalidAddress, - }, - { - name: "failure: denom not found", - sender: creatorAddrA, - newAdmin: creatorAddrB, - denom: nonExistentDenom, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) {}, - err: types.ErrDenomNotFound, - }, - { - name: "failure: admin already renounced", - sender: creatorAddrA, - newAdmin: creatorAddrB, - denom: testDenom, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { - err := wfapp.TokenFactoryKeeper.RenounceAdmin(ctx, testDenom, creatorAddrA) - require.NoError(t, err) - }, - err: types.ErrAdminRenounced, - }, - } - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) - - err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) - require.NoError(t, err) - - tc.malleate(wfapp, ctx) - - _, err = ms.ChangeAdmin(ctx, types.NewMsgChangeAdmin(tc.sender, tc.denom, tc.newAdmin)) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - return - } - require.NoError(t, err) - - // Verify admin changed - md, err := wfapp.TokenFactoryKeeper.GetAuthorityMetadata(ctx, tc.denom) - require.NoError(t, err) - require.Equal(t, tc.newAdmin, md.Admin) - }) - } -} - -// TestMsgServer_RenounceAdmin tests the RenounceAdmin message handler. -func TestMsgServer_RenounceAdmin(t *testing.T) { - cases := []struct { - name string - sender string - denom string - malleate func(wfapp *app.SandboxApp, ctx sdk.Context) - err error - }{ - { - name: "success", - sender: creatorAddrA, - denom: testDenom, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) {}, - }, - { - name: "failure: unauthorized", - sender: creatorAddrB, - denom: testDenom, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) {}, - err: types.ErrUnauthorized, - }, - { - name: "failure: denom not found", - sender: creatorAddrA, - denom: nonExistentDenom, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) {}, - err: types.ErrDenomNotFound, - }, - { - name: "failure: already renounced", - sender: creatorAddrA, - denom: testDenom, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { - err := wfapp.TokenFactoryKeeper.RenounceAdmin(ctx, testDenom, creatorAddrA) - require.NoError(t, err) - }, - err: types.ErrAdminRenounced, - }, - } - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) - - err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) - require.NoError(t, err) - - tc.malleate(wfapp, ctx) - - _, err = ms.RenounceAdmin(ctx, types.NewMsgRenounceAdmin(tc.sender, tc.denom)) - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - return - } - require.NoError(t, err) - - // Verify admin is empty - md, err := wfapp.TokenFactoryKeeper.GetAuthorityMetadata(ctx, tc.denom) - require.NoError(t, err) - require.Empty(t, md.Admin) - }) - } -} - -// TestMsgServer_RenounceAdmin_BlocksMinting tests that renouncing admin blocks MsgMint -func TestMsgServer_RenounceAdmin_BlocksMinting(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) - - err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) - require.NoError(t, err) - - // Mint works before renouncing - amt := sdk.NewCoin(testDenom, math.NewInt(1000)) - _, err = ms.Mint(ctx, types.NewMsgMint(creatorAddrA, creatorAddrA, amt)) - require.NoError(t, err) - - // Renounce admin - _, err = ms.RenounceAdmin(ctx, types.NewMsgRenounceAdmin(creatorAddrA, testDenom)) - require.NoError(t, err) - - // Mint fails after renouncing - _, err = ms.Mint(ctx, types.NewMsgMint(creatorAddrA, creatorAddrA, amt)) - require.ErrorIs(t, err, types.ErrAdminRenounced) -} - -// TestMsgServer_RenounceAdmin_KeepsModuleMinting tests that renouncing admin doesn't block keeper MintTo -func TestMsgServer_RenounceAdmin_KeepsModuleMinting(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) - - err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) - require.NoError(t, err) - - // Renounce admin - _, err = ms.RenounceAdmin(ctx, types.NewMsgRenounceAdmin(creatorAddrA, testDenom)) - require.NoError(t, err) - - // Keeper MintTo still works (for module usage like IFT) - to := sdk.MustAccAddressFromBech32(creatorAddrB) - err = wfapp.TokenFactoryKeeper.MintTo(ctx, testDenom, math.NewInt(1000), to) - require.NoError(t, err) - - // Verify balance - balance := wfapp.BankKeeper.GetBalance(ctx, to, testDenom) - require.Equal(t, math.NewInt(1000), balance.Amount) -} - -// TestMsgServer_ChangeAdmin_EmitsEvent tests that ChangeAdmin emits the correct event -func TestMsgServer_ChangeAdmin_EmitsEvent(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) - - err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) - require.NoError(t, err) - - ctx = ctx.WithEventManager(sdk.NewEventManager()) - - _, err = ms.ChangeAdmin(ctx, types.NewMsgChangeAdmin(creatorAddrA, testDenom, creatorAddrB)) - require.NoError(t, err) - - events := ctx.EventManager().Events() - var foundEvent bool - for _, event := range events { - if event.Type == types.TypeEvtChangeAdmin { - foundEvent = true - var hasAdmin, hasNewAdmin, hasDenom bool - for _, attr := range event.Attributes { - if attr.Key == types.AttributeKeyAdmin && attr.Value == creatorAddrA { - hasAdmin = true - } - if attr.Key == types.AttributeKeyNewAdmin && attr.Value == creatorAddrB { - hasNewAdmin = true - } - if attr.Key == types.AttributeKeyDenom && attr.Value == testDenom { - hasDenom = true - } - } - require.True(t, hasAdmin, "event should have admin attribute") - require.True(t, hasNewAdmin, "event should have new_admin attribute") - require.True(t, hasDenom, "event should have denom attribute") - break - } - } - require.True(t, foundEvent, "ChangeAdmin should emit tokenfactory_change_admin event") -} - -// TestMsgServer_RenounceAdmin_EmitsEvent tests that RenounceAdmin emits the correct event -func TestMsgServer_RenounceAdmin_EmitsEvent(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) - - err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creatorAddrA, testDenom) - require.NoError(t, err) - - ctx = ctx.WithEventManager(sdk.NewEventManager()) - - _, err = ms.RenounceAdmin(ctx, types.NewMsgRenounceAdmin(creatorAddrA, testDenom)) - require.NoError(t, err) - - events := ctx.EventManager().Events() - var foundEvent bool - for _, event := range events { - if event.Type == types.TypeEvtRenounceAdmin { - foundEvent = true - var hasAdmin, hasDenom bool - for _, attr := range event.Attributes { - if attr.Key == types.AttributeKeyAdmin && attr.Value == creatorAddrA { - hasAdmin = true - } - if attr.Key == types.AttributeKeyDenom && attr.Value == testDenom { - hasDenom = true - } - } - require.True(t, hasAdmin, "event should have admin attribute") - require.True(t, hasDenom, "event should have denom attribute") - break - } - } - require.True(t, foundEvent, "RenounceAdmin should emit tokenfactory_renounce_admin event") -} diff --git a/prototypes/x/tokenfactory/keeper/params.go b/prototypes/x/tokenfactory/keeper/params.go index 4d75799eb8b..a6992b00ee0 100644 --- a/prototypes/x/tokenfactory/keeper/params.go +++ b/prototypes/x/tokenfactory/keeper/params.go @@ -3,7 +3,7 @@ package keeper import ( "context" - "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" ) // GetParams gets the tokenfactory module's parameters. diff --git a/prototypes/x/tokenfactory/keeper/query.go b/prototypes/x/tokenfactory/keeper/query.go index a280c2afc31..c87e6e6cfa1 100644 --- a/prototypes/x/tokenfactory/keeper/query.go +++ b/prototypes/x/tokenfactory/keeper/query.go @@ -3,7 +3,7 @@ package keeper import ( "context" - "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" ) var _ types.QueryServer = Keeper{} diff --git a/prototypes/x/tokenfactory/keeper/query_test.go b/prototypes/x/tokenfactory/keeper/query_test.go index 43cbd62346e..73d5a0d7977 100644 --- a/prototypes/x/tokenfactory/keeper/query_test.go +++ b/prototypes/x/tokenfactory/keeper/query_test.go @@ -3,8 +3,8 @@ package keeper_test import ( "testing" - "github.com/cosmos/sandbox-ledger/x/tokenfactory/keeper" - "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/keeper" + "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" "github.com/stretchr/testify/require" ) diff --git a/prototypes/x/tokenfactory/module.go b/prototypes/x/tokenfactory/module.go index 974597d6f2e..e02348f35b2 100644 --- a/prototypes/x/tokenfactory/module.go +++ b/prototypes/x/tokenfactory/module.go @@ -5,9 +5,9 @@ import ( "encoding/json" "fmt" - "github.com/cosmos/sandbox-ledger/x/tokenfactory/cli" - "github.com/cosmos/sandbox-ledger/x/tokenfactory/keeper" - "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/cli" + "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/keeper" + "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" diff --git a/prototypes/x/tokenfactory/module_test.go b/prototypes/x/tokenfactory/module_test.go index cf7e5e25c53..f3b2243d912 100644 --- a/prototypes/x/tokenfactory/module_test.go +++ b/prototypes/x/tokenfactory/module_test.go @@ -3,8 +3,8 @@ package tokenfactory_test import ( "testing" - "github.com/cosmos/sandbox-ledger/x/tokenfactory" - "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/cosmos/ibc-go/prototypes/x/tokenfactory" + "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" "github.com/stretchr/testify/require" ) diff --git a/prototypes/x/tokenfactory/types/denom_test.go b/prototypes/x/tokenfactory/types/denom_test.go index cf84518f7c3..45038eb29d4 100644 --- a/prototypes/x/tokenfactory/types/denom_test.go +++ b/prototypes/x/tokenfactory/types/denom_test.go @@ -3,7 +3,7 @@ package types_test import ( "testing" - "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" + "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" "github.com/stretchr/testify/require" ) diff --git a/prototypes/x/tokenfactory/types/genesis_test.go b/prototypes/x/tokenfactory/types/genesis_test.go deleted file mode 100644 index 77f2b4997f1..00000000000 --- a/prototypes/x/tokenfactory/types/genesis_test.go +++ /dev/null @@ -1,92 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/cosmos/sandbox-ledger/testutil" - "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" - "github.com/stretchr/testify/require" -) - -func TestValidateGenesis(t *testing.T) { - testutil.SafeSetAddressPrefixes() - tests := []struct { - name string - genState types.GenesisState - expectErr bool - }{ - { - name: "default genesis", - genState: *types.DefaultGenesis(), - expectErr: false, - }, - { - name: "valid genesis with denoms", - genState: types.GenesisState{ - Params: types.DefaultParams(), - FactoryDenoms: []types.GenesisDenom{ - { - Denom: "uwfdeposit", - AuthorityMetadata: types.DenomAuthorityMetadata{ - Admin: "cosmos1nsh9vj9znccakn6xwlhlwx92acdt79yeqrkz4y", - }, - }, - { - Denom: "uwfdeposit2", - AuthorityMetadata: types.DenomAuthorityMetadata{ - Admin: "cosmos1uu635yk0hz3cvrypnryrggltrjq7975jrmeg97", - }, - }, - }, - }, - expectErr: false, - }, - { - name: "invalid denom in genesis", - genState: types.GenesisState{ - Params: types.DefaultParams(), - FactoryDenoms: []types.GenesisDenom{ - { - Denom: "invalid-denom", - AuthorityMetadata: types.DenomAuthorityMetadata{ - Admin: "wf1creator", - }, - }, - }, - }, - expectErr: true, - }, - { - name: "empty admin in genesis", - genState: types.GenesisState{ - Params: types.DefaultParams(), - FactoryDenoms: []types.GenesisDenom{ - { - Denom: "token1", - AuthorityMetadata: types.DenomAuthorityMetadata{ - Admin: "", - }, - }, - }, - }, - expectErr: true, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := types.ValidateGenesis(tt.genState) - if tt.expectErr { - require.Error(t, err) - return - } - require.NoError(t, err) - }) - } -} - -func TestParamsValidate(t *testing.T) { - testutil.SafeSetAddressPrefixes() - require.NoError(t, types.DefaultParams().Validate()) - require.NoError(t, types.Params{}.Validate()) -} diff --git a/prototypes/x/tokenfactory/types/msgs_test.go b/prototypes/x/tokenfactory/types/msgs_test.go deleted file mode 100644 index d2c2cc62439..00000000000 --- a/prototypes/x/tokenfactory/types/msgs_test.go +++ /dev/null @@ -1,195 +0,0 @@ -package types_test - -import ( - "testing" - - "github.com/cosmos/sandbox-ledger/testutil" - "github.com/cosmos/sandbox-ledger/x/tokenfactory/types" - "github.com/stretchr/testify/require" - - "cosmossdk.io/math" - - sdk "github.com/cosmos/cosmos-sdk/types" -) - -const ( - testAddr = "cosmos1y6xz2ggfc0pcsmyjlekh0j9pxh6hk87yfwcjct" -) - -func TestMsgCreateDenom_ValidateBasic(t *testing.T) { - testutil.SafeSetAddressPrefixes() - tests := []struct { - name string - msg types.MsgCreateDenom - expectErr error - }{ - { - name: "valid message", - msg: types.MsgCreateDenom{ - Sender: testAddr, - Denom: testDenom, - }, - expectErr: nil, - }, - { - name: "invalid sender", - msg: types.MsgCreateDenom{ - Sender: "invalid", - Denom: testDenom, - }, - expectErr: types.ErrInvalidCreator, - }, - { - name: "empty sender", - msg: types.MsgCreateDenom{ - Sender: "", - Denom: testDenom, - }, - expectErr: types.ErrInvalidCreator, - }, - { - name: "empty denom", - msg: types.MsgCreateDenom{ - Sender: testAddr, - Denom: "", - }, - expectErr: types.ErrInvalidDenom, - }, - { - name: "invalid denom", - msg: types.MsgCreateDenom{ - Sender: testAddr, - Denom: "not-so-alphanumeric", - }, - expectErr: types.ErrInvalidDenom, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - require.ErrorIs(t, err, tt.expectErr, "got: %v want: %v", err, tt.expectErr) - }) - } -} - -func TestMsgMint_ValidateBasic(t *testing.T) { - testutil.SafeSetAddressPrefixes() - tests := []struct { - name string - msg types.MsgMint - expectErr error - }{ - { - name: "valid message", - msg: types.MsgMint{ - From: testAddr, - Address: testAddr, - Amount: sdk.NewCoin(testDenom, math.NewInt(1000000)), - }, - expectErr: nil, - }, - { - name: "invalid sender", - msg: types.MsgMint{ - From: "invalid", - Address: testAddr, - Amount: sdk.NewCoin(testDenom, math.NewInt(1000000)), - }, - expectErr: types.ErrInvalidAddress, - }, - { - name: "invalid mint to address", - msg: types.MsgMint{ - From: testAddr, - Address: "invalid", - Amount: sdk.NewCoin(testDenom, math.NewInt(1000000)), - }, - expectErr: types.ErrInvalidAddress, - }, - { - name: "zero amount", - msg: types.MsgMint{ - From: testAddr, - Address: testAddr, - Amount: sdk.NewCoin(testDenom, math.ZeroInt()), - }, - expectErr: types.ErrInvalidAmount, - }, - { - name: "negative amount", - msg: types.MsgMint{ - From: testAddr, - Address: testAddr, - Amount: sdk.Coin{Denom: testDenom, Amount: math.NewInt(-1000)}, - }, - expectErr: types.ErrInvalidAmount, - }, - { - name: "invalid denom", - msg: types.MsgMint{From: testAddr, Address: testAddr, Amount: sdk.NewCoin("not-so-alphanumeric", math.NewInt(1))}, - expectErr: types.ErrInvalidDenom, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - require.ErrorIs(t, err, tt.expectErr) - }) - } -} - -func TestMsgBurn_ValidateBasic(t *testing.T) { - testutil.SafeSetAddressPrefixes() - tests := []struct { - name string - msg types.MsgBurn - expectErr error - }{ - { - name: "valid message", - msg: types.MsgBurn{ - From: testAddr, - Amount: sdk.NewCoin(testDenom, math.NewInt(1000000)), - }, - expectErr: nil, - }, - { - name: "invalid sender", - msg: types.MsgBurn{ - From: "invalid", - Amount: sdk.NewCoin(testDenom, math.NewInt(1000000)), - }, - expectErr: types.ErrInvalidAddress, - }, - { - name: "zero amount", - msg: types.MsgBurn{ - From: testAddr, - Amount: sdk.NewCoin(testDenom, math.ZeroInt()), - }, - expectErr: types.ErrInvalidAmount, - }, - { - name: "negative amount", - msg: types.MsgBurn{ - From: testAddr, - Amount: sdk.Coin{Denom: testDenom, Amount: math.NewInt(-1000)}, - }, - expectErr: types.ErrInvalidAmount, - }, - { - name: "invalid denom", - msg: types.MsgBurn{From: testAddr, Amount: sdk.NewCoin("not-so-alphanumeric", math.NewInt(1))}, - expectErr: types.ErrInvalidDenom, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - err := tt.msg.ValidateBasic() - require.ErrorIs(t, err, tt.expectErr) - }) - } -} From 642af601d6ca0c3c561c4d8c586106b4c12bd55a Mon Sep 17 00:00:00 2001 From: Diana Borbe Date: Mon, 4 May 2026 10:43:14 +0200 Subject: [PATCH 03/11] Cleanup --- prototypes/x/ift/keeper/callbacks_test.go | 653 ---------- prototypes/x/ift/keeper/genesis_test.go | 335 ----- prototypes/x/ift/keeper/keeper_test.gooo | 359 ------ prototypes/x/ift/keeper/msg_server_test.gooo | 1147 ----------------- prototypes/x/ift/keeper/query_test.go | 187 --- prototypes/x/tokenfactory/go.mod | 399 ------ .../x/tokenfactory/keeper/query_test.go | 65 - prototypes/x/tokenfactory/module_test.go | 28 - 8 files changed, 3173 deletions(-) delete mode 100644 prototypes/x/ift/keeper/callbacks_test.go delete mode 100644 prototypes/x/ift/keeper/genesis_test.go delete mode 100644 prototypes/x/ift/keeper/keeper_test.gooo delete mode 100644 prototypes/x/ift/keeper/msg_server_test.gooo delete mode 100644 prototypes/x/ift/keeper/query_test.go delete mode 100644 prototypes/x/tokenfactory/go.mod delete mode 100644 prototypes/x/tokenfactory/keeper/query_test.go delete mode 100644 prototypes/x/tokenfactory/module_test.go diff --git a/prototypes/x/ift/keeper/callbacks_test.go b/prototypes/x/ift/keeper/callbacks_test.go deleted file mode 100644 index ec638d6322b..00000000000 --- a/prototypes/x/ift/keeper/callbacks_test.go +++ /dev/null @@ -1,653 +0,0 @@ -package keeper_test - -import ( - "errors" - "testing" - - "github.com/cosmos/ibc-go/prototypes/x/ift/types" - "github.com/stretchr/testify/require" - - "cosmossdk.io/collections" - "cosmossdk.io/math" - - sdk "github.com/cosmos/cosmos-sdk/types" - - gmptypes "github.com/cosmos/ibc-go/v11/modules/apps/27-gmp/types" - clienttypes "github.com/cosmos/ibc-go/v11/modules/core/02-client/types" - channeltypes "github.com/cosmos/ibc-go/v11/modules/core/04-channel/types" - channeltypesv2 "github.com/cosmos/ibc-go/v11/modules/core/04-channel/v2/types" -) - -// TestCallbacks_IBCSendPacketCallback tests the IBCSendPacketCallback handler. -func TestCallbacks_IBCSendPacketCallback(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - // Should be a no-op and return nil - err := wfapp.IFTKeeper.IBCSendPacketCallback( - ctx, - "", // sourceChannel - "", // destChannel - clienttypes.Height{}, - 0, // timeoutTimestamp - nil, // data - "", // senderAddress - "", // receiverAddress - "", // memo - ) - require.NoError(t, err) -} - -// TestCallbacks_IBCOnAcknowledgementPacketCallback_Success tests successful acknowledgement handling. -func TestCallbacks_IBCOnAcknowledgementPacketCallback_Success(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID := createIBCClient(t, ctx, wfapp) - sequence := uint64(1) - - // Create token factory denom - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - - // Setup pending transfer - pending := types.PendingTransfer{ - Denom: testDenom, - ClientId: clientID, - Sequence: sequence, - Sender: userAddrA, - Amount: math.NewInt(1000000), - } - err := wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, sequence, pending) - require.NoError(t, err) - - // Create successful acknowledgement - ack := channeltypes.NewResultAcknowledgement([]byte("success")) - ackBytes, err := ack.Marshal() - require.NoError(t, err) - - // Create packet - packet := channeltypes.Packet{ - SourcePort: gmptypes.PortID, - SourceChannel: clientID, - Sequence: sequence, - } - - moduleAddr := wfapp.IFTKeeper.GetModuleAddress() - - // Call the callback - err = wfapp.IFTKeeper.IBCOnAcknowledgementPacketCallback( - ctx, - packet, - ackBytes, - moduleAddr, - moduleAddr.String(), - moduleAddr.String(), - gmptypes.Version, - ) - require.NoError(t, err) - - // Verify pending transfer was removed - exists, err := wfapp.IFTKeeper.PendingTransferStore.Has(ctx, collections.Join(clientID, sequence)) - require.NoError(t, err) - require.False(t, exists) -} - -// TestCallbacks_IBCOnAcknowledgementPacketCallback_Error tests error acknowledgement handling with refund. -func TestCallbacks_IBCOnAcknowledgementPacketCallback_Error(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID := createIBCClient(t, ctx, wfapp) - sequence := uint64(1) - - // Create token factory denom - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - - // Setup pending transfer - pending := types.PendingTransfer{ - Denom: testDenom, - ClientId: clientID, - Sequence: sequence, - Sender: userAddrA, - Amount: math.NewInt(1000000), - } - err := wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, sequence, pending) - require.NoError(t, err) - - // Create v2 error acknowledgement (32-byte hash sentinel) - ackBytes := channeltypesv2.ErrorAcknowledgement[:] - - // Create packet - packet := channeltypes.Packet{ - SourcePort: gmptypes.PortID, - SourceChannel: clientID, - Sequence: sequence, - } - - moduleAddr := wfapp.IFTKeeper.GetModuleAddress() - - // Get sender balance before - senderAddr := sdk.MustAccAddressFromBech32(userAddrA) - - // Call the callback - err = wfapp.IFTKeeper.IBCOnAcknowledgementPacketCallback( - ctx, - packet, - ackBytes, - moduleAddr, - moduleAddr.String(), - moduleAddr.String(), - gmptypes.Version, - ) - require.NoError(t, err) - - // Verify pending transfer was removed - exists, err := wfapp.IFTKeeper.PendingTransferStore.Has(ctx, collections.Join(clientID, sequence)) - require.NoError(t, err) - require.False(t, exists) - - // Verify tokens were refunded (minted back) - balance := wfapp.BankKeeper.GetBalance(ctx, senderAddr, testDenom) - require.True(t, balance.Amount.Equal(math.NewInt(1000000))) -} - -// TestCallbacks_IBCOnAcknowledgementPacketCallback_V2AckFormat tests v2 ack format handling. -// In IBC v2, error is signaled ONLY by the 32-byte ErrorAcknowledgement sentinel hash. -// Any other bytes, including v1-style error ack protobuf, are treated as success. -func TestCallbacks_IBCOnAcknowledgementPacketCallback_V2AckFormat(t *testing.T) { - cases := []struct { - name string - ack []byte - expectRefund bool - }{ - { - name: "success: raw bytes", - ack: []byte("success"), - expectRefund: false, - }, - { - name: "success: empty bytes", - ack: []byte{}, - expectRefund: false, - }, - { - name: "error: v2 ErrorAcknowledgement sentinel triggers refund", - ack: channeltypesv2.ErrorAcknowledgement[:], - expectRefund: true, - }, - { - name: "success: v1-style error ack is NOT treated as error in v2", - ack: func() []byte { - ack := channeltypes.NewErrorAcknowledgement(errors.New("some error")) - bytes, _ := ack.Marshal() - return bytes - }(), - expectRefund: false, - }, - { - name: "success: partial match of error sentinel", - ack: channeltypesv2.ErrorAcknowledgement[:16], - expectRefund: false, - }, - } - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID := createIBCClient(t, ctx, wfapp) - sequence := uint64(1) - - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - - pending := types.PendingTransfer{ - Denom: testDenom, - ClientId: clientID, - Sequence: sequence, - Sender: userAddrA, - Amount: math.NewInt(1000000), - } - err := wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, sequence, pending) - require.NoError(t, err) - - packet := channeltypes.Packet{ - SourcePort: gmptypes.PortID, - SourceChannel: clientID, - Sequence: sequence, - } - - moduleAddr := wfapp.IFTKeeper.GetModuleAddress() - senderAddr := sdk.MustAccAddressFromBech32(userAddrA) - - err = wfapp.IFTKeeper.IBCOnAcknowledgementPacketCallback( - ctx, - packet, - tc.ack, - moduleAddr, - moduleAddr.String(), - moduleAddr.String(), - gmptypes.Version, - ) - require.NoError(t, err) - - exists, err := wfapp.IFTKeeper.PendingTransferStore.Has(ctx, collections.Join(clientID, sequence)) - require.NoError(t, err) - require.False(t, exists, "pending transfer should be removed") - - balance := wfapp.BankKeeper.GetBalance(ctx, senderAddr, testDenom) - if tc.expectRefund { - require.True(t, balance.Amount.Equal(math.NewInt(1000000)), "tokens should be refunded") - } else { - require.True(t, balance.Amount.IsZero(), "tokens should NOT be refunded on success") - } - }) - } -} - -// TestCallbacks_IBCOnAcknowledgementPacketCallback_NoPendingTransfer tests no-op when no pending transfer exists. -func TestCallbacks_IBCOnAcknowledgementPacketCallback_NoPendingTransfer(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID := createIBCClient(t, ctx, wfapp) - - // Create successful acknowledgement - ack := channeltypes.NewResultAcknowledgement([]byte("success")) - ackBytes, err := ack.Marshal() - require.NoError(t, err) - - // Create packet without corresponding pending transfer - packet := channeltypes.Packet{ - SourcePort: gmptypes.PortID, - SourceChannel: clientID, - Sequence: 999, - } - - moduleAddr := wfapp.IFTKeeper.GetModuleAddress() - - // Should return nil (no-op for non-IFT packets) - err = wfapp.IFTKeeper.IBCOnAcknowledgementPacketCallback( - ctx, - packet, - ackBytes, - moduleAddr, - moduleAddr.String(), - moduleAddr.String(), - gmptypes.Version, - ) - require.NoError(t, err) -} - -// TestCallbacks_IBCOnAcknowledgementPacketCallback_NonIFTPacket tests that non-IFT packets are gracefully ignored. -// This is important because IFT is registered as the ContractKeeper for all GMP callbacks, -// but other applications may also use GMP. IFT must not interfere with their callbacks. -func TestCallbacks_IBCOnAcknowledgementPacketCallback_NonIFTPacket(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID := createIBCClient(t, ctx, wfapp) - - // Create successful acknowledgement - ack := channeltypes.NewResultAcknowledgement([]byte("success")) - ackBytes, err := ack.Marshal() - require.NoError(t, err) - - packet := channeltypes.Packet{ - SourcePort: gmptypes.PortID, - SourceChannel: clientID, - Sequence: 1, - } - - moduleAddr := wfapp.IFTKeeper.GetModuleAddress() - - cases := []struct { - name string - contractAddress string - packetSender string - version string - sourcePort string - }{ - { - name: "ignore: different contract address (other GMP app)", - contractAddress: userAddrA, - packetSender: userAddrA, - version: gmptypes.Version, - sourcePort: gmptypes.PortID, - }, - { - name: "ignore: different packet sender (other GMP app)", - contractAddress: moduleAddr.String(), - packetSender: userAddrA, - version: gmptypes.Version, - sourcePort: gmptypes.PortID, - }, - { - name: "ignore: different version", - contractAddress: moduleAddr.String(), - packetSender: moduleAddr.String(), - version: "other-version", - sourcePort: gmptypes.PortID, - }, - { - name: "ignore: different source port", - contractAddress: moduleAddr.String(), - packetSender: moduleAddr.String(), - version: gmptypes.Version, - sourcePort: "other-port", - }, - } - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - packet.SourcePort = tc.sourcePort - - // Non-IFT packets should be gracefully ignored (return nil, no error) - err := wfapp.IFTKeeper.IBCOnAcknowledgementPacketCallback( - ctx, - packet, - ackBytes, - moduleAddr, - tc.contractAddress, - tc.packetSender, - tc.version, - ) - require.NoError(t, err, "non-IFT packets should be gracefully ignored, not cause errors") - }) - } -} - -// TestCallbacks_IBCOnTimeoutPacketCallback tests packet timeout handling with refund. -func TestCallbacks_IBCOnTimeoutPacketCallback(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID := createIBCClient(t, ctx, wfapp) - sequence := uint64(1) - - // Create token factory denom - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - - // Setup pending transfer - pending := types.PendingTransfer{ - Denom: testDenom, - ClientId: clientID, - Sequence: sequence, - Sender: userAddrA, - Amount: math.NewInt(500000), - } - err := wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, sequence, pending) - require.NoError(t, err) - - // Create packet - packet := channeltypes.Packet{ - SourcePort: gmptypes.PortID, - SourceChannel: clientID, - Sequence: sequence, - } - - moduleAddr := wfapp.IFTKeeper.GetModuleAddress() - senderAddr := sdk.MustAccAddressFromBech32(userAddrA) - - // Call the callback - err = wfapp.IFTKeeper.IBCOnTimeoutPacketCallback( - ctx, - packet, - moduleAddr, - moduleAddr.String(), - moduleAddr.String(), - gmptypes.Version, - ) - require.NoError(t, err) - - // Verify pending transfer was removed - exists, err := wfapp.IFTKeeper.PendingTransferStore.Has(ctx, collections.Join(clientID, sequence)) - require.NoError(t, err) - require.False(t, exists) - - // Verify tokens were refunded - balance := wfapp.BankKeeper.GetBalance(ctx, senderAddr, testDenom) - require.True(t, balance.Amount.Equal(math.NewInt(500000))) -} - -// TestCallbacks_IBCOnTimeoutPacketCallback_NoPendingTransfer tests no-op when no pending transfer exists. -func TestCallbacks_IBCOnTimeoutPacketCallback_NoPendingTransfer(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID := createIBCClient(t, ctx, wfapp) - - // Create packet without corresponding pending transfer - packet := channeltypes.Packet{ - SourcePort: gmptypes.PortID, - SourceChannel: clientID, - Sequence: 999, - } - - moduleAddr := wfapp.IFTKeeper.GetModuleAddress() - - // Should return nil (no-op for non-IFT packets) - err := wfapp.IFTKeeper.IBCOnTimeoutPacketCallback( - ctx, - packet, - moduleAddr, - moduleAddr.String(), - moduleAddr.String(), - gmptypes.Version, - ) - require.NoError(t, err) -} - -// TestCallbacks_IBCOnTimeoutPacketCallback_NonIFTPacket tests that non-IFT packets are gracefully ignored. -// This is important because IFT is registered as the ContractKeeper for all GMP callbacks, -// but other applications may also use GMP. IFT must not interfere with their callbacks. -func TestCallbacks_IBCOnTimeoutPacketCallback_NonIFTPacket(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID := createIBCClient(t, ctx, wfapp) - - packet := channeltypes.Packet{ - SourcePort: gmptypes.PortID, - SourceChannel: clientID, - Sequence: 1, - } - - moduleAddr := wfapp.IFTKeeper.GetModuleAddress() - - cases := []struct { - name string - contractAddress string - packetSender string - version string - sourcePort string - }{ - { - name: "ignore: different contract address (other GMP app)", - contractAddress: userAddrA, - packetSender: userAddrA, - version: gmptypes.Version, - sourcePort: gmptypes.PortID, - }, - { - name: "ignore: different packet sender (other GMP app)", - contractAddress: moduleAddr.String(), - packetSender: userAddrA, - version: gmptypes.Version, - sourcePort: gmptypes.PortID, - }, - { - name: "ignore: different version", - contractAddress: moduleAddr.String(), - packetSender: moduleAddr.String(), - version: "other-version", - sourcePort: gmptypes.PortID, - }, - { - name: "ignore: different source port", - contractAddress: moduleAddr.String(), - packetSender: moduleAddr.String(), - version: gmptypes.Version, - sourcePort: "other-port", - }, - } - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - packet.SourcePort = tc.sourcePort - - // Non-IFT packets should be gracefully ignored (return nil, no error) - err := wfapp.IFTKeeper.IBCOnTimeoutPacketCallback( - ctx, - packet, - moduleAddr, - tc.contractAddress, - tc.packetSender, - tc.version, - ) - require.NoError(t, err, "non-IFT packets should be gracefully ignored, not cause errors") - }) - } -} - -// TestCallbacks_IBCReceivePacketCallback tests the IBCReceivePacketCallback handler. -func TestCallbacks_IBCReceivePacketCallback(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - // Should be a no-op and return nil - err := wfapp.IFTKeeper.IBCReceivePacketCallback( - ctx, - nil, // packet - nil, // ack - "", // relayer - "", // contractAddress - ) - require.NoError(t, err) -} - -// TestCallbacks_RefundPendingTransfer tests the RefundPendingTransfer function. -func TestCallbacks_RefundPendingTransfer(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID := createIBCClient(t, ctx, wfapp) - sequence := uint64(42) - - // Create token factory denom - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - - senderAddr := sdk.MustAccAddressFromBech32(userAddrA) - - // Setup pending transfer - pending := types.PendingTransfer{ - Denom: testDenom, - ClientId: clientID, - Sequence: sequence, - Sender: userAddrA, - Amount: math.NewInt(7500000), - } - err := wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, sequence, pending) - require.NoError(t, err) - - // Get balance before refund (should be 0) - balanceBefore := wfapp.BankKeeper.GetBalance(ctx, senderAddr, testDenom) - require.True(t, balanceBefore.Amount.IsZero()) - - // Refund - err = wfapp.IFTKeeper.RefundPendingTransfer(ctx, testDenom, clientID, sequence) - require.NoError(t, err) - - // Verify pending transfer was removed - exists, err := wfapp.IFTKeeper.PendingTransferStore.Has(ctx, collections.Join(clientID, sequence)) - require.NoError(t, err) - require.False(t, exists) - - // Verify tokens were minted back to sender - balanceAfter := wfapp.BankKeeper.GetBalance(ctx, senderAddr, testDenom) - require.True(t, balanceAfter.Amount.Equal(math.NewInt(7500000))) -} - -// TestCallbacks_RefundPendingTransfer_NotFound tests RefundPendingTransfer when transfer not found. -func TestCallbacks_RefundPendingTransfer_NotFound(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID := createIBCClient(t, ctx, wfapp) - - // Create token factory denom - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - - // Try to refund non-existent pending transfer - err := wfapp.IFTKeeper.RefundPendingTransfer(ctx, testDenom, clientID, 999) - require.ErrorIs(t, err, types.ErrPendingTransferNotFound) -} - -// TestCallbacks_MultiplePendingTransfers tests handling multiple pending transfers. -// Note: IBC sequences are unique per channel, so each pending transfer has a unique (clientId, sequence). -func TestCallbacks_MultiplePendingTransfers(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID := createIBCClient(t, ctx, wfapp) - - // Create token factory denoms - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom2) - - // Setup multiple pending transfers with unique sequences - pending1 := types.PendingTransfer{ - Denom: testDenom, - ClientId: clientID, - Sequence: 1, - Sender: userAddrA, - Amount: math.NewInt(100), - } - err := wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, 1, pending1) - require.NoError(t, err) - - pending2 := types.PendingTransfer{ - Denom: testDenom, - ClientId: clientID, - Sequence: 2, - Sender: userAddrB, - Amount: math.NewInt(200), - } - err = wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, 2, pending2) - require.NoError(t, err) - - pending3 := types.PendingTransfer{ - Denom: testDenom2, - ClientId: clientID, - Sequence: 3, // Unique sequence (IBC sequences are unique per channel) - Sender: userAddrA, - Amount: math.NewInt(300), - } - err = wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, 3, pending3) - require.NoError(t, err) - - moduleAddr := wfapp.IFTKeeper.GetModuleAddress() - - // Timeout packet for sequence 1 - packet1 := channeltypes.Packet{ - SourcePort: gmptypes.PortID, - SourceChannel: clientID, - Sequence: 1, - } - - err = wfapp.IFTKeeper.IBCOnTimeoutPacketCallback( - ctx, - packet1, - moduleAddr, - moduleAddr.String(), - moduleAddr.String(), - gmptypes.Version, - ) - require.NoError(t, err) - - // Verify pending1 was removed - exists, err := wfapp.IFTKeeper.PendingTransferStore.Has(ctx, collections.Join(clientID, uint64(1))) - require.NoError(t, err) - require.False(t, exists) - - // pending2 and pending3 should still exist - exists, err = wfapp.IFTKeeper.PendingTransferStore.Has(ctx, collections.Join(clientID, uint64(2))) - require.NoError(t, err) - require.True(t, exists) - - exists, err = wfapp.IFTKeeper.PendingTransferStore.Has(ctx, collections.Join(clientID, uint64(3))) - require.NoError(t, err) - require.True(t, exists) - - // Verify userAddrA got refunded for testDenom - senderAddrA := sdk.MustAccAddressFromBech32(userAddrA) - balance := wfapp.BankKeeper.GetBalance(ctx, senderAddrA, testDenom) - require.True(t, balance.Amount.Equal(math.NewInt(100))) -} diff --git a/prototypes/x/ift/keeper/genesis_test.go b/prototypes/x/ift/keeper/genesis_test.go deleted file mode 100644 index 413602f80f7..00000000000 --- a/prototypes/x/ift/keeper/genesis_test.go +++ /dev/null @@ -1,335 +0,0 @@ -package keeper_test - -import ( - "testing" - - "github.com/cosmos/ibc-go/prototypes/x/ift/types" - "github.com/stretchr/testify/require" - - "cosmossdk.io/collections" - "cosmossdk.io/math" -) - -func TestGenesis_DefaultGenesis(t *testing.T) { - genesis := types.DefaultGenesis() - - require.NotNil(t, genesis) - require.NotNil(t, genesis.Params) - require.Empty(t, genesis.Params.Authority) - require.Empty(t, genesis.Bridges) - require.Empty(t, genesis.PendingTransfers) -} - -func TestGenesis_Validate(t *testing.T) { - cases := []struct { - name string - genesis types.GenesisState - err error - }{ - { - name: "valid default genesis", - genesis: *types.DefaultGenesis(), - }, - { - name: "valid genesis with bridges", - genesis: types.GenesisState{ - Params: types.Params{Authority: adminAddr}, - Bridges: []types.GenesisBridge{ - { - Denom: testDenom, - Bridge: types.IFTBridge{ - ClientId: "attestations-0", - CounterpartyIftAddress: remoteIFTAddrA, - IftSendCallConstructor: types.ConstructorEVM, - }, - }, - }, - PendingTransfers: []types.PendingTransfer{}, - }, - }, - { - name: "valid genesis with pending transfers", - genesis: types.GenesisState{ - Params: types.Params{Authority: adminAddr}, - Bridges: []types.GenesisBridge{}, - PendingTransfers: []types.PendingTransfer{ - { - Denom: testDenom, - ClientId: "attestations-0", - Sequence: 1, - Sender: userAddrA, - Amount: math.NewInt(1000), - }, - }, - }, - }, - { - name: "invalid bridge - empty denom", - genesis: types.GenesisState{ - Params: types.Params{Authority: adminAddr}, - Bridges: []types.GenesisBridge{ - { - Denom: "", - Bridge: types.IFTBridge{ - ClientId: "attestations-0", - CounterpartyIftAddress: remoteIFTAddrA, - IftSendCallConstructor: types.ConstructorEVM, - }, - }, - }, - }, - err: types.ErrInvalidDenom, - }, - { - name: "invalid bridge - empty client id", - genesis: types.GenesisState{ - Params: types.Params{Authority: adminAddr}, - Bridges: []types.GenesisBridge{ - { - Denom: testDenom, - Bridge: types.IFTBridge{ - ClientId: "", - CounterpartyIftAddress: remoteIFTAddrA, - IftSendCallConstructor: types.ConstructorEVM, - }, - }, - }, - }, - err: types.ErrInvalidClientID, - }, - { - name: "invalid pending transfer - empty denom", - genesis: types.GenesisState{ - Params: types.Params{Authority: adminAddr}, - Bridges: []types.GenesisBridge{}, - PendingTransfers: []types.PendingTransfer{ - { - Denom: "", - ClientId: "attestations-0", - Sequence: 1, - Sender: userAddrA, - Amount: math.NewInt(1000), - }, - }, - }, - err: types.ErrInvalidDenom, - }, - { - name: "invalid pending transfer - empty client id", - genesis: types.GenesisState{ - Params: types.Params{Authority: adminAddr}, - Bridges: []types.GenesisBridge{}, - PendingTransfers: []types.PendingTransfer{ - { - Denom: testDenom, - ClientId: "", - Sequence: 1, - Sender: userAddrA, - Amount: math.NewInt(1000), - }, - }, - }, - err: types.ErrInvalidClientID, - }, - } - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - err := tc.genesis.Validate() - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - } else { - require.NoError(t, err) - } - }) - } -} - -func TestGenesis_InitGenesis(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID1 := createIBCClient(t, ctx, wfapp) - clientID2 := createIBCClient(t, ctx, wfapp) - - genesis := types.GenesisState{ - Params: types.Params{Authority: adminAddr}, - Bridges: []types.GenesisBridge{ - { - Denom: testDenom, - Bridge: types.IFTBridge{ - ClientId: clientID1, - CounterpartyIftAddress: remoteIFTAddrA, - IftSendCallConstructor: types.ConstructorEVM, - }, - }, - { - Denom: testDenom2, - Bridge: types.IFTBridge{ - ClientId: clientID2, - CounterpartyIftAddress: remoteIFTAddrB, - IftSendCallConstructor: types.ConstructorCosmos, - }, - }, - }, - PendingTransfers: []types.PendingTransfer{ - { - Denom: testDenom, - ClientId: clientID1, - Sequence: 1, - Sender: userAddrA, - Amount: math.NewInt(1000), - }, - { - Denom: testDenom, - ClientId: clientID1, - Sequence: 2, - Sender: userAddrB, - Amount: math.NewInt(2000), - }, - }, - } - - // Initialize genesis - wfapp.IFTKeeper.InitGenesis(ctx, genesis) - - // Verify params - params, err := wfapp.IFTKeeper.ParamsStore.Get(ctx) - require.NoError(t, err) - require.Equal(t, adminAddr, params.Authority) - - // Verify bridges - bridge1, err := wfapp.IFTKeeper.IFTBridgeStore.Get(ctx, collections.Join(testDenom, clientID1)) - require.NoError(t, err) - require.Equal(t, remoteIFTAddrA, bridge1.CounterpartyIftAddress) - require.Equal(t, types.ConstructorEVM, bridge1.IftSendCallConstructor) - - bridge2, err := wfapp.IFTKeeper.IFTBridgeStore.Get(ctx, collections.Join(testDenom2, clientID2)) - require.NoError(t, err) - require.Equal(t, remoteIFTAddrB, bridge2.CounterpartyIftAddress) - require.Equal(t, types.ConstructorCosmos, bridge2.IftSendCallConstructor) - - // Verify pending transfers - pending1, err := wfapp.IFTKeeper.PendingTransferStore.Get(ctx, collections.Join(clientID1, uint64(1))) - require.NoError(t, err) - require.Equal(t, userAddrA, pending1.Sender) - require.True(t, math.NewInt(1000).Equal(pending1.Amount)) - - pending2, err := wfapp.IFTKeeper.PendingTransferStore.Get(ctx, collections.Join(clientID1, uint64(2))) - require.NoError(t, err) - require.Equal(t, userAddrB, pending2.Sender) - require.True(t, math.NewInt(2000).Equal(pending2.Amount)) -} - -func TestGenesis_ExportGenesis(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID1 := createIBCClient(t, ctx, wfapp) - clientID2 := createIBCClient(t, ctx, wfapp) - - // Set up state - err := wfapp.IFTKeeper.ParamsStore.Set(ctx, types.Params{Authority: adminAddr}) - require.NoError(t, err) - - bridge1 := types.IFTBridge{ - ClientId: clientID1, - CounterpartyIftAddress: remoteIFTAddrA, - IftSendCallConstructor: types.ConstructorEVM, - } - err = wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(testDenom, clientID1), bridge1) - require.NoError(t, err) - - bridge2 := types.IFTBridge{ - ClientId: clientID2, - CounterpartyIftAddress: remoteIFTAddrB, - IftSendCallConstructor: types.ConstructorCosmos, - } - err = wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(testDenom2, clientID2), bridge2) - require.NoError(t, err) - - pending := types.PendingTransfer{ - Denom: testDenom, - ClientId: clientID1, - Sequence: 42, - Sender: userAddrA, - Amount: math.NewInt(5000), - } - err = wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID1, 42, pending) - require.NoError(t, err) - - // Export genesis - exportedGenesis := wfapp.IFTKeeper.ExportGenesis(ctx) - - // Verify exported state - require.Equal(t, adminAddr, exportedGenesis.Params.Authority) - require.Len(t, exportedGenesis.Bridges, 2) - require.Len(t, exportedGenesis.PendingTransfers, 1) - - // Verify pending transfer - require.Equal(t, testDenom, exportedGenesis.PendingTransfers[0].Denom) - require.Equal(t, clientID1, exportedGenesis.PendingTransfers[0].ClientId) - require.Equal(t, uint64(42), exportedGenesis.PendingTransfers[0].Sequence) - require.Equal(t, userAddrA, exportedGenesis.PendingTransfers[0].Sender) - require.True(t, math.NewInt(5000).Equal(exportedGenesis.PendingTransfers[0].Amount)) -} - -func TestGenesis_InitExportRoundTrip(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID := createIBCClient(t, ctx, wfapp) - - originalGenesis := types.GenesisState{ - Params: types.Params{Authority: adminAddr}, - Bridges: []types.GenesisBridge{ - { - Denom: testDenom, - Bridge: types.IFTBridge{ - ClientId: clientID, - CounterpartyIftAddress: remoteIFTAddrA, - IftSendCallConstructor: types.ConstructorEVM, - }, - }, - }, - PendingTransfers: []types.PendingTransfer{ - { - Denom: testDenom, - ClientId: clientID, - Sequence: 1, - Sender: userAddrA, - Amount: math.NewInt(12345), - }, - }, - } - - // Initialize with genesis - wfapp.IFTKeeper.InitGenesis(ctx, originalGenesis) - - // Export genesis - exportedGenesis := wfapp.IFTKeeper.ExportGenesis(ctx) - - // Verify round-trip - require.Equal(t, originalGenesis.Params.Authority, exportedGenesis.Params.Authority) - require.Len(t, exportedGenesis.Bridges, 1) - require.Equal(t, originalGenesis.Bridges[0].Denom, exportedGenesis.Bridges[0].Denom) - require.Equal(t, originalGenesis.Bridges[0].Bridge.ClientId, exportedGenesis.Bridges[0].Bridge.ClientId) - require.Equal(t, originalGenesis.Bridges[0].Bridge.CounterpartyIftAddress, exportedGenesis.Bridges[0].Bridge.CounterpartyIftAddress) - require.Equal(t, originalGenesis.Bridges[0].Bridge.IftSendCallConstructor, exportedGenesis.Bridges[0].Bridge.IftSendCallConstructor) - - require.Len(t, exportedGenesis.PendingTransfers, 1) - require.Equal(t, originalGenesis.PendingTransfers[0].Denom, exportedGenesis.PendingTransfers[0].Denom) - require.Equal(t, originalGenesis.PendingTransfers[0].ClientId, exportedGenesis.PendingTransfers[0].ClientId) - require.Equal(t, originalGenesis.PendingTransfers[0].Sequence, exportedGenesis.PendingTransfers[0].Sequence) - require.Equal(t, originalGenesis.PendingTransfers[0].Sender, exportedGenesis.PendingTransfers[0].Sender) - require.True(t, originalGenesis.PendingTransfers[0].Amount.Equal(exportedGenesis.PendingTransfers[0].Amount)) -} - -func TestGenesis_EmptyGenesis(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - // Export genesis from fresh state (should match default genesis structure) - exportedGenesis := wfapp.IFTKeeper.ExportGenesis(ctx) - - // Should have default params set during setupIntegrationApp - require.NotEmpty(t, exportedGenesis.Params.Authority) - require.Empty(t, exportedGenesis.Bridges) - require.Empty(t, exportedGenesis.PendingTransfers) -} diff --git a/prototypes/x/ift/keeper/keeper_test.gooo b/prototypes/x/ift/keeper/keeper_test.gooo deleted file mode 100644 index e479c334088..00000000000 --- a/prototypes/x/ift/keeper/keeper_test.gooo +++ /dev/null @@ -1,359 +0,0 @@ -package keeper_test - -import ( - "fmt" - "testing" - "time" - - dbm "github.com/cosmos/cosmos-db" - ifttypes "github.com/cosmos/ibc-go/prototypes/x/ift/types" - "github.com/cosmos/sandbox-ledger/app" - "github.com/cosmos/sandbox-ledger/testutil" - ethcrypto "github.com/ethereum/go-ethereum/crypto" - "github.com/stretchr/testify/require" - - "cosmossdk.io/collections" - "cosmossdk.io/log/v2" - "cosmossdk.io/math" - - "github.com/cosmos/cosmos-sdk/baseapp" - "github.com/cosmos/cosmos-sdk/runtime" - simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - consensusparamkeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper" - consensusparamtypes "github.com/cosmos/cosmos-sdk/x/consensus/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - - cmtabcitypes "github.com/cometbft/cometbft/abci/types" - - clientv2types "github.com/cosmos/ibc-go/v11/modules/core/02-client/v2/types" - ibcexported "github.com/cosmos/ibc-go/v11/modules/core/exported" - ibcattestations "github.com/cosmos/ibc-go/v11/modules/light-clients/attestations" -) - -const ( - // Test addresses - adminAddr = "cosmos1nsh9vj9znccakn6xwlhlwx92acdt79yeqrkz4y" - userAddrA = "cosmos1uu635yk0hz3cvrypnryrggltrjq7975jrmeg97" - userAddrB = "cosmos1y6xz2ggfc0pcsmyjlekh0j9pxh6hk87yfwcjct" - invalidAddr = "invalid" - - // Test denoms - testDenom = "testtoken" - testDenom2 = "testtoken2" - - // Remote contract addresses (EVM) - remoteIFTAddrA = "0x1111111111111111111111111111111111111111" - remoteIFTAddrB = "0x2222222222222222222222222222222222222222" - - // Remote Solana addresses (valid base58 encoded 32-byte public keys) - solanaIFTProgramID = "BPFLoaderUpgradeab1e11111111111111111111111" - solanaGMPProgramID = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA" - solanaMintPubkey = "So11111111111111111111111111111111111111112" - solanaReceiverAddr = "11111111111111111111111111111111" -) - -func setupIntegrationApp(tb testing.TB) (*app.SandboxApp, sdk.Context) { - tb.Helper() - testutil.SafeSetAddressPrefixes() - - db := dbm.NewMemDB() - wfapp := app.NewApp(log.NewNopLogger(), db, nil, false, simtestutil.NewAppOptionsWithFlagHome(tb.TempDir()), baseapp.SetChainID("chain-id")) - wfapp.SetInitChainer(func(ctx sdk.Context, _ *cmtabcitypes.RequestInitChain) (*cmtabcitypes.ResponseInitChain, error) { - for _, mod := range wfapp.ModuleManager.OrderInitGenesis { - if m, ok := wfapp.ModuleManager.Modules[mod].(module.HasGenesis); ok { - m.InitGenesis(ctx, wfapp.AppCodec(), m.DefaultGenesis(wfapp.AppCodec())) - } - } - return &cmtabcitypes.ResponseInitChain{}, nil - }) - - consensusParamsKeeper := consensusparamkeeper.NewKeeper(wfapp.AppCodec(), runtime.NewKVStoreService(wfapp.GetKey(consensusparamtypes.StoreKey)), authtypes.NewModuleAddress("gov").String(), runtime.EventService{}) - wfapp.SetParamStore(consensusParamsKeeper.ParamsStore) - - if err := wfapp.LoadLatestVersion(); err != nil { - panic(fmt.Errorf("failed to load application version from store: %w", err)) - } - - _, err := wfapp.InitChain(&cmtabcitypes.RequestInitChain{ChainId: "chain-id", ConsensusParams: simtestutil.DefaultConsensusParams}) - require.NoError(tb, err) - - ctx := wfapp.NewContext(false). - WithChainID("chain-id"). - WithBlockTime(time.Now()). - WithBlockHeight(1) - - // Set IFT params with admin as authority - require.NoError(tb, wfapp.IFTKeeper.ParamsStore.Set(ctx, ifttypes.Params{ - Authority: authtypes.NewModuleAddress(govtypes.ModuleName).String(), - })) - - return wfapp, ctx -} - -// createIBCClient creates an attestations IBC client for use as a test -// counterparty in IFT tests. IFT only needs a valid client ID; it doesn't -// exercise the light-client verify paths, so a single-attestor client with -// quorum 1 is enough to satisfy CreateClient + SetClientCounterparty. -func createIBCClient(tb testing.TB, ctx sdk.Context, wfapp *app.SandboxApp) string { - tb.Helper() - - // Generate a fresh EOA address to use as the attestor — the value isn't - // verified during client creation, but must be a valid hex address per - // attestations.ClientState.Validate(). - privKey, err := ethcrypto.GenerateKey() - require.NoError(tb, err) - attestor := ethcrypto.PubkeyToAddress(privKey.PublicKey).Hex() - - clientStateBz := wfapp.AppCodec().MustMarshal(ibcattestations.NewClientState( - []string{attestor}, - 1, // min required signatures - 1, // latest height - )) - consensusStateBz := wfapp.AppCodec().MustMarshal(&ibcattestations.ConsensusState{ - Timestamp: uint64(time.Now().UnixNano()), - }) - - clientID, err := wfapp.IBCKeeper.ClientKeeper.CreateClient( - ctx, ibcexported.Attestations, clientStateBz, consensusStateBz, - ) - require.NoError(tb, err) - - wfapp.IBCKeeper.ClientV2Keeper.SetClientCounterparty(ctx, clientID, clientv2types.CounterpartyInfo{ClientId: clientID}) - wfapp.IBCKeeper.ChannelKeeperV2.SetNextSequenceSend(ctx, clientID, 1) - - return clientID -} - -//nolint:unparam // creator kept for test flexibility -func createTokenFactoryDenom(tb testing.TB, ctx sdk.Context, wfapp *app.SandboxApp, creator, denom string) { - tb.Helper() - err := wfapp.TokenFactoryKeeper.CreateDenom(ctx, creator, denom) - require.NoError(tb, err) -} - -//nolint:unparam // denom kept for test flexibility -func mintTokens(tb testing.TB, ctx sdk.Context, wfapp *app.SandboxApp, denom string, amount math.Int, to sdk.AccAddress) { - tb.Helper() - err := wfapp.TokenFactoryKeeper.MintTo(ctx, denom, amount, to) - require.NoError(tb, err) -} - -// TestKeeper_SetGetIFTBridge tests basic bridge storage operations -func TestKeeper_SetGetIFTBridge(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID := createIBCClient(t, ctx, wfapp) - - bridge := ifttypes.IFTBridge{ - ClientId: clientID, - CounterpartyIftAddress: remoteIFTAddrA, - IftSendCallConstructor: ifttypes.ConstructorEVM, - } - - // Set bridge - err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(testDenom, clientID), bridge) - require.NoError(t, err) - - // Get bridge - gotBridge, err := wfapp.IFTKeeper.IFTBridgeStore.Get(ctx, collections.Join(testDenom, clientID)) - require.NoError(t, err) - require.Equal(t, bridge.ClientId, gotBridge.ClientId) - require.Equal(t, bridge.CounterpartyIftAddress, gotBridge.CounterpartyIftAddress) - require.Equal(t, bridge.IftSendCallConstructor, gotBridge.IftSendCallConstructor) - - // Has bridge - exists, err := wfapp.IFTKeeper.IFTBridgeStore.Has(ctx, collections.Join(testDenom, clientID)) - require.NoError(t, err) - require.True(t, exists) - - // Remove bridge - err = wfapp.IFTKeeper.IFTBridgeStore.Remove(ctx, collections.Join(testDenom, clientID)) - require.NoError(t, err) - - // Verify removed - exists, err = wfapp.IFTKeeper.IFTBridgeStore.Has(ctx, collections.Join(testDenom, clientID)) - require.NoError(t, err) - require.False(t, exists) -} - -// TestKeeper_SetGetPendingTransfer tests pending transfer storage operations -func TestKeeper_SetGetPendingTransfer(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID := createIBCClient(t, ctx, wfapp) - sequence := uint64(1) - - pending := ifttypes.PendingTransfer{ - Denom: testDenom, - ClientId: clientID, - Sequence: sequence, - Sender: userAddrA, - Amount: math.NewInt(1000000), - } - - // Set pending transfer - err := wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, sequence, pending) - require.NoError(t, err) - - // Get pending transfer - gotPending, err := wfapp.IFTKeeper.PendingTransferStore.Get(ctx, collections.Join(clientID, sequence)) - require.NoError(t, err) - require.Equal(t, pending.Denom, gotPending.Denom) - require.Equal(t, pending.ClientId, gotPending.ClientId) - require.Equal(t, pending.Sequence, gotPending.Sequence) - require.Equal(t, pending.Sender, gotPending.Sender) - require.True(t, pending.Amount.Equal(gotPending.Amount)) - - // Has pending transfer - exists, err := wfapp.IFTKeeper.PendingTransferStore.Has(ctx, collections.Join(clientID, sequence)) - require.NoError(t, err) - require.True(t, exists) - - // Remove pending transfer - err = wfapp.IFTKeeper.RemovePendingTransfer(ctx, clientID, sequence) - require.NoError(t, err) - - // Verify removed - exists, err = wfapp.IFTKeeper.PendingTransferStore.Has(ctx, collections.Join(clientID, sequence)) - require.NoError(t, err) - require.False(t, exists) -} - -// TestKeeper_Params tests params storage -func TestKeeper_Params(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - params := ifttypes.Params{ - Authority: adminAddr, - } - - // Set params - err := wfapp.IFTKeeper.ParamsStore.Set(ctx, params) - require.NoError(t, err) - - // Get params - gotParams, err := wfapp.IFTKeeper.ParamsStore.Get(ctx) - require.NoError(t, err) - require.Equal(t, params.Authority, gotParams.Authority) -} - -// TestKeeper_HasPendingTransfersForBridge tests the pending transfer check for bridge removal -func TestKeeper_HasPendingTransfersForBridge(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID1 := createIBCClient(t, ctx, wfapp) - clientID2 := createIBCClient(t, ctx, wfapp) - - // Initially no pending transfers - hasPending, err := wfapp.IFTKeeper.HasPendingTransfersForBridge(ctx, testDenom, clientID1) - require.NoError(t, err) - require.False(t, hasPending, "should have no pending transfers initially") - - // Add a pending transfer for (testDenom, clientID1) - pending1 := ifttypes.PendingTransfer{ - Denom: testDenom, - ClientId: clientID1, - Sequence: 1, - Sender: userAddrA, - Amount: math.NewInt(1000000), - } - err = wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID1, 1, pending1) - require.NoError(t, err) - - // Now should have pending transfers for (testDenom, clientID1) - hasPending, err = wfapp.IFTKeeper.HasPendingTransfersForBridge(ctx, testDenom, clientID1) - require.NoError(t, err) - require.True(t, hasPending, "should have pending transfers after adding one") - - // Different client should not have pending transfers - hasPending, err = wfapp.IFTKeeper.HasPendingTransfersForBridge(ctx, testDenom, clientID2) - require.NoError(t, err) - require.False(t, hasPending, "different client should have no pending transfers") - - // Different denom should not have pending transfers - hasPending, err = wfapp.IFTKeeper.HasPendingTransfersForBridge(ctx, testDenom2, clientID1) - require.NoError(t, err) - require.False(t, hasPending, "different denom should have no pending transfers") - - // Add multiple pending transfers for same bridge - pending2 := ifttypes.PendingTransfer{ - Denom: testDenom, - ClientId: clientID1, - Sequence: 2, - Sender: userAddrB, - Amount: math.NewInt(2000000), - } - err = wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID1, 2, pending2) - require.NoError(t, err) - - // Still should have pending transfers - hasPending, err = wfapp.IFTKeeper.HasPendingTransfersForBridge(ctx, testDenom, clientID1) - require.NoError(t, err) - require.True(t, hasPending, "should have pending transfers with multiple entries") - - // Remove first pending transfer - err = wfapp.IFTKeeper.RemovePendingTransfer(ctx, clientID1, 1) - require.NoError(t, err) - - // Should still have pending (second one exists) - hasPending, err = wfapp.IFTKeeper.HasPendingTransfersForBridge(ctx, testDenom, clientID1) - require.NoError(t, err) - require.True(t, hasPending, "should still have pending after removing one") - - // Remove second pending transfer - err = wfapp.IFTKeeper.RemovePendingTransfer(ctx, clientID1, 2) - require.NoError(t, err) - - // Now should have no pending transfers - hasPending, err = wfapp.IFTKeeper.HasPendingTransfersForBridge(ctx, testDenom, clientID1) - require.NoError(t, err) - require.False(t, hasPending, "should have no pending transfers after removing all") -} - -// TestKeeper_GetPendingTransferByClientSequence tests the O(1) index lookup -func TestKeeper_GetPendingTransferByClientSequence(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID := createIBCClient(t, ctx, wfapp) - - // Initially not found - _, found, err := wfapp.IFTKeeper.GetPendingTransferByClientSequence(ctx, clientID, 1) - require.NoError(t, err) - require.False(t, found, "should not find non-existent transfer") - - // Add pending transfer - pending := ifttypes.PendingTransfer{ - Denom: testDenom, - ClientId: clientID, - Sequence: 1, - Sender: userAddrA, - Amount: math.NewInt(1000000), - } - err = wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, 1, pending) - require.NoError(t, err) - - // Now should find it via index - gotPending, found, err := wfapp.IFTKeeper.GetPendingTransferByClientSequence(ctx, clientID, 1) - require.NoError(t, err) - require.True(t, found, "should find transfer via index") - require.Equal(t, testDenom, gotPending.Denom) - require.Equal(t, clientID, gotPending.ClientId) - require.Equal(t, uint64(1), gotPending.Sequence) - require.Equal(t, userAddrA, gotPending.Sender) - - // Different sequence should not be found - _, found, err = wfapp.IFTKeeper.GetPendingTransferByClientSequence(ctx, clientID, 999) - require.NoError(t, err) - require.False(t, found, "should not find different sequence") - - // Remove and verify index is also cleaned up - err = wfapp.IFTKeeper.RemovePendingTransfer(ctx, clientID, 1) - require.NoError(t, err) - - _, found, err = wfapp.IFTKeeper.GetPendingTransferByClientSequence(ctx, clientID, 1) - require.NoError(t, err) - require.False(t, found, "should not find after removal") -} diff --git a/prototypes/x/ift/keeper/msg_server_test.gooo b/prototypes/x/ift/keeper/msg_server_test.gooo deleted file mode 100644 index 27c9fae6129..00000000000 --- a/prototypes/x/ift/keeper/msg_server_test.gooo +++ /dev/null @@ -1,1147 +0,0 @@ -package keeper_test - -import ( - "math/big" - "testing" - "time" - - "github.com/cosmos/ibc-go/prototypes/x/ift/keeper" - "github.com/cosmos/ibc-go/prototypes/x/ift/types" - "github.com/cosmos/sandbox-ledger/app" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/crypto" - "github.com/stretchr/testify/require" - - "cosmossdk.io/collections" - "cosmossdk.io/math" - - sdk "github.com/cosmos/cosmos-sdk/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - - gmptypes "github.com/cosmos/ibc-go/v11/modules/apps/27-gmp/types" - channelv2types "github.com/cosmos/ibc-go/v11/modules/core/04-channel/v2/types" -) - -// TestMsgServer_RegisterIFTBridge tests the RegisterIFTBridge message handler. -func TestMsgServer_RegisterIFTBridge(t *testing.T) { - var ( - signer string - denom string - clientID string - counterpartyAddress string - ) - - cases := []struct { - name string - err error - malleate func(wfapp *app.SandboxApp, ctx sdk.Context) - }{ - { - name: "success with evm constructor", - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) {}, - }, - { - name: "success with cosmos constructor", - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { - // Use different denom to avoid duplicate - denom = testDenom2 - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, denom) - }, - }, - { - name: "failure: unauthorized - not authority", - err: types.ErrUnauthorized, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { - signer = userAddrA - }, - }, - { - name: "failure: denom not found in token factory", - err: types.ErrDenomNotFound, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { - denom = "nonexistent" - }, - }, - { - name: "success: bridge update (override existing)", - err: nil, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { - // Pre-register the bridge with different counterparty address - bridge := types.IFTBridge{ - ClientId: clientID, - CounterpartyIftAddress: "0x1111111111111111111111111111111111111111", - IftSendCallConstructor: types.ConstructorEVM, - } - err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(denom, clientID), bridge) - require.NoError(t, err) - }, - }, - { - name: "failure: invalid constructor type", - err: types.ErrInvalidConstructorType, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { - // Will be set via message field - }, - }, - { - name: "failure: IBC client not found", - err: types.ErrInvalidClientID, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { - clientID = "nonexistent-client" - }, - }, - { - name: "failure: empty counterparty address", - err: types.ErrInvalidReceiver, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { - counterpartyAddress = "" - }, - }, - { - name: "failure: invalid EVM counterparty address format", - err: types.ErrInvalidReceiver, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { - counterpartyAddress = "not-a-valid-evm-address" - }, - }, - } - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) - - // Reset defaults - signer = authtypes.NewModuleAddress(govtypes.ModuleName).String() - denom = testDenom - clientID = createIBCClient(t, ctx, wfapp) - counterpartyAddress = remoteIFTAddrA - - // Create token factory denom - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - - tc.malleate(wfapp, ctx) - - constructorType := types.ConstructorEVM - if tc.name == "success with cosmos constructor" { - constructorType = types.ConstructorCosmos - } - if tc.name == "failure: invalid constructor type" { - constructorType = "invalid" - } - - msg := &types.MsgRegisterIFTBridge{ - Signer: signer, - Denom: denom, - ClientId: clientID, - CounterpartyIftAddress: counterpartyAddress, - IftSendCallConstructor: constructorType, - } - - _, err := ms.RegisterIFTBridge(ctx, msg) - - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - return - } - - require.NoError(t, err) - - // Verify bridge was stored - bridge, err := wfapp.IFTKeeper.IFTBridgeStore.Get(ctx, collections.Join(denom, clientID)) - require.NoError(t, err) - require.Equal(t, clientID, bridge.ClientId) - require.Equal(t, counterpartyAddress, bridge.CounterpartyIftAddress) - require.Equal(t, constructorType, bridge.IftSendCallConstructor) - }) - } -} - -// TestMsgServer_RemoveIFTBridge tests the RemoveIFTBridge message handler. -func TestMsgServer_RemoveIFTBridge(t *testing.T) { - var ( - signer string - denom string - clientID string - ) - - cases := []struct { - name string - err error - malleate func(wfapp *app.SandboxApp, ctx sdk.Context) - }{ - { - name: "success", - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) {}, - }, - { - name: "failure: unauthorized", - err: types.ErrUnauthorized, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { - signer = userAddrA - }, - }, - { - name: "failure: bridge not found", - err: types.ErrBridgeNotFound, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { - // Remove the bridge before the test - err := wfapp.IFTKeeper.IFTBridgeStore.Remove(ctx, collections.Join(denom, clientID)) - require.NoError(t, err) - }, - }, - { - name: "failure: has pending transfers", - err: types.ErrBridgeHasPendingTransfers, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { - // Create a pending transfer for this bridge - pending := types.PendingTransfer{ - Denom: denom, - ClientId: clientID, - Sequence: 1, - Sender: userAddrA, - Amount: math.NewInt(1000000), - } - err := wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, 1, pending) - require.NoError(t, err) - }, - }, - } - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) - - // Reset defaults - signer = authtypes.NewModuleAddress(govtypes.ModuleName).String() - denom = testDenom - clientID = createIBCClient(t, ctx, wfapp) - - // Create token factory denom - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - - // Pre-register bridge - bridge := types.IFTBridge{ - ClientId: clientID, - CounterpartyIftAddress: remoteIFTAddrA, - IftSendCallConstructor: types.ConstructorEVM, - } - err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(denom, clientID), bridge) - require.NoError(t, err) - - tc.malleate(wfapp, ctx) - - msg := &types.MsgRemoveIFTBridge{ - Signer: signer, - Denom: denom, - ClientId: clientID, - } - - _, err = ms.RemoveIFTBridge(ctx, msg) - - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - return - } - - require.NoError(t, err) - - // Verify bridge was removed - exists, err := wfapp.IFTKeeper.IFTBridgeStore.Has(ctx, collections.Join(denom, clientID)) - require.NoError(t, err) - require.False(t, exists) - }) - } -} - -// TestMsgServer_IFTTransfer tests the IFTTransfer message handler. -func TestMsgServer_IFTTransfer(t *testing.T) { - var ( - signer string - denom string - clientID string - receiver string - amount math.Int - ) - - cases := []struct { - name string - err error - malleate func(wfapp *app.SandboxApp, ctx sdk.Context) - }{ - // Note: success case requires full GMP infrastructure which is tested in e2e tests - { - name: "failure: invalid denom - empty", - err: types.ErrInvalidDenom, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { - denom = "" - }, - }, - { - name: "failure: invalid client id - empty", - err: types.ErrInvalidClientID, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { - clientID = "" - }, - }, - { - name: "failure: invalid receiver - empty", - err: types.ErrInvalidReceiver, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { - receiver = "" - }, - }, - { - name: "failure: invalid amount - zero", - err: types.ErrInvalidAmount, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { - amount = math.ZeroInt() - }, - }, - { - name: "failure: invalid sender address", - err: types.ErrInvalidSigner, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { - signer = invalidAddr - }, - }, - { - name: "failure: bridge not found", - err: types.ErrBridgeNotFound, - malleate: func(wfapp *app.SandboxApp, ctx sdk.Context) { - // Remove bridge - err := wfapp.IFTKeeper.IFTBridgeStore.Remove(ctx, collections.Join(denom, clientID)) - require.NoError(t, err) - }, - }, - } - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) - - // Reset defaults - signer = userAddrA - denom = testDenom - receiver = remoteIFTAddrA - amount = math.NewInt(1000000) - - // Setup - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - clientID = createIBCClient(t, ctx, wfapp) - - // Register bridge - bridge := types.IFTBridge{ - ClientId: clientID, - CounterpartyIftAddress: remoteIFTAddrB, - IftSendCallConstructor: types.ConstructorEVM, - } - err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(denom, clientID), bridge) - require.NoError(t, err) - - // Mint tokens to sender - senderAddr := sdk.MustAccAddressFromBech32(userAddrA) - mintTokens(t, ctx, wfapp, testDenom, math.NewInt(2000000), senderAddr) - - tc.malleate(wfapp, ctx) - - timeout := uint64(time.Now().Add(30 * time.Second).Unix()) - msg := &types.MsgIFTTransfer{ - Signer: signer, - Denom: denom, - ClientId: clientID, - Receiver: receiver, - Amount: amount, - TimeoutTimestamp: timeout, - } - - resp, err := ms.IFTTransfer(ctx, msg) - - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - return - } - - require.NoError(t, err) - require.NotNil(t, resp) - require.Positive(t, resp.Sequence) - - // Verify pending transfer was stored - pending, err := wfapp.IFTKeeper.PendingTransferStore.Get(ctx, collections.Join(clientID, resp.Sequence)) - require.NoError(t, err) - require.Equal(t, denom, pending.Denom) - require.Equal(t, clientID, pending.ClientId) - require.Equal(t, resp.Sequence, pending.Sequence) - require.Equal(t, signer, pending.Sender) - require.True(t, amount.Equal(pending.Amount)) - }) - } -} - -// TestMsgServer_UpdateParams tests the UpdateParams message handler. -func TestMsgServer_UpdateParams(t *testing.T) { - cases := []struct { - name string - authority string - newAuthority string - err error - }{ - { - name: "success", - authority: authtypes.NewModuleAddress(govtypes.ModuleName).String(), - newAuthority: userAddrB, - }, - { - name: "failure: unauthorized", - authority: userAddrA, - newAuthority: userAddrB, - err: types.ErrUnauthorized, - }, - { - name: "failure: invalid new authority format", - authority: authtypes.NewModuleAddress(govtypes.ModuleName).String(), - newAuthority: "invalid-address", - err: types.ErrInvalidSigner, - }, - { - name: "failure: empty new authority", - authority: authtypes.NewModuleAddress(govtypes.ModuleName).String(), - newAuthority: "", - err: types.ErrInvalidSigner, - }, - } - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) - - msg := &types.MsgUpdateParams{ - Authority: tc.authority, - Params: types.Params{ - Authority: tc.newAuthority, - }, - } - - _, err := ms.UpdateParams(ctx, msg) - - if tc.err != nil { - require.ErrorIs(t, err, tc.err) - return - } - - require.NoError(t, err) - - // Verify params were updated - params, err := wfapp.IFTKeeper.ParamsStore.Get(ctx) - require.NoError(t, err) - require.Equal(t, tc.newAuthority, params.Authority) - }) - } -} - -// TestMsgServer_IFTMint_ValidationErrors tests IFTMint validation errors. -func TestMsgServer_IFTMint_ValidationErrors(t *testing.T) { - cases := []struct { - name string - denom string - amount math.Int - err error - }{ - { - name: "failure: invalid denom - empty", - denom: "", - amount: math.NewInt(1000), - err: types.ErrInvalidDenom, - }, - { - name: "failure: invalid amount - zero", - denom: testDenom, - amount: math.ZeroInt(), - err: types.ErrInvalidAmount, - }, - { - name: "failure: invalid amount - negative", - denom: testDenom, - amount: math.NewInt(-100), - err: types.ErrInvalidAmount, - }, - } - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) - - msg := &types.MsgIFTMint{ - Signer: userAddrA, - Denom: tc.denom, - Receiver: userAddrB, - Amount: tc.amount, - } - - _, err := ms.IFTMint(ctx, msg) - require.ErrorIs(t, err, tc.err) - }) - } -} - -// TestMsgServer_IFTMint_InvalidSigner tests invalid signer addresses -func TestMsgServer_IFTMint_InvalidSigner(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) - - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - - msg := &types.MsgIFTMint{ - Signer: invalidAddr, - Denom: testDenom, - Receiver: userAddrB, - Amount: math.NewInt(1000), - } - - _, err := ms.IFTMint(ctx, msg) - require.ErrorIs(t, err, types.ErrInvalidSigner) -} - -// TestMsgServer_IFTMint_InvalidReceiver tests invalid receiver addresses -func TestMsgServer_IFTMint_InvalidReceiver(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) - - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - - msg := &types.MsgIFTMint{ - Signer: userAddrA, - Denom: testDenom, - Receiver: invalidAddr, - Amount: math.NewInt(1000), - } - - _, err := ms.IFTMint(ctx, msg) - require.ErrorIs(t, err, types.ErrInvalidReceiver) -} - -// TestMsgServer_IFTMint_UnauthorizedSender tests that non-ICS27 accounts cannot mint -func TestMsgServer_IFTMint_UnauthorizedSender(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) - - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - - // Use a regular account (not an ICS27 account) - msg := &types.MsgIFTMint{ - Signer: userAddrA, // Regular account, not ICS27 - Denom: testDenom, - Receiver: userAddrB, - Amount: math.NewInt(1000), - } - - _, err := ms.IFTMint(ctx, msg) - // Should fail because userAddrA is not an ICS27 account - require.ErrorIs(t, err, types.ErrUnauthorizedSender) -} - -// TestMsgServer_IFTMint_WrongCounterpartySender tests that GMP ICA with wrong sender cannot mint -func TestMsgServer_IFTMint_WrongCounterpartySender(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) - - clientID := createIBCClient(t, ctx, wfapp) - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - - // Register bridge with counterparty address remoteIFTAddrA - signer := authtypes.NewModuleAddress(govtypes.ModuleName).String() - _, err := ms.RegisterIFTBridge(ctx, &types.MsgRegisterIFTBridge{ - Signer: signer, - Denom: testDenom, - ClientId: clientID, - CounterpartyIftAddress: remoteIFTAddrA, - IftSendCallConstructor: types.ConstructorEVM, - }) - require.NoError(t, err) - - // Create a GMP ICA with WRONG sender address (remoteIFTAddrB instead of remoteIFTAddrA) - wrongSenderAccountID := gmptypes.NewAccountIdentifier(clientID, remoteIFTAddrB, nil) - icaAddr, err := gmptypes.BuildAddressPredictable(&wrongSenderAccountID) - require.NoError(t, err) - - // Register the ICA in GMP keeper - ics27Account := gmptypes.NewICS27Account(icaAddr.String(), &wrongSenderAccountID) - err = wfapp.GMPKeeper.AccountsByAddress.Set(ctx, icaAddr, ics27Account) - require.NoError(t, err) - - // Try to mint using the ICA with wrong sender - msg := &types.MsgIFTMint{ - Signer: icaAddr.String(), - Denom: testDenom, - Receiver: userAddrB, - Amount: math.NewInt(1000), - } - - _, err = ms.IFTMint(ctx, msg) - // Should fail because ICA sender doesn't match bridge's CounterpartyIftAddress - require.ErrorIs(t, err, types.ErrUnauthorizedSender) -} - -// TestMsgServer_IFTMint_UnexpectedSalt tests that ICS27 accounts with salt cannot mint -func TestMsgServer_IFTMint_UnexpectedSalt(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) - - clientID := createIBCClient(t, ctx, wfapp) - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - - // Register bridge - signer := authtypes.NewModuleAddress(govtypes.ModuleName).String() - _, err := ms.RegisterIFTBridge(ctx, &types.MsgRegisterIFTBridge{ - Signer: signer, - Denom: testDenom, - ClientId: clientID, - CounterpartyIftAddress: remoteIFTAddrA, - IftSendCallConstructor: types.ConstructorEVM, - }) - require.NoError(t, err) - - // Create a GMP ICA with salt (not allowed for IFT) - salt := []byte("unexpected-salt") - accountIDWithSalt := gmptypes.NewAccountIdentifier(clientID, remoteIFTAddrA, salt) - icaAddr, err := gmptypes.BuildAddressPredictable(&accountIDWithSalt) - require.NoError(t, err) - - // Register the ICA in GMP keeper - ics27Account := gmptypes.NewICS27Account(icaAddr.String(), &accountIDWithSalt) - err = wfapp.GMPKeeper.AccountsByAddress.Set(ctx, icaAddr, ics27Account) - require.NoError(t, err) - - // Try to mint using the ICA with salt - msg := &types.MsgIFTMint{ - Signer: icaAddr.String(), - Denom: testDenom, - Receiver: userAddrB, - Amount: math.NewInt(1000), - } - - _, err = ms.IFTMint(ctx, msg) - require.ErrorIs(t, err, types.ErrUnexpectedSalt) -} - -// TestMsgServer_RegisterIFTBridge_MultipleBridges tests registering multiple bridges for the same denom -func TestMsgServer_RegisterIFTBridge_MultipleBridges(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) - - signer := authtypes.NewModuleAddress(govtypes.ModuleName).String() - denom := testDenom - - // Create token factory denom - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, denom) - - // Create two different IBC clients - clientID1 := createIBCClient(t, ctx, wfapp) - clientID2 := createIBCClient(t, ctx, wfapp) - - // Register first bridge - msg1 := &types.MsgRegisterIFTBridge{ - Signer: signer, - Denom: denom, - ClientId: clientID1, - CounterpartyIftAddress: remoteIFTAddrA, - IftSendCallConstructor: types.ConstructorEVM, - } - _, err := ms.RegisterIFTBridge(ctx, msg1) - require.NoError(t, err) - - // Register second bridge for same denom but different client - msg2 := &types.MsgRegisterIFTBridge{ - Signer: signer, - Denom: denom, - ClientId: clientID2, - CounterpartyIftAddress: remoteIFTAddrB, - IftSendCallConstructor: types.ConstructorCosmos, - } - _, err = ms.RegisterIFTBridge(ctx, msg2) - require.NoError(t, err) - - // Verify both bridges exist - bridge1, err := wfapp.IFTKeeper.IFTBridgeStore.Get(ctx, collections.Join(denom, clientID1)) - require.NoError(t, err) - require.Equal(t, remoteIFTAddrA, bridge1.CounterpartyIftAddress) - - bridge2, err := wfapp.IFTKeeper.IFTBridgeStore.Get(ctx, collections.Join(denom, clientID2)) - require.NoError(t, err) - require.Equal(t, remoteIFTAddrB, bridge2.CounterpartyIftAddress) -} - -// TestMsgServer_IFTTransfer_InsufficientBalance tests transfer with insufficient balance -func TestMsgServer_IFTTransfer_InsufficientBalance(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) - - signer := userAddrA - denom := testDenom - receiver := remoteIFTAddrA - - // Setup - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - clientID := createIBCClient(t, ctx, wfapp) - - // Register bridge - bridge := types.IFTBridge{ - ClientId: clientID, - CounterpartyIftAddress: remoteIFTAddrB, - IftSendCallConstructor: types.ConstructorEVM, - } - err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(denom, clientID), bridge) - require.NoError(t, err) - - // Mint only 100 tokens - senderAddr := sdk.MustAccAddressFromBech32(signer) - mintTokens(t, ctx, wfapp, testDenom, math.NewInt(100), senderAddr) - - // Try to transfer 1000 tokens (more than balance) - timeout := uint64(time.Now().Add(30 * time.Second).Unix()) - msg := &types.MsgIFTTransfer{ - Signer: signer, - Denom: denom, - ClientId: clientID, - Receiver: receiver, - Amount: math.NewInt(1000), - TimeoutTimestamp: timeout, - } - - _, err = ms.IFTTransfer(ctx, msg) - // Should fail due to insufficient funds - require.Error(t, err) - require.ErrorIs(t, err, types.ErrBurnFailed) -} - -// TestMsgServer_IFTMint_Success tests successful token minting via GMP ICA -func TestMsgServer_IFTMint_Success(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) - - clientID := createIBCClient(t, ctx, wfapp) - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - - // Register bridge with specific counterparty address - authority := authtypes.NewModuleAddress(govtypes.ModuleName).String() - _, err := ms.RegisterIFTBridge(ctx, &types.MsgRegisterIFTBridge{ - Signer: authority, - Denom: testDenom, - ClientId: clientID, - CounterpartyIftAddress: remoteIFTAddrA, - IftSendCallConstructor: types.ConstructorEVM, - }) - require.NoError(t, err) - - // Create a valid GMP ICA with matching counterparty address (no salt) - accountID := gmptypes.NewAccountIdentifier(clientID, remoteIFTAddrA, nil) - icaAddr, err := gmptypes.BuildAddressPredictable(&accountID) - require.NoError(t, err) - - // Register the ICA in GMP keeper - ics27Account := gmptypes.NewICS27Account(icaAddr.String(), &accountID) - err = wfapp.GMPKeeper.AccountsByAddress.Set(ctx, icaAddr, ics27Account) - require.NoError(t, err) - - // Mint tokens via IFTMint - mintAmount := math.NewInt(1000000) - receiver, err := sdk.AccAddressFromBech32(userAddrB) - require.NoError(t, err) - - msg := &types.MsgIFTMint{ - Signer: icaAddr.String(), - Denom: testDenom, - Receiver: userAddrB, - Amount: mintAmount, - } - - _, err = ms.IFTMint(ctx, msg) - require.NoError(t, err) - - // Verify tokens were minted to receiver - balance := wfapp.BankKeeper.GetBalance(ctx, receiver, testDenom) - require.True(t, balance.Amount.Equal(mintAmount), "expected %s, got %s", mintAmount, balance.Amount) - - // Verify event was emitted - events := ctx.EventManager().Events() - var foundMintEvent bool - for _, event := range events { - if event.Type == types.EventTypeIFTMintReceived { - foundMintEvent = true - break - } - } - require.True(t, foundMintEvent, "IFT mint received event should be emitted") -} - -// TestMsgServer_IFTMint_BridgeNotFound tests that IFTMint fails when no bridge exists -func TestMsgServer_IFTMint_BridgeNotFound(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) - - clientID := createIBCClient(t, ctx, wfapp) - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - - // Create a GMP ICA but do NOT register bridge - accountID := gmptypes.NewAccountIdentifier(clientID, remoteIFTAddrA, nil) - icaAddr, err := gmptypes.BuildAddressPredictable(&accountID) - require.NoError(t, err) - - ics27Account := gmptypes.NewICS27Account(icaAddr.String(), &accountID) - err = wfapp.GMPKeeper.AccountsByAddress.Set(ctx, icaAddr, ics27Account) - require.NoError(t, err) - - msg := &types.MsgIFTMint{ - Signer: icaAddr.String(), - Denom: testDenom, - Receiver: userAddrB, - Amount: math.NewInt(1000), - } - - _, err = ms.IFTMint(ctx, msg) - require.ErrorIs(t, err, types.ErrBridgeNotFound) -} - -// TestMsgServer_IFTTransfer_EventPropagation tests that send_packet events from -// the GMP handler are properly propagated to the context's EventManager. -// This is critical for the relayer to detect outgoing packets. -func TestMsgServer_IFTTransfer_EventPropagation(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) - - signer := userAddrA - denom := testDenom - receiver := remoteIFTAddrA - - // Setup - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - clientID := createIBCClient(t, ctx, wfapp) - - // Register bridge - bridge := types.IFTBridge{ - ClientId: clientID, - CounterpartyIftAddress: remoteIFTAddrB, - IftSendCallConstructor: types.ConstructorEVM, - } - err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(denom, clientID), bridge) - require.NoError(t, err) - - // Mint tokens to sender - senderAddr := sdk.MustAccAddressFromBech32(signer) - mintTokens(t, ctx, wfapp, testDenom, math.NewInt(2000000), senderAddr) - - timeout := uint64(time.Now().Add(30 * time.Second).Unix()) - msg := &types.MsgIFTTransfer{ - Signer: signer, - Denom: denom, - ClientId: clientID, - Receiver: receiver, - Amount: math.NewInt(1000000), - TimeoutTimestamp: timeout, - } - - resp, err := ms.IFTTransfer(ctx, msg) - require.NoError(t, err) - require.NotNil(t, resp) - require.Positive(t, resp.Sequence) - - // Verify that send_packet event is present with encoded_packet_hex attribute - // This is what the relayer uses to detect outgoing packets - events := ctx.EventManager().Events() - var foundSendPacket bool - var foundEncodedPacketHex bool - - for _, event := range events { - if event.Type == channelv2types.EventTypeSendPacket { - foundSendPacket = true - for _, attr := range event.Attributes { - if attr.Key == channelv2types.AttributeKeyEncodedPacketHex { - foundEncodedPacketHex = true - require.NotEmpty(t, attr.Value, "encoded_packet_hex should not be empty") - break - } - } - break - } - } - - require.True(t, foundSendPacket, "send_packet event should be emitted") - require.True(t, foundEncodedPacketHex, "send_packet event should have encoded_packet_hex attribute") -} - -// TestConstructMintCall_EVM tests the EVM mint call constructor -func TestConstructMintCall_EVM(t *testing.T) { - wfapp, _ := setupIntegrationApp(t) - - evmReceiver := "0x1234567890abcdef1234567890abcdef12345678" - amount := math.NewInt(1000000) - - payload, err := types.ConstructMintCall(wfapp.AppCodec(), evmReceiver, amount, types.ConstructorEVM, "", "") - require.NoError(t, err) - require.NotEmpty(t, payload) - - // Verify function selector - expectedSelector := crypto.Keccak256([]byte("iftMint(address,uint256)"))[:4] - require.Equal(t, expectedSelector, payload[:4], "function selector mismatch") - - // Verify ABI-encoded address (32 bytes: 12 zero bytes + 20 address bytes) - addressBytes := payload[4:36] - require.Equal(t, make([]byte, 12), addressBytes[:12], "address should be left-padded with zeros") - expectedAddr := common.HexToAddress(evmReceiver) - require.Equal(t, expectedAddr.Bytes(), addressBytes[12:], "address should match") - - // Verify ABI-encoded amount (32 bytes: big-endian uint256) - amountBytes := payload[36:68] - decodedAmount := new(big.Int).SetBytes(amountBytes) - require.Equal(t, amount.BigInt().String(), decodedAmount.String(), "amount should match") -} - -// TestConstructMintCall_CosmosTx tests the CosmosTx mint call constructor -func TestConstructMintCall_CosmosTx(t *testing.T) { - wfapp, _ := setupIntegrationApp(t) - - cosmosReceiver := userAddrB - amount := math.NewInt(1000000) - icaAddress := userAddrA - - payload, err := types.ConstructMintCall(wfapp.AppCodec(), cosmosReceiver, amount, types.ConstructorCosmos, testDenom, icaAddress) - require.NoError(t, err) - require.NotEmpty(t, payload) - - // Verify we can decode the CosmosTx - var cosmosTx gmptypes.CosmosTx - err = cosmosTx.Unmarshal(payload) - require.NoError(t, err, "should be valid CosmosTx protobuf") - require.Len(t, cosmosTx.Messages, 1, "CosmosTx should contain exactly one message") - - // Verify the message is a MsgIFTMint - var mintMsg types.MsgIFTMint - err = wfapp.AppCodec().Unmarshal(cosmosTx.Messages[0].Value, &mintMsg) - require.NoError(t, err, "should be valid MsgIFTMint") - require.Equal(t, icaAddress, mintMsg.Signer) - require.Equal(t, testDenom, mintMsg.Denom) - require.Equal(t, cosmosReceiver, mintMsg.Receiver) - require.True(t, amount.Equal(mintMsg.Amount)) -} - -// TestConstructMintCall_InvalidConstructor tests invalid constructor type -func TestConstructMintCall_InvalidConstructor(t *testing.T) { - wfapp, _ := setupIntegrationApp(t) - - _, err := types.ConstructMintCall(wfapp.AppCodec(), userAddrB, math.NewInt(1000), "invalid", testDenom, userAddrA) - require.Error(t, err) - require.Contains(t, err.Error(), "invalid constructor type") -} - -// TestMsgServer_RegisterIFTBridge_InvalidClientID tests that registering a bridge with empty client ID fails -func TestMsgServer_RegisterIFTBridge_InvalidClientID(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) - - signer := authtypes.NewModuleAddress(govtypes.ModuleName).String() - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - - msg := &types.MsgRegisterIFTBridge{ - Signer: signer, - Denom: testDenom, - ClientId: "", - CounterpartyIftAddress: remoteIFTAddrA, - IftSendCallConstructor: types.ConstructorEVM, - } - - _, err := ms.RegisterIFTBridge(ctx, msg) - require.ErrorIs(t, err, types.ErrInvalidClientID) -} - -// TestMsgServer_IFTMint_DenomNotInTokenFactory tests that IFTMint fails when denom doesn't exist in token factory -func TestMsgServer_IFTMint_DenomNotInTokenFactory(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) - - clientID := createIBCClient(t, ctx, wfapp) - nonExistentDenom := "nonexistent" - - // Register bridge directly (bypassing RegisterIFTBridge validation) - bridge := types.IFTBridge{ - ClientId: clientID, - CounterpartyIftAddress: remoteIFTAddrA, - IftSendCallConstructor: types.ConstructorEVM, - } - err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(nonExistentDenom, clientID), bridge) - require.NoError(t, err) - - // Create GMP ICA - accountID := gmptypes.NewAccountIdentifier(clientID, remoteIFTAddrA, nil) - icaAddr, err := gmptypes.BuildAddressPredictable(&accountID) - require.NoError(t, err) - - ics27Account := gmptypes.NewICS27Account(icaAddr.String(), &accountID) - err = wfapp.GMPKeeper.AccountsByAddress.Set(ctx, icaAddr, ics27Account) - require.NoError(t, err) - - msg := &types.MsgIFTMint{ - Signer: icaAddr.String(), - Denom: nonExistentDenom, - Receiver: userAddrB, - Amount: math.NewInt(1000), - } - - _, err = ms.IFTMint(ctx, msg) - require.ErrorIs(t, err, types.ErrDenomNotFound) -} - -// TestMsgServer_RemoveIFTBridge_EmptyDenom tests that removing bridge with empty denom fails -func TestMsgServer_RemoveIFTBridge_EmptyDenom(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) - - signer := authtypes.NewModuleAddress(govtypes.ModuleName).String() - clientID := createIBCClient(t, ctx, wfapp) - - msg := &types.MsgRemoveIFTBridge{ - Signer: signer, - Denom: "", - ClientId: clientID, - } - - _, err := ms.RemoveIFTBridge(ctx, msg) - require.ErrorIs(t, err, types.ErrBridgeNotFound) -} - -// TestMsgServer_IFTTransfer_SolanaEncoding tests that Solana transfers use protobuf encoding -func TestMsgServer_IFTTransfer_SolanaEncoding(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) - - signer := userAddrA - denom := testDenom - receiver := solanaReceiverAddr - - // Setup - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - clientID := createIBCClient(t, ctx, wfapp) - - // Register Solana bridge with JSON constructor - solanaConstructor := `{"solana":{"gmp_program_id":"` + solanaGMPProgramID + `","mint_pubkey":"` + solanaMintPubkey + `"}}` - bridge := types.IFTBridge{ - ClientId: clientID, - CounterpartyIftAddress: solanaIFTProgramID, - IftSendCallConstructor: solanaConstructor, - } - err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(denom, clientID), bridge) - require.NoError(t, err) - - // Mint tokens to sender - senderAddr := sdk.MustAccAddressFromBech32(signer) - mintTokens(t, ctx, wfapp, testDenom, math.NewInt(2000000), senderAddr) - - timeout := uint64(time.Now().Add(30 * time.Second).Unix()) - msg := &types.MsgIFTTransfer{ - Signer: signer, - Denom: denom, - ClientId: clientID, - Receiver: receiver, - Amount: math.NewInt(1000000), - TimeoutTimestamp: timeout, - } - - resp, err := ms.IFTTransfer(ctx, msg) - require.NoError(t, err) - require.NotNil(t, resp) - require.Positive(t, resp.Sequence) - - // Verify send_packet event exists (encoding is used internally by GMP) - events := ctx.EventManager().Events() - var foundSendPacket bool - for _, event := range events { - if event.Type == channelv2types.EventTypeSendPacket { - foundSendPacket = true - break - } - } - require.True(t, foundSendPacket, "send_packet event should be emitted for Solana transfer") -} - -// TestMsgServer_IFTTransfer_TimeoutValidation tests timeout validation -func TestMsgServer_IFTTransfer_TimeoutValidation(t *testing.T) { - cases := []struct { - name string - timeoutOffset time.Duration - expectErr bool - expectedErrType error - }{ - { - name: "timeout in past", - timeoutOffset: -1 * time.Hour, - expectErr: true, - expectedErrType: types.ErrInvalidTimeout, - }, - { - name: "timeout equals block time", - timeoutOffset: 0, - expectErr: true, - expectedErrType: types.ErrInvalidTimeout, - }, - { - name: "timeout 1 second in future", - timeoutOffset: 1 * time.Second, - expectErr: false, - }, - { - name: "timeout 15 minutes in future", - timeoutOffset: 15 * time.Minute, - expectErr: false, - }, - } - - for _, tc := range cases { - t.Run(tc.name, func(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServerImpl(wfapp.IFTKeeper) - - signer := userAddrA - denom := testDenom - receiver := remoteIFTAddrA - - createTokenFactoryDenom(t, ctx, wfapp, adminAddr, testDenom) - clientID := createIBCClient(t, ctx, wfapp) - - bridge := types.IFTBridge{ - ClientId: clientID, - CounterpartyIftAddress: remoteIFTAddrB, - IftSendCallConstructor: types.ConstructorEVM, - } - err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(denom, clientID), bridge) - require.NoError(t, err) - - senderAddr := sdk.MustAccAddressFromBech32(signer) - mintTokens(t, ctx, wfapp, testDenom, math.NewInt(2000000), senderAddr) - - timeout := uint64(ctx.BlockTime().Add(tc.timeoutOffset).Unix()) - msg := &types.MsgIFTTransfer{ - Signer: signer, - Denom: denom, - ClientId: clientID, - Receiver: receiver, - Amount: math.NewInt(1000000), - TimeoutTimestamp: timeout, - } - - _, err = ms.IFTTransfer(ctx, msg) - - if tc.expectErr { - require.Error(t, err) - if tc.expectedErrType != nil { - require.ErrorIs(t, err, tc.expectedErrType) - } - } else { - require.NoError(t, err) - } - }) - } -} diff --git a/prototypes/x/ift/keeper/query_test.go b/prototypes/x/ift/keeper/query_test.go deleted file mode 100644 index b155e3aa4e3..00000000000 --- a/prototypes/x/ift/keeper/query_test.go +++ /dev/null @@ -1,187 +0,0 @@ -package keeper_test - -import ( - "testing" - - "github.com/cosmos/ibc-go/prototypes/x/ift/types" - "github.com/stretchr/testify/require" - - "cosmossdk.io/collections" - "cosmossdk.io/math" -) - -func TestQuery_IFTBridge(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID := createIBCClient(t, ctx, wfapp) - - bridge := types.IFTBridge{ - ClientId: clientID, - CounterpartyIftAddress: remoteIFTAddrA, - IftSendCallConstructor: types.ConstructorEVM, - } - err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(testDenom, clientID), bridge) - require.NoError(t, err) - - // Query bridge - resp, err := wfapp.IFTKeeper.IFTBridge(ctx, &types.QueryIFTBridgeRequest{ - Denom: testDenom, - ClientId: clientID, - }) - require.NoError(t, err) - require.Equal(t, clientID, resp.Bridge.ClientId) - require.Equal(t, remoteIFTAddrA, resp.Bridge.CounterpartyIftAddress) - require.Equal(t, types.ConstructorEVM, resp.Bridge.IftSendCallConstructor) -} - -func TestQuery_IFTBridges(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID1 := createIBCClient(t, ctx, wfapp) - clientID2 := createIBCClient(t, ctx, wfapp) - - bridge1 := types.IFTBridge{ - ClientId: clientID1, - CounterpartyIftAddress: remoteIFTAddrA, - IftSendCallConstructor: types.ConstructorEVM, - } - err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(testDenom, clientID1), bridge1) - require.NoError(t, err) - - bridge2 := types.IFTBridge{ - ClientId: clientID2, - CounterpartyIftAddress: remoteIFTAddrB, - IftSendCallConstructor: types.ConstructorCosmos, - } - err = wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(testDenom2, clientID2), bridge2) - require.NoError(t, err) - - // Query all bridges - resp, err := wfapp.IFTKeeper.IFTBridges(ctx, &types.QueryIFTBridgesRequest{}) - require.NoError(t, err) - require.Len(t, resp.Bridges, 2) -} - -func TestQuery_IFTBridges_Empty(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - // Query all bridges (should be empty) - resp, err := wfapp.IFTKeeper.IFTBridges(ctx, &types.QueryIFTBridgesRequest{}) - require.NoError(t, err) - require.Empty(t, resp.Bridges) -} - -func TestQuery_IFTBridgesByDenom(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID1 := createIBCClient(t, ctx, wfapp) - clientID2 := createIBCClient(t, ctx, wfapp) - clientID3 := createIBCClient(t, ctx, wfapp) - - // Register two bridges for testDenom - bridge1 := types.IFTBridge{ - ClientId: clientID1, - CounterpartyIftAddress: remoteIFTAddrA, - IftSendCallConstructor: types.ConstructorEVM, - } - err := wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(testDenom, clientID1), bridge1) - require.NoError(t, err) - - bridge2 := types.IFTBridge{ - ClientId: clientID2, - CounterpartyIftAddress: remoteIFTAddrB, - IftSendCallConstructor: types.ConstructorCosmos, - } - err = wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(testDenom, clientID2), bridge2) - require.NoError(t, err) - - // Register one bridge for testDenom2 - bridge3 := types.IFTBridge{ - ClientId: clientID3, - CounterpartyIftAddress: remoteIFTAddrA, - IftSendCallConstructor: types.ConstructorEVM, - } - err = wfapp.IFTKeeper.IFTBridgeStore.Set(ctx, collections.Join(testDenom2, clientID3), bridge3) - require.NoError(t, err) - - // Query bridges for testDenom only - resp, err := wfapp.IFTKeeper.IFTBridgesByDenom(ctx, &types.QueryIFTBridgesByDenomRequest{ - Denom: testDenom, - }) - require.NoError(t, err) - require.Len(t, resp.Bridges, 2) - - // Query bridges for testDenom2 only - resp, err = wfapp.IFTKeeper.IFTBridgesByDenom(ctx, &types.QueryIFTBridgesByDenomRequest{ - Denom: testDenom2, - }) - require.NoError(t, err) - require.Len(t, resp.Bridges, 1) - require.Equal(t, clientID3, resp.Bridges[0].ClientId) -} - -func TestQuery_IFTBridgesByDenom_NotFound(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - // Query bridges for nonexistent denom (should return empty, not error) - resp, err := wfapp.IFTKeeper.IFTBridgesByDenom(ctx, &types.QueryIFTBridgesByDenomRequest{ - Denom: "nonexistent", - }) - require.NoError(t, err) - require.Empty(t, resp.Bridges) -} - -func TestQuery_PendingTransfer(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - clientID := createIBCClient(t, ctx, wfapp) - sequence := uint64(42) - - pending := types.PendingTransfer{ - Denom: testDenom, - ClientId: clientID, - Sequence: sequence, - Sender: userAddrA, - Amount: math.NewInt(1000000), - } - err := wfapp.IFTKeeper.SetPendingTransfer(ctx, clientID, sequence, pending) - require.NoError(t, err) - - // Query pending transfer - resp, err := wfapp.IFTKeeper.PendingTransfer(ctx, &types.QueryPendingTransferRequest{ - Denom: testDenom, - ClientId: clientID, - Sequence: sequence, - }) - require.NoError(t, err) - require.Equal(t, testDenom, resp.PendingTransfer.Denom) - require.Equal(t, clientID, resp.PendingTransfer.ClientId) - require.Equal(t, sequence, resp.PendingTransfer.Sequence) - require.Equal(t, userAddrA, resp.PendingTransfer.Sender) - require.True(t, pending.Amount.Equal(resp.PendingTransfer.Amount)) -} - -func TestQuery_Params(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - // Query params (already set in setup) - resp, err := wfapp.IFTKeeper.Params(ctx, &types.QueryParamsRequest{}) - require.NoError(t, err) - require.NotEmpty(t, resp.Params.Authority) -} - -func TestQuery_Params_UpdateAndQuery(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - // Update params - newParams := types.Params{ - Authority: userAddrA, - } - err := wfapp.IFTKeeper.ParamsStore.Set(ctx, newParams) - require.NoError(t, err) - - // Query updated params - resp, err := wfapp.IFTKeeper.Params(ctx, &types.QueryParamsRequest{}) - require.NoError(t, err) - require.Equal(t, userAddrA, resp.Params.Authority) -} diff --git a/prototypes/x/tokenfactory/go.mod b/prototypes/x/tokenfactory/go.mod deleted file mode 100644 index 13e55541ceb..00000000000 --- a/prototypes/x/tokenfactory/go.mod +++ /dev/null @@ -1,399 +0,0 @@ -module github.com/cosmos/sandbox-ledger - -go 1.25.9 - -require ( - cosmossdk.io/api v1.0.0 - cosmossdk.io/client/v2 v2.11.0-rc.0 - cosmossdk.io/collections v1.4.0 - cosmossdk.io/core v1.1.0 - cosmossdk.io/errors v1.1.0 - cosmossdk.io/log/v2 v2.1.0 - cosmossdk.io/math v1.5.3 - cosmossdk.io/tools/confix v0.1.2 - github.com/cometbft/cometbft v0.39.1 - github.com/cosmos/cosmos-db v1.1.3 - github.com/cosmos/cosmos-proto v1.0.0-beta.5 - github.com/cosmos/cosmos-sdk v0.54.1-0.20260410193155-cbbc1d4f86b1 - github.com/cosmos/cosmos-sdk/enterprise/poa v0.0.0-20260410193155-cbbc1d4f86b1 - github.com/cosmos/cosmos-sdk/store/v2 v2.0.0 - github.com/cosmos/evm v0.5.0-rc.0.0.20260410210749-bbc4ca9b8c64 - github.com/cosmos/evm/evmd v0.0.0-20260410210749-bbc4ca9b8c64 - github.com/cosmos/gogoproto v1.7.2 - github.com/cosmos/ibc-go/v11 v11.0.0 - github.com/cosmos/solidity-ibc-eureka/packages/go-proto v0.0.0-20260403152650-2480eaf9d4a1 - github.com/ethereum/go-ethereum v1.16.8 - github.com/gagliardetto/binary v0.8.0 - github.com/gagliardetto/solana-go v1.14.0 - github.com/golang/protobuf v1.5.4 - github.com/grpc-ecosystem/grpc-gateway v1.16.0 - github.com/spf13/cast v1.10.0 - github.com/spf13/cobra v1.10.2 - github.com/spf13/viper v1.21.0 - github.com/stretchr/testify v1.11.1 - google.golang.org/genproto/googleapis/api v0.0.0-20260226221140-a57be14db171 - google.golang.org/grpc v1.80.0 - //github.com/cosmos/ibc-go/prototypes prototype-ift-tokenfactory -) - -require ( - cel.dev/expr v0.25.1 // indirect - cloud.google.com/go v0.123.0 // indirect - cloud.google.com/go/auth v0.18.2 // indirect - cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect - cloud.google.com/go/compute/metadata v0.9.0 // indirect - cloud.google.com/go/iam v1.5.3 // indirect - cloud.google.com/go/monitoring v1.24.3 // indirect - cloud.google.com/go/storage v1.60.0 // indirect - cosmossdk.io/depinject v1.2.1 // indirect - cosmossdk.io/schema v1.1.0 // indirect - filippo.io/edwards25519 v1.2.0 // indirect - github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect - github.com/99designs/keyring v1.2.2 // indirect - github.com/DataDog/datadog-go v4.8.3+incompatible // indirect - github.com/DataDog/zstd v1.5.7 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 // indirect - github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/RoaringBitmap/roaring/v2 v2.15.0 // indirect - github.com/VictoriaMetrics/fastcache v1.12.2 // indirect - github.com/aws/aws-sdk-go-v2 v1.41.1 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.4 // indirect - github.com/aws/aws-sdk-go-v2/config v1.32.9 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.19.9 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.17 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.17 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.17 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.17 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.8 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.17 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.17 // indirect - github.com/aws/aws-sdk-go-v2/service/s3 v1.96.0 // indirect - github.com/aws/aws-sdk-go-v2/service/signin v1.0.5 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.30.10 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.14 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.41.6 // indirect - github.com/aws/smithy-go v1.24.0 // indirect - github.com/benbjohnson/clock v1.3.5 // indirect - github.com/beorn7/perks v1.0.1 // indirect - github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect - github.com/bgentry/speakeasy v0.2.0 // indirect - github.com/bits-and-blooms/bitset v1.24.4 // indirect - github.com/blendle/zapdriver v1.3.1 // indirect - github.com/btcsuite/btcd v0.24.2 // indirect - github.com/btcsuite/btcd/btcec/v2 v2.3.5 // indirect - github.com/btcsuite/btcd/btcutil v1.1.6 // indirect - github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect - github.com/bytedance/gopkg v0.1.4 // indirect - github.com/bytedance/sonic v1.15.0 // indirect - github.com/bytedance/sonic/loader v0.5.1 // indirect - github.com/cenkalti/backoff/v4 v4.3.0 // indirect - github.com/cenkalti/backoff/v5 v5.0.3 // indirect - github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/chzyer/readline v1.5.1 // indirect - github.com/cloudwego/base64x v0.1.6 // indirect - github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 // indirect - github.com/cockroachdb/errors v1.12.0 // indirect - github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0 // indirect - github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 // indirect - github.com/cockroachdb/pebble v1.1.5 // indirect - github.com/cockroachdb/redact v1.1.8 // indirect - github.com/cockroachdb/tokenbucket v0.0.0-20250429170803-42689b6311bb // indirect - github.com/cometbft/cometbft-db v1.0.4 // indirect - github.com/consensys/gnark-crypto v0.18.1 // indirect - github.com/cosmos/btcutil v1.0.5 // indirect - github.com/cosmos/btree v1.0.0 // indirect - github.com/cosmos/go-bip39 v1.0.0 // indirect - github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/iavl v1.2.8 // indirect - github.com/cosmos/ics23/go v0.11.0 // indirect - github.com/cosmos/ledger-cosmos-go v1.0.0 // indirect - github.com/crate-crypto/go-eth-kzg v1.3.0 // indirect - github.com/crate-crypto/go-ipa v0.0.0-20240724233137-53bbb0ceb27a // indirect - github.com/creachadair/atomicfile v0.3.8 // indirect - github.com/creachadair/tomledit v0.0.29 // indirect - github.com/danieljoos/wincred v1.2.3 // indirect - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect - github.com/deckarep/golang-set/v2 v2.6.0 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 // indirect - github.com/desertbit/timer v1.0.1 // indirect - github.com/dgraph-io/badger/v4 v4.9.1 // indirect - github.com/dgraph-io/ristretto/v2 v2.4.0 // indirect - github.com/dlclark/regexp2 v1.7.0 // indirect - github.com/dop251/goja v0.0.0-20230605162241-28ee0ee714f3 // indirect - github.com/dunglas/httpsfv v1.1.0 // indirect - github.com/dustin/go-humanize v1.0.1 // indirect - github.com/dvsekhvalnov/jose2go v1.8.0 // indirect - github.com/ebitengine/purego v0.10.0 // indirect - github.com/emicklei/dot v1.11.0 // indirect - github.com/envoyproxy/go-control-plane/envoy v1.36.0 // indirect - github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect - github.com/ethereum/c-kzg-4844/v2 v2.1.0 // indirect - github.com/ethereum/go-verkle v0.2.2 // indirect - github.com/fatih/color v1.18.0 // indirect - github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/ferranbt/fastssz v0.1.4 // indirect - github.com/flynn/noise v1.1.0 // indirect - github.com/fsnotify/fsnotify v1.9.0 // indirect - github.com/gagliardetto/treeout v0.1.4 // indirect - github.com/gammazero/deque v1.2.0 // indirect - github.com/getsentry/sentry-go v0.44.1 // indirect - github.com/go-jose/go-jose/v4 v4.1.4 // indirect - github.com/go-kit/kit v0.13.0 // indirect - github.com/go-kit/log v0.2.1 // indirect - github.com/go-logfmt/logfmt v0.6.1 // indirect - github.com/go-logr/logr v1.4.3 // indirect - github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-ole/go-ole v1.3.0 // indirect - github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect - github.com/go-viper/mapstructure/v2 v2.5.0 // indirect - github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect - github.com/gofrs/flock v0.12.1 // indirect - github.com/gogo/googleapis v1.4.1 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/snappy v1.0.0 // indirect - github.com/google/btree v1.1.3 // indirect - github.com/google/flatbuffers v25.2.10+incompatible // indirect - github.com/google/go-cmp v0.7.0 // indirect - github.com/google/orderedcode v0.0.1 // indirect - github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 // indirect - github.com/google/s2a-go v0.1.9 // indirect - github.com/google/uuid v1.6.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect - github.com/googleapis/gax-go/v2 v2.17.0 // indirect - github.com/gorilla/handlers v1.5.2 // indirect - github.com/gorilla/mux v1.8.1 // indirect - github.com/gorilla/websocket v1.5.3 // indirect - github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect - github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect - github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.70 // indirect - github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.8.5 // indirect - github.com/hashicorp/go-hclog v1.6.3 // indirect - github.com/hashicorp/go-immutable-radix v1.3.1 // indirect - github.com/hashicorp/go-metrics v0.5.4 // indirect - github.com/hashicorp/go-plugin v1.7.0 // indirect - github.com/hashicorp/go-version v1.8.0 // indirect - github.com/hashicorp/golang-lru v1.0.2 // indirect - github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect - github.com/hashicorp/yamux v0.1.2 // indirect - github.com/hdevalence/ed25519consensus v0.2.0 // indirect - github.com/holiman/bloomfilter/v2 v2.0.3 // indirect - github.com/holiman/uint256 v1.3.2 // indirect - github.com/huandu/skiplist v1.2.1 // indirect - github.com/huin/goupnp v1.3.0 // indirect - github.com/iancoleman/strcase v0.3.0 // indirect - github.com/improbable-eng/grpc-web v0.15.0 // indirect - github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/ipfs/go-cid v0.5.0 // indirect - github.com/jackpal/go-nat-pmp v1.0.2 // indirect - github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect - github.com/jmhodges/levigo v1.0.0 // indirect - github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.18.5 // indirect - github.com/klauspost/cpuid/v2 v2.3.0 // indirect - github.com/koron/go-ssdp v0.0.6 // indirect - github.com/kr/pretty v0.3.1 // indirect - github.com/kr/text v0.2.0 // indirect - github.com/lib/pq v1.11.2 // indirect - github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/libp2p/go-flow-metrics v0.2.0 // indirect - github.com/libp2p/go-libp2p v0.47.0 // indirect - github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect - github.com/libp2p/go-msgio v0.3.0 // indirect - github.com/libp2p/go-netroute v0.3.0 // indirect - github.com/libp2p/go-reuseport v0.4.0 // indirect - github.com/libp2p/go-yamux/v5 v5.0.1 // indirect - github.com/linxGnu/grocksdb v1.10.7 // indirect - github.com/logrusorgru/aurora v2.0.3+incompatible // indirect - github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88 // indirect - github.com/manifoldco/promptui v0.9.0 // indirect - github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect - github.com/mattn/go-colorable v0.1.14 // indirect - github.com/mattn/go-isatty v0.0.21 // indirect - github.com/mattn/go-runewidth v0.0.15 // indirect - github.com/mdp/qrterminal/v3 v3.2.1 // indirect - github.com/miekg/dns v1.1.66 // indirect - github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect - github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect - github.com/minio/highwayhash v1.0.4 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/go-testing-interface v1.14.1 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.2 // indirect - github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1 // indirect - github.com/mr-tron/base58 v1.2.0 // indirect - github.com/mschoch/smat v0.2.0 // indirect - github.com/mtibben/percent v0.2.1 // indirect - github.com/multiformats/go-base32 v0.1.0 // indirect - github.com/multiformats/go-base36 v0.2.0 // indirect - github.com/multiformats/go-multiaddr v0.16.1 // indirect - github.com/multiformats/go-multiaddr-dns v0.4.1 // indirect - github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect - github.com/multiformats/go-multibase v0.2.0 // indirect - github.com/multiformats/go-multicodec v0.9.1 // indirect - github.com/multiformats/go-multihash v0.2.3 // indirect - github.com/multiformats/go-multistream v0.6.1 // indirect - github.com/multiformats/go-varint v0.0.7 // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/oasisprotocol/curve25519-voi v0.0.0-20251114093237-2ab5a27a1729 // indirect - github.com/oklog/run v1.2.0 // indirect - github.com/olekukonko/tablewriter v0.0.5 // indirect - github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect - github.com/pelletier/go-toml/v2 v2.2.4 // indirect - github.com/petermattis/goid v0.0.0-20260113132338-7c7de50cc741 // indirect - github.com/pion/datachannel v1.5.10 // indirect - github.com/pion/dtls/v2 v2.2.12 // indirect - github.com/pion/dtls/v3 v3.1.2 // indirect - github.com/pion/ice/v4 v4.0.10 // indirect - github.com/pion/interceptor v0.1.40 // indirect - github.com/pion/logging v0.2.4 // indirect - github.com/pion/mdns/v2 v2.0.7 // indirect - github.com/pion/randutil v0.1.0 // indirect - github.com/pion/rtcp v1.2.15 // indirect - github.com/pion/rtp v1.8.19 // indirect - github.com/pion/sctp v1.8.39 // indirect - github.com/pion/sdp/v3 v3.0.13 // indirect - github.com/pion/srtp/v3 v3.0.6 // indirect - github.com/pion/stun v0.6.1 // indirect - github.com/pion/stun/v2 v2.0.0 // indirect - github.com/pion/stun/v3 v3.0.0 // indirect - github.com/pion/transport/v2 v2.2.10 // indirect - github.com/pion/transport/v3 v3.0.7 // indirect - github.com/pion/transport/v4 v4.0.1 // indirect - github.com/pion/turn/v4 v4.0.2 // indirect - github.com/pion/webrtc/v4 v4.1.2 // indirect - github.com/pkg/errors v0.9.1 // indirect - github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect - github.com/prometheus/client_golang v1.23.2 // indirect - github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v0.67.5 // indirect - github.com/prometheus/otlptranslator v1.0.0 // indirect - github.com/prometheus/procfs v0.20.1 // indirect - github.com/quic-go/qpack v0.6.0 // indirect - github.com/quic-go/quic-go v0.59.0 // indirect - github.com/quic-go/webtransport-go v0.10.0 // indirect - github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9 // indirect - github.com/rivo/uniseg v0.2.0 // indirect - github.com/rogpeppe/go-internal v1.14.1 // indirect - github.com/rs/cors v1.11.1 // indirect - github.com/rs/zerolog v1.35.0 // indirect - github.com/sagikazarmark/locafero v0.12.0 // indirect - github.com/sasha-s/go-deadlock v0.3.7 // indirect - github.com/shirou/gopsutil v3.21.11+incompatible // indirect - github.com/shirou/gopsutil/v4 v4.26.2 // indirect - github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/spf13/afero v1.15.0 // indirect - github.com/spf13/pflag v1.0.10 // indirect - github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect - github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091 // indirect - github.com/subosito/gotenv v1.6.0 // indirect - github.com/supranational/blst v0.3.16 // indirect - github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect - github.com/tendermint/go-amino v0.16.0 // indirect - github.com/tidwall/btree v1.8.1 // indirect - github.com/tidwall/gjson v1.18.0 // indirect - github.com/tidwall/match v1.2.0 // indirect - github.com/tidwall/pretty v1.2.1 // indirect - github.com/tidwall/sjson v1.2.5 // indirect - github.com/tklauser/go-sysconf v0.3.16 // indirect - github.com/tklauser/numcpus v0.11.0 // indirect - github.com/twitchyliquid64/golang-asm v0.15.1 // indirect - github.com/tyler-smith/go-bip39 v1.1.0 // indirect - github.com/ulikunitz/xz v0.5.15 // indirect - github.com/wlynxg/anet v0.0.5 // indirect - github.com/yusufpapurcu/wmi v1.2.4 // indirect - github.com/zondax/golem v0.27.0 // indirect - github.com/zondax/hid v0.9.2 // indirect - github.com/zondax/ledger-go v1.0.1 // indirect - go.etcd.io/bbolt v1.4.3 // indirect - go.mongodb.org/mongo-driver v1.12.2 // indirect - go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/bridges/otelslog v0.17.0 // indirect - go.opentelemetry.io/contrib/detectors/gcp v1.39.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.66.0 // indirect - go.opentelemetry.io/contrib/instrumentation/host v0.67.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 // indirect - go.opentelemetry.io/contrib/instrumentation/runtime v0.67.0 // indirect - go.opentelemetry.io/contrib/otelconf v0.22.0 // indirect - go.opentelemetry.io/contrib/propagators/autoprop v0.67.0 // indirect - go.opentelemetry.io/contrib/propagators/aws v1.42.0 // indirect - go.opentelemetry.io/contrib/propagators/b3 v1.42.0 // indirect - go.opentelemetry.io/contrib/propagators/jaeger v1.42.0 // indirect - go.opentelemetry.io/contrib/propagators/ot v1.42.0 // indirect - go.opentelemetry.io/otel v1.43.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.18.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.18.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.42.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.42.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.42.0 // indirect - go.opentelemetry.io/otel/exporters/prometheus v0.64.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.18.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.42.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.42.0 // indirect - go.opentelemetry.io/otel/log v0.19.0 // indirect - go.opentelemetry.io/otel/metric v1.43.0 // indirect - go.opentelemetry.io/otel/sdk v1.42.0 // indirect - go.opentelemetry.io/otel/sdk/log v0.18.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.42.0 // indirect - go.opentelemetry.io/otel/trace v1.43.0 // indirect - go.opentelemetry.io/proto/otlp v1.9.0 // indirect - go.uber.org/dig v1.19.0 // indirect - go.uber.org/fx v1.24.0 // indirect - go.uber.org/mock v0.6.0 // indirect - go.uber.org/multierr v1.11.0 // indirect - go.uber.org/zap v1.27.1 // indirect - go.yaml.in/yaml/v2 v2.4.4 // indirect - go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/arch v0.26.0 // indirect - golang.org/x/crypto v0.49.0 // indirect - golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 // indirect - golang.org/x/mod v0.34.0 // indirect - golang.org/x/net v0.52.0 // indirect - golang.org/x/oauth2 v0.36.0 // indirect - golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.43.0 // indirect - golang.org/x/telemetry v0.0.0-20260311193753-579e4da9a98c // indirect - golang.org/x/term v0.41.0 // indirect - golang.org/x/text v0.35.0 // indirect - golang.org/x/time v0.15.0 // indirect - golang.org/x/tools v0.43.0 // indirect - google.golang.org/api v0.271.0 // indirect - google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 // indirect - google.golang.org/protobuf v1.36.11 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect - gotest.tools/v3 v3.5.2 // indirect - lukechampine.com/blake3 v1.4.1 // indirect - nhooyr.io/websocket v1.8.17 // indirect - pgregory.net/rapid v1.2.0 // indirect - rsc.io/qr v0.2.0 // indirect - sigs.k8s.io/yaml v1.6.0 // indirect -) - -replace ( - cosmossdk.io/log/v2 => github.com/cosmos/cosmos-sdk/log/v2 v2.0.2-0.20260302180736-2fbcc8d5f49e - - cosmossdk.io/x/group => github.com/cosmos/cosmos-sdk/enterprise/group v0.0.0-20260227212600-39d4711b8970 - // Required replace directives (inherited from cosmos/evm) - github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 - - github.com/cometbft/cometbft => github.com/cometbft/cometbft v0.39.1-0.20260410173500-f4a9ba93609e - github.com/cosmos/cosmos-sdk/x/group => github.com/cosmos/cosmos-sdk/enterprise/group v0.0.0-20260227212600-39d4711b8970 - github.com/ethereum/go-ethereum => github.com/cosmos/go-ethereum v1.16.2-cosmos-1.0.20260126204437-32ededcf907f - github.com/gin-gonic/gin => github.com/gin-gonic/gin v1.9.1 - github.com/syndtr/goleveldb => github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 - github.com/tidwall/btree => github.com/cosmos/btree v0.0.0-20250924232609-2c6195d95951 -) diff --git a/prototypes/x/tokenfactory/keeper/query_test.go b/prototypes/x/tokenfactory/keeper/query_test.go deleted file mode 100644 index 73d5a0d7977..00000000000 --- a/prototypes/x/tokenfactory/keeper/query_test.go +++ /dev/null @@ -1,65 +0,0 @@ -package keeper_test - -import ( - "testing" - - "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/keeper" - "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" - "github.com/stretchr/testify/require" -) - -func TestQuery_DenomAuthorityMetadata(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) - denom := testDenom - - _, err := ms.CreateDenom(ctx, types.NewMsgCreateDenom(creatorAddrA, denom)) - require.NoError(t, err) - - res, err := wfapp.TokenFactoryKeeper.DenomAuthorityMetadata(ctx, &types.QueryDenomAuthorityMetadataRequest{Denom: denom}) - require.NoError(t, err) - require.NotNil(t, res) - require.Equal(t, creatorAddrA, res.AuthorityMetadata.Admin) - - res, err = wfapp.TokenFactoryKeeper.DenomAuthorityMetadata(ctx, &types.QueryDenomAuthorityMetadataRequest{Denom: "uwfdeposit"}) - require.Error(t, err) - require.Nil(t, res) -} - -func TestQuery_DenomsByCreator(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - ms := keeper.NewMsgServer(wfapp.TokenFactoryKeeper) - - denomA1 := "denom_a1" - denomA2 := "denom_a2" - denomB1 := "denom_b1" - - _, err := ms.CreateDenom(ctx, types.NewMsgCreateDenom(creatorAddrA, denomA1)) - require.NoError(t, err) - _, err = ms.CreateDenom(ctx, types.NewMsgCreateDenom(creatorAddrA, denomA2)) - require.NoError(t, err) - _, err = ms.CreateDenom(ctx, types.NewMsgCreateDenom(creatorAddrB, denomB1)) - require.NoError(t, err) - - res, err := wfapp.TokenFactoryKeeper.DenomsByCreator(ctx, &types.QueryDenomsByCreatorRequest{Creator: creatorAddrA}) - require.NoError(t, err) - require.NotNil(t, res) - require.Len(t, res.Denoms, 2) - require.Contains(t, res.Denoms, denomA1) - require.Contains(t, res.Denoms, denomA2) - - res, err = wfapp.TokenFactoryKeeper.DenomsByCreator(ctx, &types.QueryDenomsByCreatorRequest{Creator: "wf1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"}) - require.NoError(t, err) - require.Empty(t, res.Denoms) -} - -func TestQueryParams(t *testing.T) { - wfapp, ctx := setupIntegrationApp(t) - - params := types.DefaultParams() - require.NoError(t, wfapp.TokenFactoryKeeper.SetParams(ctx, params)) - - response, err := wfapp.TokenFactoryKeeper.Params(ctx, &types.QueryParamsRequest{}) - require.NoError(t, err) - require.Equal(t, params, response.Params) -} diff --git a/prototypes/x/tokenfactory/module_test.go b/prototypes/x/tokenfactory/module_test.go deleted file mode 100644 index f3b2243d912..00000000000 --- a/prototypes/x/tokenfactory/module_test.go +++ /dev/null @@ -1,28 +0,0 @@ -package tokenfactory_test - -import ( - "testing" - - "github.com/cosmos/ibc-go/prototypes/x/tokenfactory" - "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" - "github.com/stretchr/testify/require" -) - -func TestAutoCLIOptions(t *testing.T) { - module := tokenfactory.AppModule{} - opts := module.AutoCLIOptions() - - require.NotNil(t, opts) - require.NotNil(t, opts.Query) - require.NotNil(t, opts.Tx) -} - -func TestAppModuleName(t *testing.T) { - module := tokenfactory.AppModuleBasic{} - require.Equal(t, types.ModuleName, module.Name()) -} - -func TestAppModuleConsensusVersion(t *testing.T) { - module := tokenfactory.AppModule{} - require.Equal(t, uint64(1), module.ConsensusVersion()) -} From eabde1936c73137b4921f8a0d500ce4050b60b76 Mon Sep 17 00:00:00 2001 From: Diana Borbe Date: Mon, 4 May 2026 11:21:14 +0200 Subject: [PATCH 04/11] Add proto --- prototypes/proto/buf.gen.gogo.yaml | 13 ++ prototypes/proto/buf.lock | 33 +++++ prototypes/proto/buf.yaml | 25 ++++ prototypes/proto/sandbox/ift/genesis.proto | 24 ++++ prototypes/proto/sandbox/ift/ift.proto | 48 +++++++ prototypes/proto/sandbox/ift/query.proto | 83 ++++++++++++ prototypes/proto/sandbox/ift/tx.proto | 124 ++++++++++++++++++ .../proto/sandbox/tokenfactory/genesis.proto | 20 +++ .../proto/sandbox/tokenfactory/query.proto | 57 ++++++++ .../sandbox/tokenfactory/tokenfactory.proto | 14 ++ .../proto/sandbox/tokenfactory/tx.proto | 99 ++++++++++++++ 11 files changed, 540 insertions(+) create mode 100644 prototypes/proto/buf.gen.gogo.yaml create mode 100644 prototypes/proto/buf.lock create mode 100644 prototypes/proto/buf.yaml create mode 100644 prototypes/proto/sandbox/ift/genesis.proto create mode 100644 prototypes/proto/sandbox/ift/ift.proto create mode 100644 prototypes/proto/sandbox/ift/query.proto create mode 100644 prototypes/proto/sandbox/ift/tx.proto create mode 100644 prototypes/proto/sandbox/tokenfactory/genesis.proto create mode 100644 prototypes/proto/sandbox/tokenfactory/query.proto create mode 100644 prototypes/proto/sandbox/tokenfactory/tokenfactory.proto create mode 100644 prototypes/proto/sandbox/tokenfactory/tx.proto diff --git a/prototypes/proto/buf.gen.gogo.yaml b/prototypes/proto/buf.gen.gogo.yaml new file mode 100644 index 00000000000..9d53ba67a81 --- /dev/null +++ b/prototypes/proto/buf.gen.gogo.yaml @@ -0,0 +1,13 @@ +version: v1 +plugins: + - name: gocosmos + out: .. + opt: + - plugins=grpc + - Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types + - Mcosmos/orm/v1/orm.proto=cosmossdk.io/orm + - name: grpc-gateway + out: .. + opt: + - logtostderr=true + - allow_colon_final_segments=true diff --git a/prototypes/proto/buf.lock b/prototypes/proto/buf.lock new file mode 100644 index 00000000000..54de9dcc042 --- /dev/null +++ b/prototypes/proto/buf.lock @@ -0,0 +1,33 @@ +# Generated by buf. DO NOT EDIT. +version: v1 +deps: + - remote: buf.build + owner: cosmos + repository: cosmos-proto + commit: 04467658e59e44bbb22fe568206e1f70 + digest: shake256:73a640bd60e0c523b0f8237ff34eab67c45a38b64bbbde1d80224819d272dbf316ac183526bd245f994af6608b025f5130483d0133c5edd385531326b5990466 + - remote: buf.build + owner: cosmos + repository: cosmos-sdk + commit: 650cd9ad7f7a468e8e19975269958658 + digest: shake256:c2c1e67ed8efa7f5c6af7a2fc02a6c257dc78fe86911cbf4d3dd379710bf475565ffe2ae4f65221888373d515caa31be68b720897cccec6e0c6a1a91ff0b5227 + - remote: buf.build + owner: cosmos + repository: gogo-proto + commit: 88ef6483f90f478fb938c37dde52ece3 + digest: shake256:89c45df2aa11e0cff97b0d695436713db3d993d76792e9f8dc1ae90e6ab9a9bec55503d48ceedd6b86069ab07d3041b32001b2bfe0227fa725dd515ff381e5ba + - remote: buf.build + owner: cosmos + repository: ics23 + commit: dc427cb4519143d8996361c045a29ad7 + digest: shake256:f6611c56170e2cb6354fa6e367a225fed7b8b0defca3252f05e842fe311be46997680ebf57d8644b52c1f2cca49b366ffe89ce5e8db5fd055a15259c88e4e41e + - remote: buf.build + owner: googleapis + repository: googleapis + commit: 61b203b9a9164be9a834f58c37be6f62 + digest: shake256:e619113001d6e284ee8a92b1561e5d4ea89a47b28bf0410815cb2fa23914df8be9f1a6a98dcf069f5bc2d829a2cfb1ac614863be45cd4f8a5ad8606c5f200224 + - remote: buf.build + owner: protocolbuffers + repository: wellknowntypes + commit: a4aee59cf3714106961b09d99b349cd1 + digest: shake256:7e2aa4fb37e2be8dc8a4bcbebaec00635abbcc7333df40ba6412a666335f66c5c0705ce4cc5c207e728412ac3d81850545f90e8535da66712a17ab42923be6bd diff --git a/prototypes/proto/buf.yaml b/prototypes/proto/buf.yaml new file mode 100644 index 00000000000..5671350cf54 --- /dev/null +++ b/prototypes/proto/buf.yaml @@ -0,0 +1,25 @@ +version: v1 +deps: + - buf.build/protocolbuffers/wellknowntypes + - buf.build/cosmos/cosmos-sdk + - buf.build/cosmos/cosmos-proto + - buf.build/cosmos/gogo-proto + - buf.build/googleapis/googleapis + - buf.build/cosmos/ics23 +breaking: + use: + - FILE +lint: + use: + - STANDARD + - COMMENTS + - FILE_LOWER_SNAKE_CASE + except: + - UNARY_RPC + - COMMENT_FIELD + - COMMENT_MESSAGE + - SERVICE_SUFFIX + - PACKAGE_VERSION_SUFFIX + - RPC_REQUEST_STANDARD_NAME + - RPC_RESPONSE_STANDARD_NAME + diff --git a/prototypes/proto/sandbox/ift/genesis.proto b/prototypes/proto/sandbox/ift/genesis.proto new file mode 100644 index 00000000000..f1dc246640e --- /dev/null +++ b/prototypes/proto/sandbox/ift/genesis.proto @@ -0,0 +1,24 @@ +syntax = "proto3"; +package sandbox.ift; + +import "gogoproto/gogo.proto"; +import "sandbox/ift/ift.proto"; + +option go_package = "github.com/cosmos/ibc-go/prototypes/x/ift/types"; + +// GenesisState defines the IFT module's genesis state. +message GenesisState { + // Module parameters + Params params = 1 [ (gogoproto.nullable) = false ]; + // All registered IFT bridges + repeated GenesisBridge bridges = 2 [ (gogoproto.nullable) = false ]; + // All pending transfers + repeated PendingTransfer pending_transfers = 3 + [ (gogoproto.nullable) = false ]; +} + +// GenesisBridge wraps denom with its bridge configuration +message GenesisBridge { + string denom = 1; + IFTBridge bridge = 2 [ (gogoproto.nullable) = false ]; +} diff --git a/prototypes/proto/sandbox/ift/ift.proto b/prototypes/proto/sandbox/ift/ift.proto new file mode 100644 index 00000000000..ecdf36f650d --- /dev/null +++ b/prototypes/proto/sandbox/ift/ift.proto @@ -0,0 +1,48 @@ +syntax = "proto3"; +package sandbox.ift; + +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; + +option go_package = "github.com/cosmos/ibc-go/prototypes/x/ift/types"; + +// IFTBridge represents a counterparty IFT contract on a different chain +// connected via an IBC Light Client +message IFTBridge { + // The IBC client identifier on the local chain representing the counterparty + // chain + string client_id = 1; + // The address of the IFT contract on the counterparty chain + string counterparty_ift_address = 2; + // The identifier of the IFTSendCall constructor to use. + // For simple constructors: "evm" or "cosmos" + // For Solana: JSON format + // {"solana":{"gmp_program_id":"...","mint_pubkey":"..."}} + string ift_send_call_constructor = 3; +} + +// PendingTransfer represents a transfer that has been initiated but not yet +// completed +message PendingTransfer { + // The denom representing the IFT token on this chain + string denom = 1; + // The IBC client identifier over which the transfer is being made + string client_id = 2; + // The IBC sequence number associated with the ibc packet + uint64 sequence = 3; + // The address of the sender who initiated the transfer + string sender = 4 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // The amount of tokens involved in the pending transfer + string amount = 5 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; +} + +// Params defines the parameters for the IFT module +message Params { + // Authority is the address that can register/remove bridges (typically + // governance) + string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; +} diff --git a/prototypes/proto/sandbox/ift/query.proto b/prototypes/proto/sandbox/ift/query.proto new file mode 100644 index 00000000000..30b0185c87b --- /dev/null +++ b/prototypes/proto/sandbox/ift/query.proto @@ -0,0 +1,83 @@ +syntax = "proto3"; +package sandbox.ift; + +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "sandbox/ift/ift.proto"; + +option go_package = "github.com/cosmos/ibc-go/prototypes/x/ift/types"; + +// Query defines the gRPC querier service. +service Query { + // IFTBridge queries the IFT bridge information for a specific denom and + // client_id + rpc IFTBridge(QueryIFTBridgeRequest) returns (QueryIFTBridgeResponse) { + option (google.api.http).get = "/sandbox/ift/bridge/{denom}/{client_id}"; + } + + // IFTBridges queries all IFT bridges + rpc IFTBridges(QueryIFTBridgesRequest) returns (QueryIFTBridgesResponse) { + option (google.api.http).get = "/sandbox/ift/bridges"; + } + + // IFTBridgesByDenom queries all IFT bridges for a specific denom + rpc IFTBridgesByDenom(QueryIFTBridgesByDenomRequest) + returns (QueryIFTBridgesByDenomResponse) { + option (google.api.http).get = "/sandbox/ift/bridges/{denom}"; + } + + // PendingTransfer queries a pending transfer + rpc PendingTransfer(QueryPendingTransferRequest) + returns (QueryPendingTransferResponse) { + option (google.api.http).get = + "/sandbox/ift/pending/{denom}/{client_id}/{sequence}"; + } + + // Params queries the module parameters + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/sandbox/ift/params"; + } +} + +message QueryIFTBridgeRequest { + string denom = 1; + string client_id = 2; +} + +message QueryIFTBridgeResponse { + IFTBridge bridge = 1 [ (gogoproto.nullable) = false ]; +} + +message QueryIFTBridgesRequest {} + +message QueryIFTBridgesResponse { + repeated DenomBridge bridges = 1 [ (gogoproto.nullable) = false ]; +} + +message QueryIFTBridgesByDenomRequest { string denom = 1; } + +message QueryIFTBridgesByDenomResponse { + repeated IFTBridge bridges = 1 [ (gogoproto.nullable) = false ]; +} + +message QueryPendingTransferRequest { + string denom = 1; + string client_id = 2; + uint64 sequence = 3; +} + +message QueryPendingTransferResponse { + PendingTransfer pending_transfer = 1 [ (gogoproto.nullable) = false ]; +} + +message QueryParamsRequest {} + +message QueryParamsResponse { + Params params = 1 [ (gogoproto.nullable) = false ]; +} + +// DenomBridge wraps denom with its bridge info for query responses +message DenomBridge { + string denom = 1; + IFTBridge bridge = 2 [ (gogoproto.nullable) = false ]; +} diff --git a/prototypes/proto/sandbox/ift/tx.proto b/prototypes/proto/sandbox/ift/tx.proto new file mode 100644 index 00000000000..9c6b344e10b --- /dev/null +++ b/prototypes/proto/sandbox/ift/tx.proto @@ -0,0 +1,124 @@ +syntax = "proto3"; +package sandbox.ift; + +import "cosmos/msg/v1/msg.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "sandbox/ift/ift.proto"; + +option go_package = "github.com/cosmos/ibc-go/prototypes/x/ift/types"; + +// Msg defines the IFT module Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // RegisterIFTBridge registers a new IBC bridge to a counterparty IFT contract + rpc RegisterIFTBridge(MsgRegisterIFTBridge) + returns (MsgRegisterIFTBridgeResponse); + // RemoveIFTBridge removes an existing IBC bridge + rpc RemoveIFTBridge(MsgRemoveIFTBridge) returns (MsgRemoveIFTBridgeResponse); + // IFTTransfer initiates a cross-chain token transfer + rpc IFTTransfer(MsgIFTTransfer) returns (MsgIFTTransferResponse); + // IFTMint mints tokens in response to a cross-chain transfer + rpc IFTMint(MsgIFTMint) returns (MsgIFTMintResponse); + // UpdateParams updates the module parameters + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); +} + +// MsgRegisterIFTBridge registers a new IBC bridge to a counterparty IFT +// contract +message MsgRegisterIFTBridge { + option (cosmos.msg.v1.signer) = "signer"; + + // The address of the signer registering the bridge (must be authority) + string signer = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // The denom representing the IFT token on this chain + string denom = 2; + // The IBC client identifier on the local chain representing the counterparty + // chain + string client_id = 3; + // The address of the IFT on the counterparty chain + string counterparty_ift_address = 4; + // The identifier of the IFTSendCall constructor to use. + // For simple constructors: "evm" or "cosmos" + // For Solana: JSON format + // {"solana":{"gmp_program_id":"...","mint_pubkey":"..."}} + string ift_send_call_constructor = 5; +} + +message MsgRegisterIFTBridgeResponse {} + +// MsgRemoveIFTBridge removes an existing IBC bridge +message MsgRemoveIFTBridge { + option (cosmos.msg.v1.signer) = "signer"; + + // The address of the signer removing the bridge (must be authority) + string signer = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // The denom representing the IFT token on this chain + string denom = 2; + // The IBC client identifier on the local chain representing the counterparty + // chain + string client_id = 3; +} + +message MsgRemoveIFTBridgeResponse {} + +// MsgIFTTransfer initiates a cross-chain token transfer +message MsgIFTTransfer { + option (cosmos.msg.v1.signer) = "signer"; + + // The address of the signer initiating the transfer + string signer = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // The denom representing the IFT token on this chain + string denom = 2; + // The IBC client identifier over which the transfer is being made + string client_id = 3; + // The address of the receiver on the counterparty chain + string receiver = 4; + // The amount of tokens to transfer + string amount = 5 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + // The timeout timestamp for the IBC packet (in seconds since epoch) + uint64 timeout_timestamp = 6; +} + +message MsgIFTTransferResponse { + // The sequence number of the IBC packet + uint64 sequence = 1; +} + +// MsgIFTMint mints tokens in response to a cross-chain transfer +message MsgIFTMint { + option (cosmos.msg.v1.signer) = "signer"; + + // The address of the signer (must be ICS27-GMP account controlled by + // counterparty bridge) + string signer = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // The denom representing the IFT token on this chain + string denom = 2; + // The address of the receiver on the local chain + string receiver = 3 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // The amount of tokens to mint + string amount = 4 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; +} + +message MsgIFTMintResponse {} + +// MsgUpdateParams updates the module parameters +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + + // Authority is the address that controls the module (typically governance) + string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // Params defines the new parameters to set + Params params = 2 [ (gogoproto.nullable) = false ]; +} + +message MsgUpdateParamsResponse {} diff --git a/prototypes/proto/sandbox/tokenfactory/genesis.proto b/prototypes/proto/sandbox/tokenfactory/genesis.proto new file mode 100644 index 00000000000..5f3960308ff --- /dev/null +++ b/prototypes/proto/sandbox/tokenfactory/genesis.proto @@ -0,0 +1,20 @@ +syntax = "proto3"; +package sandbox.tokenfactory; + +import "gogoproto/gogo.proto"; +import "sandbox/tokenfactory/tokenfactory.proto"; + +option go_package = "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types"; + +// GenesisState defines the tokenfactory module's genesis state. +message GenesisState { + Params params = 1 [ (gogoproto.nullable) = false ]; + repeated GenesisDenom factory_denoms = 2 [ (gogoproto.nullable) = false ]; +} + +// GenesisDenom defines a genesis denom for the tokenfactory module. +message GenesisDenom { + string denom = 1; + DenomAuthorityMetadata authority_metadata = 2 + [ (gogoproto.nullable) = false ]; +} diff --git a/prototypes/proto/sandbox/tokenfactory/query.proto b/prototypes/proto/sandbox/tokenfactory/query.proto new file mode 100644 index 00000000000..60e7a625803 --- /dev/null +++ b/prototypes/proto/sandbox/tokenfactory/query.proto @@ -0,0 +1,57 @@ +syntax = "proto3"; +package sandbox.tokenfactory; + +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "sandbox/tokenfactory/tokenfactory.proto"; + +option go_package = "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types"; + +// Query defines the gRPC querier service. +service Query { + // DenomAuthorityMetadata queries the authority metadata for a denom. + rpc DenomAuthorityMetadata(QueryDenomAuthorityMetadataRequest) + returns (QueryDenomAuthorityMetadataResponse) { + option (google.api.http).get = + "/sandbox/tokenfactory/denoms/{denom}/authority_metadata"; + } + + // DenomsByCreator queries all denoms created by a specific address. + rpc DenomsByCreator(QueryDenomsByCreatorRequest) + returns (QueryDenomsByCreatorResponse) { + option (google.api.http).get = + "/sandbox/tokenfactory/creators/{creator}/denoms"; + } + + // Params queries the parameters of the tokenfactory module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/sandbox/tokenfactory/params"; + } +} + +// QueryDenomAuthorityMetadataRequest is the request type for the +// Query/DenomAuthorityMetadata RPC method. +message QueryDenomAuthorityMetadataRequest { string denom = 1; } + +// QueryDenomAuthorityMetadataResponse is the response type for the +// Query/DenomAuthorityMetadata RPC method. +message QueryDenomAuthorityMetadataResponse { + DenomAuthorityMetadata authority_metadata = 1 + [ (gogoproto.nullable) = false ]; +} + +// QueryDenomsByCreatorRequest is the request type for the +// Query/DenomsByCreator RPC method. +message QueryDenomsByCreatorRequest { string creator = 1; } + +// QueryDenomsByCreatorResponse is the response type for the +// Query/DenomsByCreator RPC method. +message QueryDenomsByCreatorResponse { repeated string denoms = 1; } + +// QueryParamsRequest is the request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is the response type for the Query/Params RPC method. +message QueryParamsResponse { + Params params = 1 [ (gogoproto.nullable) = false ]; +} diff --git a/prototypes/proto/sandbox/tokenfactory/tokenfactory.proto b/prototypes/proto/sandbox/tokenfactory/tokenfactory.proto new file mode 100644 index 00000000000..88698193d41 --- /dev/null +++ b/prototypes/proto/sandbox/tokenfactory/tokenfactory.proto @@ -0,0 +1,14 @@ +syntax = "proto3"; +package sandbox.tokenfactory; + +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types"; + +// Params defines the parameters for the tokenfactory module. +message Params {} + +// DenomAuthorityMetadata defines the authority metadata for a denom. +message DenomAuthorityMetadata { + string admin = 1 [ (amino.dont_omitempty) = true ]; +} diff --git a/prototypes/proto/sandbox/tokenfactory/tx.proto b/prototypes/proto/sandbox/tokenfactory/tx.proto new file mode 100644 index 00000000000..1f8dbb0d475 --- /dev/null +++ b/prototypes/proto/sandbox/tokenfactory/tx.proto @@ -0,0 +1,99 @@ +syntax = "proto3"; +package sandbox.tokenfactory; + +import "amino/amino.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/msg/v1/msg.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types"; + +// Msg defines the tokenfactory module's gRPC message service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // CreateDenom creates a new denom. + rpc CreateDenom(MsgCreateDenom) returns (MsgCreateDenomResponse); + + // Mint mints new tokens. + rpc Mint(MsgMint) returns (MsgMintResponse); + + // Burn burns tokens. + rpc Burn(MsgBurn) returns (MsgBurnResponse); + + // ChangeAdmin transfers admin authority to a new address. + rpc ChangeAdmin(MsgChangeAdmin) returns (MsgChangeAdminResponse); + + // RenounceAdmin permanently removes admin authority. + rpc RenounceAdmin(MsgRenounceAdmin) returns (MsgRenounceAdminResponse); +} + +// MsgCreateDenom is the message for creating a new denom. +message MsgCreateDenom { + option (cosmos.msg.v1.signer) = "sender"; + option (amino.name) = "sandbox/tokenfactory/MsgCreateDenom"; + + string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string denom = 2; +} + +// MsgCreateDenomResponse is the response for creating a new denom. +message MsgCreateDenomResponse {} + +// MsgMint is the message for minting new tokens. +message MsgMint { + option (cosmos.msg.v1.signer) = "from"; + option (amino.name) = "sandbox/tokenfactory/MsgMint"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string from = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string address = 2 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + cosmos.base.v1beta1.Coin amount = 3 [ (gogoproto.nullable) = false ]; +} + +// MsgMintResponse is the response for minting new tokens. +message MsgMintResponse {} + +// MsgBurn is the message for burning tokens. +message MsgBurn { + option (cosmos.msg.v1.signer) = "from"; + option (amino.name) = "sandbox/tokenfactory/MsgBurn"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string from = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + cosmos.base.v1beta1.Coin amount = 2 [ (gogoproto.nullable) = false ]; +} + +// MsgBurnResponse is the response for burning tokens. +message MsgBurnResponse {} + +// MsgChangeAdmin transfers admin authority to a new address. +message MsgChangeAdmin { + option (cosmos.msg.v1.signer) = "sender"; + option (amino.name) = "sandbox/tokenfactory/MsgChangeAdmin"; + + string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string denom = 2; + string new_admin = 3 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; +} + +// MsgChangeAdminResponse is the response for changing admin. +message MsgChangeAdminResponse {} + +// MsgRenounceAdmin permanently removes admin authority. +// After renouncing, no one can mint/burn via MsgMint/MsgBurn. +message MsgRenounceAdmin { + option (cosmos.msg.v1.signer) = "sender"; + option (amino.name) = "sandbox/tokenfactory/MsgRenounceAdmin"; + + string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string denom = 2; +} + +// MsgRenounceAdminResponse is the response for renouncing admin. +message MsgRenounceAdminResponse {} From dc875b2cc859530307b61c5cfbc4e33678fe3fa4 Mon Sep 17 00:00:00 2001 From: Diana Borbe Date: Mon, 4 May 2026 11:27:53 +0200 Subject: [PATCH 05/11] Add proto --- prototypes/proto/buf.lock | 12 ++++++------ prototypes/proto/buf.yaml | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/prototypes/proto/buf.lock b/prototypes/proto/buf.lock index 54de9dcc042..0a6666c84e5 100644 --- a/prototypes/proto/buf.lock +++ b/prototypes/proto/buf.lock @@ -9,8 +9,8 @@ deps: - remote: buf.build owner: cosmos repository: cosmos-sdk - commit: 650cd9ad7f7a468e8e19975269958658 - digest: shake256:c2c1e67ed8efa7f5c6af7a2fc02a6c257dc78fe86911cbf4d3dd379710bf475565ffe2ae4f65221888373d515caa31be68b720897cccec6e0c6a1a91ff0b5227 + commit: 65fa41963e6a41dd95a35934239029df + digest: shake256:f67571e6f86dba07c678908f1734ca5a855416e1ecd903c3ebcae49f93c2a7114cdc64538ee8012cc3bb45e9bfd4345395f43d2ac2c01821ca32e5d734cb4dfd - remote: buf.build owner: cosmos repository: gogo-proto @@ -24,10 +24,10 @@ deps: - remote: buf.build owner: googleapis repository: googleapis - commit: 61b203b9a9164be9a834f58c37be6f62 - digest: shake256:e619113001d6e284ee8a92b1561e5d4ea89a47b28bf0410815cb2fa23914df8be9f1a6a98dcf069f5bc2d829a2cfb1ac614863be45cd4f8a5ad8606c5f200224 + commit: c17df5b2beca46928cc87d5656bd5343 + digest: shake256:c62ecead9b13485a02893cd678a6c81e40879bf00ea509bbc6fd8f1b2cc33eccf6a85c259b08d1e0f052f693cbfc7dfda236e9665b1d6869b8e1132a794a61e2 - remote: buf.build owner: protocolbuffers repository: wellknowntypes - commit: a4aee59cf3714106961b09d99b349cd1 - digest: shake256:7e2aa4fb37e2be8dc8a4bcbebaec00635abbcc7333df40ba6412a666335f66c5c0705ce4cc5c207e728412ac3d81850545f90e8535da66712a17ab42923be6bd + commit: 9d16d599a978406980f6e2f081331a93 + digest: shake256:946278992baee216f7742401780df3727195ffc068a30e21769c7e808d16ee25e9e48e51f938b6ddbe405abe46c45091a56ad90aac1cad0d809d16cbad889ff1 diff --git a/prototypes/proto/buf.yaml b/prototypes/proto/buf.yaml index 5671350cf54..be35c4eabec 100644 --- a/prototypes/proto/buf.yaml +++ b/prototypes/proto/buf.yaml @@ -1,4 +1,5 @@ version: v1 +name: buf.build/cosmos/ibc-prototypes deps: - buf.build/protocolbuffers/wellknowntypes - buf.build/cosmos/cosmos-sdk From 76be6b6c9fde26ca1f9e087c65864c5d7faaa017 Mon Sep 17 00:00:00 2001 From: Diana Borbe Date: Mon, 4 May 2026 11:39:22 +0200 Subject: [PATCH 06/11] Update proto --- prototypes/proto/buf.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/prototypes/proto/buf.yaml b/prototypes/proto/buf.yaml index be35c4eabec..5671350cf54 100644 --- a/prototypes/proto/buf.yaml +++ b/prototypes/proto/buf.yaml @@ -1,5 +1,4 @@ version: v1 -name: buf.build/cosmos/ibc-prototypes deps: - buf.build/protocolbuffers/wellknowntypes - buf.build/cosmos/cosmos-sdk From eb8dcfb81c1205324a1f39634b1b03b2e6b1d1e0 Mon Sep 17 00:00:00 2001 From: Diana Borbe Date: Mon, 4 May 2026 14:39:51 +0200 Subject: [PATCH 07/11] Move prototypes --- go.mod | 11 + go.sum | 34 + .../apps/prototypes}/ift/keeper/callbacks.go | 2 +- .../apps/prototypes}/ift/keeper/genesis.go | 2 +- .../apps/prototypes}/ift/keeper/keeper.go | 2 +- .../apps/prototypes}/ift/keeper/msg_server.go | 2 +- .../apps/prototypes}/ift/keeper/query.go | 2 +- .../apps/prototypes}/ift/module.go | 4 +- .../apps/prototypes}/ift/module_test.go | 4 +- .../apps/prototypes}/ift/types/autocli.go | 0 .../apps/prototypes}/ift/types/codec.go | 10 +- .../apps/prototypes}/ift/types/constructor.go | 0 .../ift/types/constructor_cosmostx.go | 0 .../prototypes}/ift/types/constructor_evm.go | 0 .../ift/types/constructor_solana.go | 0 .../prototypes}/ift/types/constructor_test.go | 2 +- .../apps/prototypes}/ift/types/errors.go | 0 .../apps/prototypes}/ift/types/events.go | 0 .../prototypes}/ift/types/expected_keepers.go | 0 .../apps/prototypes}/ift/types/genesis.go | 0 .../apps/prototypes}/ift/types/genesis.pb.go | 8 +- .../apps/prototypes}/ift/types/ift.pb.go | 10 +- .../apps/prototypes}/ift/types/keys.go | 0 .../apps/prototypes}/ift/types/mint_call.go | 0 .../prototypes}/ift/types/mint_call_test.go | 2 +- .../apps/prototypes}/ift/types/msgs.go | 0 .../apps/prototypes}/ift/types/query.pb.go | 30 +- .../apps/prototypes}/ift/types/query.pb.gw.go | 2 +- .../apps/prototypes}/ift/types/tx.pb.go | 28 +- .../apps/prototypes}/tokenfactory/README.md | 0 .../apps/prototypes}/tokenfactory/TESTING.md | 0 .../apps/prototypes}/tokenfactory/cli/tx.go | 2 +- .../prototypes}/tokenfactory/keeper/denom.go | 2 +- .../tokenfactory/keeper/genesis.go | 2 +- .../prototypes}/tokenfactory/keeper/keeper.go | 2 +- .../tokenfactory/keeper/mint_burn.go | 2 +- .../tokenfactory/keeper/msg_server.go | 2 +- .../prototypes}/tokenfactory/keeper/params.go | 2 +- .../prototypes}/tokenfactory/keeper/query.go | 2 +- .../apps/prototypes}/tokenfactory/module.go | 6 +- .../prototypes}/tokenfactory/types/autocli.go | 0 .../prototypes}/tokenfactory/types/codec.go | 0 .../prototypes}/tokenfactory/types/denom.go | 0 .../tokenfactory/types/denom_test.go | 2 +- .../prototypes}/tokenfactory/types/errors.go | 0 .../prototypes}/tokenfactory/types/events.go | 0 .../tokenfactory/types/expected_keepers.go | 0 .../prototypes}/tokenfactory/types/genesis.go | 0 .../tokenfactory/types/genesis.pb.go | 8 +- .../prototypes}/tokenfactory/types/keys.go | 0 .../prototypes}/tokenfactory/types/msgs.go | 0 .../tokenfactory/types/query.pb.go | 20 +- .../tokenfactory/types/query.pb.gw.go | 2 +- .../tokenfactory/types/tokenfactory.pb.go | 8 +- .../prototypes}/tokenfactory/types/tx.pb.go | 28 +- .../prototypes/ift/v1}/genesis.proto | 6 +- .../applications/prototypes/ift/v1}/ift.proto | 4 +- .../prototypes/ift/v1}/query.proto | 16 +- .../applications/prototypes/ift/v1}/tx.proto | 6 +- .../prototypes/tokenfactory/v1}/genesis.proto | 6 +- .../prototypes/tokenfactory/v1}/query.proto | 12 +- .../tokenfactory/v1}/tokenfactory.proto | 4 +- .../prototypes/tokenfactory/v1}/tx.proto | 14 +- prototypes/go.mod | 291 ---- prototypes/go.sum | 1427 ----------------- prototypes/proto/buf.gen.gogo.yaml | 13 - prototypes/proto/buf.lock | 33 - prototypes/proto/buf.yaml | 25 - 68 files changed, 179 insertions(+), 1923 deletions(-) rename {prototypes/x => modules/apps/prototypes}/ift/keeper/callbacks.go (99%) rename {prototypes/x => modules/apps/prototypes}/ift/keeper/genesis.go (96%) rename {prototypes/x => modules/apps/prototypes}/ift/keeper/keeper.go (98%) rename {prototypes/x => modules/apps/prototypes}/ift/keeper/msg_server.go (99%) rename {prototypes/x => modules/apps/prototypes}/ift/keeper/query.go (97%) rename {prototypes/x => modules/apps/prototypes}/ift/module.go (96%) rename {prototypes/x => modules/apps/prototypes}/ift/module_test.go (80%) rename {prototypes/x => modules/apps/prototypes}/ift/types/autocli.go (100%) rename {prototypes/x => modules/apps/prototypes}/ift/types/codec.go (65%) rename {prototypes/x => modules/apps/prototypes}/ift/types/constructor.go (100%) rename {prototypes/x => modules/apps/prototypes}/ift/types/constructor_cosmostx.go (100%) rename {prototypes/x => modules/apps/prototypes}/ift/types/constructor_evm.go (100%) rename {prototypes/x => modules/apps/prototypes}/ift/types/constructor_solana.go (100%) rename {prototypes/x => modules/apps/prototypes}/ift/types/constructor_test.go (99%) rename {prototypes/x => modules/apps/prototypes}/ift/types/errors.go (100%) rename {prototypes/x => modules/apps/prototypes}/ift/types/events.go (100%) rename {prototypes/x => modules/apps/prototypes}/ift/types/expected_keepers.go (100%) rename {prototypes/x => modules/apps/prototypes}/ift/types/genesis.go (100%) rename {prototypes/x => modules/apps/prototypes}/ift/types/genesis.pb.go (97%) rename {prototypes/x => modules/apps/prototypes}/ift/types/ift.pb.go (98%) rename {prototypes/x => modules/apps/prototypes}/ift/types/keys.go (100%) rename {prototypes/x => modules/apps/prototypes}/ift/types/mint_call.go (100%) rename {prototypes/x => modules/apps/prototypes}/ift/types/mint_call_test.go (99%) rename {prototypes/x => modules/apps/prototypes}/ift/types/msgs.go (100%) rename {prototypes/x => modules/apps/prototypes}/ift/types/query.pb.go (97%) rename {prototypes/x => modules/apps/prototypes}/ift/types/query.pb.gw.go (99%) rename {prototypes/x => modules/apps/prototypes}/ift/types/tx.pb.go (98%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/README.md (100%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/TESTING.md (100%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/cli/tx.go (97%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/keeper/denom.go (98%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/keeper/genesis.go (94%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/keeper/keeper.go (96%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/keeper/mint_burn.go (98%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/keeper/msg_server.go (98%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/keeper/params.go (85%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/keeper/query.go (93%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/module.go (95%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/types/autocli.go (100%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/types/codec.go (100%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/types/denom.go (100%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/types/denom_test.go (94%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/types/errors.go (100%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/types/events.go (100%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/types/expected_keepers.go (100%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/types/genesis.go (100%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/types/genesis.pb.go (97%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/types/keys.go (100%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/types/msgs.go (100%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/types/query.pb.go (97%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/types/query.pb.gw.go (99%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/types/tokenfactory.pb.go (96%) rename {prototypes/x => modules/apps/prototypes}/tokenfactory/types/tx.pb.go (97%) rename {prototypes/proto/sandbox/ift => proto/ibc/applications/prototypes/ift/v1}/genesis.proto (76%) rename {prototypes/proto/sandbox/ift => proto/ibc/applications/prototypes/ift/v1}/ift.proto (92%) rename {prototypes/proto/sandbox/ift => proto/ibc/applications/prototypes/ift/v1}/query.proto (75%) rename {prototypes/proto/sandbox/ift => proto/ibc/applications/prototypes/ift/v1}/tx.proto (95%) rename {prototypes/proto/sandbox/tokenfactory => proto/ibc/applications/prototypes/tokenfactory/v1}/genesis.proto (68%) rename {prototypes/proto/sandbox/tokenfactory => proto/ibc/applications/prototypes/tokenfactory/v1}/query.proto (78%) rename {prototypes/proto/sandbox/tokenfactory => proto/ibc/applications/prototypes/tokenfactory/v1}/tokenfactory.proto (66%) rename {prototypes/proto/sandbox/tokenfactory => proto/ibc/applications/prototypes/tokenfactory/v1}/tx.proto (83%) delete mode 100644 prototypes/go.mod delete mode 100644 prototypes/go.sum delete mode 100644 prototypes/proto/buf.gen.gogo.yaml delete mode 100644 prototypes/proto/buf.lock delete mode 100644 prototypes/proto/buf.yaml diff --git a/go.mod b/go.mod index b281a35bd2e..2f7297b892b 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,10 @@ require ( github.com/cosmos/cosmos-sdk/store/v2 v2.0.0 github.com/cosmos/gogoproto v1.7.2 github.com/cosmos/ics23/go v0.11.0 + github.com/cosmos/solidity-ibc-eureka/packages/go-proto v0.0.0-20260502103309-00b9d8658884 github.com/ethereum/go-ethereum v1.17.2 + github.com/gagliardetto/binary v0.8.0 + github.com/gagliardetto/solana-go v1.19.0 github.com/golang/protobuf v1.5.4 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/hashicorp/go-metrics v0.5.4 @@ -77,6 +80,7 @@ require ( github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.2.0 // indirect github.com/bits-and-blooms/bitset v1.24.4 // indirect + github.com/blendle/zapdriver v1.3.1 // indirect github.com/bytedance/gopkg v0.1.4 // indirect github.com/bytedance/sonic v1.15.0 // indirect github.com/bytedance/sonic/loader v0.5.1 // indirect @@ -117,6 +121,7 @@ require ( github.com/felixge/httpsnoop v1.0.4 // indirect github.com/flynn/noise v1.1.0 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect + github.com/gagliardetto/treeout v0.1.4 // indirect github.com/getsentry/sentry-go v0.44.1 // indirect github.com/go-jose/go-jose/v4 v4.1.4 // indirect github.com/go-kit/kit v0.13.0 // indirect @@ -126,6 +131,7 @@ require ( github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/go-viper/mapstructure/v2 v2.5.0 // indirect + github.com/goccy/go-json v0.10.6 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -180,6 +186,7 @@ require ( github.com/libp2p/go-reuseport v0.4.0 // indirect github.com/libp2p/go-yamux/v5 v5.0.1 // indirect github.com/linxGnu/grocksdb v1.10.7 // indirect + github.com/logrusorgru/aurora v2.0.3+incompatible // indirect github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect @@ -191,6 +198,8 @@ require ( github.com/minio/highwayhash v1.0.4 // indirect github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-testing-interface v1.14.1 // indirect + github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1 // indirect github.com/mr-tron/base58 v1.2.0 // indirect github.com/mschoch/smat v0.2.0 // indirect github.com/mtibben/percent v0.2.1 // indirect @@ -256,6 +265,7 @@ require ( github.com/spf13/pflag v1.0.10 // indirect github.com/spf13/viper v1.21.0 // indirect github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect + github.com/streamingfast/logging v0.0.0-20250404134358-92b15d2fbd2e // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/supranational/blst v0.3.16 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect @@ -271,6 +281,7 @@ require ( github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v1.0.1 // indirect go.etcd.io/bbolt v1.4.3 // indirect + go.mongodb.org/mongo-driver/v2 v2.5.0 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/contrib/bridges/otelslog v0.17.0 // indirect go.opentelemetry.io/contrib/detectors/gcp v1.43.0 // indirect diff --git a/go.sum b/go.sum index f6f92363de5..fb85e587d41 100644 --- a/go.sum +++ b/go.sum @@ -146,6 +146,8 @@ github.com/bgentry/speakeasy v0.2.0 h1:tgObeVOf8WAvtuAX6DhJ4xks4CFNwPDZiqzGqIHE5 github.com/bgentry/speakeasy v0.2.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bits-and-blooms/bitset v1.24.4 h1:95H15Og1clikBrKr/DuzMXkQzECs1M6hhoGXLwLQOZE= github.com/bits-and-blooms/bitset v1.24.4/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/blendle/zapdriver v1.3.1 h1:C3dydBOWYRiOk+B8X9IVZ5IOe+7cl+tGOexN4QqHfpE= +github.com/blendle/zapdriver v1.3.1/go.mod h1:mdXfREi6u5MArG4j9fewC+FGnXaBR+T4Ox4J2u4eHCc= github.com/btcsuite/btcd/btcec/v2 v2.3.5 h1:dpAlnAwmT1yIBm3exhT1/8iUSD98RDJM5vqJVQDQLiU= github.com/btcsuite/btcd/btcec/v2 v2.3.5/go.mod h1:m22FrOAiuxl/tht9wIqAoGHcbnCCaPWyauO8y2LGGtQ= github.com/btcsuite/btcd/btcutil v1.1.6 h1:zFL2+c3Lb9gEgqKNzowKUPQNb8jV7v5Oaodi/AYFd6c= @@ -242,6 +244,8 @@ github.com/cosmos/ics23/go v0.11.0 h1:jk5skjT0TqX5e5QJbEnwXIS2yI2vnmLOgpQPeM5Rtn github.com/cosmos/ics23/go v0.11.0/go.mod h1:A8OjxPE67hHST4Icw94hOxxFEJMBG031xIGF/JHNIY0= github.com/cosmos/ledger-cosmos-go v1.0.0 h1:jNKW89nPf0vR0EkjHG8Zz16h6p3zqwYEOxlHArwgYtw= github.com/cosmos/ledger-cosmos-go v1.0.0/go.mod h1:mGaw2wDOf+Z6SfRJsMGxU9DIrBa4du0MAiPlpPhLAOE= +github.com/cosmos/solidity-ibc-eureka/packages/go-proto v0.0.0-20260502103309-00b9d8658884 h1:qe6m1bDONjbSjr8rgJyXtnbmllRI/WrHftODkkE8VOk= +github.com/cosmos/solidity-ibc-eureka/packages/go-proto v0.0.0-20260502103309-00b9d8658884/go.mod h1:OXel42XVhxNaFBPhA8URw1f/UG6pWEjkBB3DMRQD/hM= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= @@ -323,6 +327,12 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/gagliardetto/binary v0.8.0 h1:U9ahc45v9HW0d15LoN++vIXSJyqR/pWw8DDlhd7zvxg= +github.com/gagliardetto/binary v0.8.0/go.mod h1:2tfj51g5o9dnvsc+fL3Jxr22MuWzYXwx9wEoN0XQ7/c= +github.com/gagliardetto/solana-go v1.19.0 h1:m3fPxI7/+VpE6WgOzwmRBY9t4QY6ljvpJLhwWaJVOE8= +github.com/gagliardetto/solana-go v1.19.0/go.mod h1:M88UnNo9tGt64VizMeR1+jZuyrFF8vho9ZOCtYKPXxQ= +github.com/gagliardetto/treeout v0.1.4 h1:ozeYerrLCmCubo1TcIjFiOWTTGteOOHND1twdFpgwaw= +github.com/gagliardetto/treeout v0.1.4/go.mod h1:loUefvXTrlRG5rYmJmExNryyBRh8f89VZhmMOyCyqok= github.com/getsentry/sentry-go v0.44.1 h1:/cPtrA5qB7uMRrhgSn9TYtcEF36auGP3Y6+ThvD/yaI= github.com/getsentry/sentry-go v0.44.1/go.mod h1:XDotiNZbgf5U8bPDUAfvcFmOnMQQceESxyKaObSssW0= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -365,6 +375,8 @@ github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlnd github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/goccy/go-json v0.10.6 h1:p8HrPJzOakx/mn/bQtjgNjdTcN+/S6FcG2CTtQOrHVU= +github.com/goccy/go-json v0.10.6/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= @@ -558,6 +570,7 @@ github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQL github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE= github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= @@ -603,6 +616,8 @@ github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-b github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/linxGnu/grocksdb v1.10.7 h1:fCi4qvZWo04VgFwGWmO8HQJgUVounJBy+C2TMVPU/ho= github.com/linxGnu/grocksdb v1.10.7/go.mod h1:OLQKZwiKwaJiAVCsOzWKvwiLwfZ5Vz8Md5TYR7t7pM8= +github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= +github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88 h1:PTw+yKnXcOFCR6+8hHTyWBeQ/P4Nb7dd4/0ohEcWQuM= github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= @@ -647,6 +662,8 @@ github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrk github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= +github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= @@ -657,6 +674,8 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1 h1:mPMvm6X6tf4w8y7j9YIt6V9jfWhL6QlbEc7CCmeQlWk= +github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1/go.mod h1:ye2e/VUEtE2BHE+G/QcKkcLQVAEJoYRFj5VUOQatCRE= github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= @@ -881,6 +900,9 @@ github.com/sasha-s/go-deadlock v0.3.7/go.mod h1:KuZj51ZFmx42q/mPaYbRk0P1xcwe697z github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shirou/gopsutil/v4 v4.26.3 h1:2ESdQt90yU3oXF/CdOlRCJxrP+Am1aBYubTMTfxJ1qc= github.com/shirou/gopsutil/v4 v4.26.3/go.mod h1:LZ6ewCSkBqUpvSOf+LsTGnRinC6iaNUNMGBtDkJBaLQ= +github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= +github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -915,6 +937,9 @@ github.com/spiffe/go-spiffe/v2 v2.6.0/go.mod h1:gm2SeUoMZEtpnzPNs2Csc0D/gX33k1xI github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091/go.mod h1:VlduQ80JcGJSargkRU4Sg9Xo63wZD/l8A5NC/Uo1/uU= +github.com/streamingfast/logging v0.0.0-20250404134358-92b15d2fbd2e h1:qGVGDR2/bXLyR498un1hvhDQPUJ/m14JBRTJz+c67Bc= +github.com/streamingfast/logging v0.0.0-20250404134358-92b15d2fbd2e/go.mod h1:VlduQ80JcGJSargkRU4Sg9Xo63wZD/l8A5NC/Uo1/uU= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -967,6 +992,7 @@ github.com/wlynxg/anet v0.0.5/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguH github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= @@ -980,6 +1006,8 @@ go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.4.3 h1:dEadXpI6G79deX5prL3QRNP6JB8UxVkqo4UPnHaNXJo= go.etcd.io/bbolt v1.4.3/go.mod h1:tKQlpPaYCVFctUIgFKFnAlvbmB3tpy1vkTnDWohtc0E= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.mongodb.org/mongo-driver/v2 v2.5.0 h1:yXUhImUjjAInNcpTcAlPHiT7bIXhshCTL3jVBkF3xaE= +go.mongodb.org/mongo-driver/v2 v2.5.0/go.mod h1:yOI9kBsufol30iFsl1slpdq1I0eHPzybRWdyYUs8K/0= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -1059,6 +1087,7 @@ go.uber.org/dig v1.19.0/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE= go.uber.org/fx v1.24.0 h1:wE8mruvpg2kiiL1Vqd0CC+tr0/24XIB10Iwp2lLWzkg= go.uber.org/fx v1.24.0/go.mod h1:AmDeGyS+ZARGKM4tlH4FY2Jr63VjbEDJHtqXTGP5hbo= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y= @@ -1072,6 +1101,7 @@ go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9E go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc= go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ= @@ -1092,6 +1122,7 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= @@ -1115,6 +1146,7 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI= @@ -1146,6 +1178,7 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= @@ -1281,6 +1314,7 @@ golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= diff --git a/prototypes/x/ift/keeper/callbacks.go b/modules/apps/prototypes/ift/keeper/callbacks.go similarity index 99% rename from prototypes/x/ift/keeper/callbacks.go rename to modules/apps/prototypes/ift/keeper/callbacks.go index f8da15bb04c..ee5ff7908c6 100644 --- a/prototypes/x/ift/keeper/callbacks.go +++ b/modules/apps/prototypes/ift/keeper/callbacks.go @@ -4,7 +4,7 @@ import ( "bytes" "strconv" - "github.com/cosmos/ibc-go/prototypes/x/ift/types" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/ift/types" "cosmossdk.io/collections" errorsmod "cosmossdk.io/errors" diff --git a/prototypes/x/ift/keeper/genesis.go b/modules/apps/prototypes/ift/keeper/genesis.go similarity index 96% rename from prototypes/x/ift/keeper/genesis.go rename to modules/apps/prototypes/ift/keeper/genesis.go index 4f72aed54f0..d784b04069e 100644 --- a/prototypes/x/ift/keeper/genesis.go +++ b/modules/apps/prototypes/ift/keeper/genesis.go @@ -3,7 +3,7 @@ package keeper import ( "context" - "github.com/cosmos/ibc-go/prototypes/x/ift/types" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/ift/types" "cosmossdk.io/collections" ) diff --git a/prototypes/x/ift/keeper/keeper.go b/modules/apps/prototypes/ift/keeper/keeper.go similarity index 98% rename from prototypes/x/ift/keeper/keeper.go rename to modules/apps/prototypes/ift/keeper/keeper.go index f9c7a07cc25..1ac5954b63e 100644 --- a/prototypes/x/ift/keeper/keeper.go +++ b/modules/apps/prototypes/ift/keeper/keeper.go @@ -5,7 +5,7 @@ import ( "errors" "fmt" - "github.com/cosmos/ibc-go/prototypes/x/ift/types" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/ift/types" "cosmossdk.io/collections" "cosmossdk.io/core/address" diff --git a/prototypes/x/ift/keeper/msg_server.go b/modules/apps/prototypes/ift/keeper/msg_server.go similarity index 99% rename from prototypes/x/ift/keeper/msg_server.go rename to modules/apps/prototypes/ift/keeper/msg_server.go index aa702753b05..eff2cef0964 100644 --- a/prototypes/x/ift/keeper/msg_server.go +++ b/modules/apps/prototypes/ift/keeper/msg_server.go @@ -5,7 +5,7 @@ import ( "strconv" "strings" - "github.com/cosmos/ibc-go/prototypes/x/ift/types" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/ift/types" "cosmossdk.io/collections" errorsmod "cosmossdk.io/errors" diff --git a/prototypes/x/ift/keeper/query.go b/modules/apps/prototypes/ift/keeper/query.go similarity index 97% rename from prototypes/x/ift/keeper/query.go rename to modules/apps/prototypes/ift/keeper/query.go index 4813cdcfeb9..fab26ddd56c 100644 --- a/prototypes/x/ift/keeper/query.go +++ b/modules/apps/prototypes/ift/keeper/query.go @@ -3,7 +3,7 @@ package keeper import ( "context" - "github.com/cosmos/ibc-go/prototypes/x/ift/types" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/ift/types" "cosmossdk.io/collections" ) diff --git a/prototypes/x/ift/module.go b/modules/apps/prototypes/ift/module.go similarity index 96% rename from prototypes/x/ift/module.go rename to modules/apps/prototypes/ift/module.go index 5333bb2a1b8..5085af7142b 100644 --- a/prototypes/x/ift/module.go +++ b/modules/apps/prototypes/ift/module.go @@ -5,8 +5,8 @@ import ( "encoding/json" "fmt" - "github.com/cosmos/ibc-go/prototypes/x/ift/keeper" - "github.com/cosmos/ibc-go/prototypes/x/ift/types" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/ift/keeper" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/ift/types" "github.com/grpc-ecosystem/grpc-gateway/runtime" autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" diff --git a/prototypes/x/ift/module_test.go b/modules/apps/prototypes/ift/module_test.go similarity index 80% rename from prototypes/x/ift/module_test.go rename to modules/apps/prototypes/ift/module_test.go index 159d1cf5b92..c092da0b4ff 100644 --- a/prototypes/x/ift/module_test.go +++ b/modules/apps/prototypes/ift/module_test.go @@ -3,8 +3,8 @@ package ift_test import ( "testing" - "github.com/cosmos/ibc-go/prototypes/x/ift" - "github.com/cosmos/ibc-go/prototypes/x/ift/types" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/ift" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/ift/types" "github.com/stretchr/testify/require" ) diff --git a/prototypes/x/ift/types/autocli.go b/modules/apps/prototypes/ift/types/autocli.go similarity index 100% rename from prototypes/x/ift/types/autocli.go rename to modules/apps/prototypes/ift/types/autocli.go diff --git a/prototypes/x/ift/types/codec.go b/modules/apps/prototypes/ift/types/codec.go similarity index 65% rename from prototypes/x/ift/types/codec.go rename to modules/apps/prototypes/ift/types/codec.go index dcd9dca88de..82a63e1c329 100644 --- a/prototypes/x/ift/types/codec.go +++ b/modules/apps/prototypes/ift/types/codec.go @@ -11,11 +11,11 @@ import ( // RegisterLegacyAminoCodec registers the necessary x/ift interfaces and concrete types // on the provided LegacyAmino codec. These types are used for Amino JSON serialization. func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { - legacy.RegisterAminoMsg(cdc, &MsgRegisterIFTBridge{}, "sandbox/ift/MsgRegisterIFTBridge") - legacy.RegisterAminoMsg(cdc, &MsgRemoveIFTBridge{}, "sandbox/ift/MsgRemoveIFTBridge") - legacy.RegisterAminoMsg(cdc, &MsgIFTTransfer{}, "sandbox/ift/MsgIFTTransfer") - legacy.RegisterAminoMsg(cdc, &MsgIFTMint{}, "sandbox/ift/MsgIFTMint") - legacy.RegisterAminoMsg(cdc, &MsgUpdateParams{}, "sandbox/ift/MsgUpdateParams") + legacy.RegisterAminoMsg(cdc, &MsgRegisterIFTBridge{}, "ibc/applications/ift/v1/MsgRegisterIFTBridge") + legacy.RegisterAminoMsg(cdc, &MsgRemoveIFTBridge{}, "ibc/applications/ift/v1/MsgRemoveIFTBridge") + legacy.RegisterAminoMsg(cdc, &MsgIFTTransfer{}, "ibc/applications/ift/v1/MsgIFTTransfer") + legacy.RegisterAminoMsg(cdc, &MsgIFTMint{}, "ibc/applications/ift/v1/MsgIFTMint") + legacy.RegisterAminoMsg(cdc, &MsgUpdateParams{}, "ibc/applications/ift/v1/MsgUpdateParams") } // RegisterInterfaces registers the x/ift interfaces types with the interface registry diff --git a/prototypes/x/ift/types/constructor.go b/modules/apps/prototypes/ift/types/constructor.go similarity index 100% rename from prototypes/x/ift/types/constructor.go rename to modules/apps/prototypes/ift/types/constructor.go diff --git a/prototypes/x/ift/types/constructor_cosmostx.go b/modules/apps/prototypes/ift/types/constructor_cosmostx.go similarity index 100% rename from prototypes/x/ift/types/constructor_cosmostx.go rename to modules/apps/prototypes/ift/types/constructor_cosmostx.go diff --git a/prototypes/x/ift/types/constructor_evm.go b/modules/apps/prototypes/ift/types/constructor_evm.go similarity index 100% rename from prototypes/x/ift/types/constructor_evm.go rename to modules/apps/prototypes/ift/types/constructor_evm.go diff --git a/prototypes/x/ift/types/constructor_solana.go b/modules/apps/prototypes/ift/types/constructor_solana.go similarity index 100% rename from prototypes/x/ift/types/constructor_solana.go rename to modules/apps/prototypes/ift/types/constructor_solana.go diff --git a/prototypes/x/ift/types/constructor_test.go b/modules/apps/prototypes/ift/types/constructor_test.go similarity index 99% rename from prototypes/x/ift/types/constructor_test.go rename to modules/apps/prototypes/ift/types/constructor_test.go index b49223e2e76..43ff4c1af60 100644 --- a/prototypes/x/ift/types/constructor_test.go +++ b/modules/apps/prototypes/ift/types/constructor_test.go @@ -3,7 +3,7 @@ package types_test import ( "testing" - "github.com/cosmos/ibc-go/prototypes/x/ift/types" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/ift/types" "github.com/stretchr/testify/require" ) diff --git a/prototypes/x/ift/types/errors.go b/modules/apps/prototypes/ift/types/errors.go similarity index 100% rename from prototypes/x/ift/types/errors.go rename to modules/apps/prototypes/ift/types/errors.go diff --git a/prototypes/x/ift/types/events.go b/modules/apps/prototypes/ift/types/events.go similarity index 100% rename from prototypes/x/ift/types/events.go rename to modules/apps/prototypes/ift/types/events.go diff --git a/prototypes/x/ift/types/expected_keepers.go b/modules/apps/prototypes/ift/types/expected_keepers.go similarity index 100% rename from prototypes/x/ift/types/expected_keepers.go rename to modules/apps/prototypes/ift/types/expected_keepers.go diff --git a/prototypes/x/ift/types/genesis.go b/modules/apps/prototypes/ift/types/genesis.go similarity index 100% rename from prototypes/x/ift/types/genesis.go rename to modules/apps/prototypes/ift/types/genesis.go diff --git a/prototypes/x/ift/types/genesis.pb.go b/modules/apps/prototypes/ift/types/genesis.pb.go similarity index 97% rename from prototypes/x/ift/types/genesis.pb.go rename to modules/apps/prototypes/ift/types/genesis.pb.go index f4c8453914d..5aa58220496 100644 --- a/prototypes/x/ift/types/genesis.pb.go +++ b/modules/apps/prototypes/ift/types/genesis.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: sandbox/ift/genesis.proto +// source: ibc/applications/ift/v1/genesis.proto package types @@ -141,11 +141,11 @@ func (m *GenesisBridge) GetBridge() IFTBridge { } func init() { - proto.RegisterType((*GenesisState)(nil), "sandbox.ift.GenesisState") - proto.RegisterType((*GenesisBridge)(nil), "sandbox.ift.GenesisBridge") + proto.RegisterType((*GenesisState)(nil), "ibc.applications.prototypes.ift.v1.GenesisState") + proto.RegisterType((*GenesisBridge)(nil), "ibc.applications.prototypes.ift.v1.GenesisBridge") } -func init() { proto.RegisterFile("sandbox/ift/genesis.proto", fileDescriptor_6525c4ab1ce8c1c3) } +func init() { proto.RegisterFile("ibc/applications/prototypes/ift/v1/genesis.proto", fileDescriptor_6525c4ab1ce8c1c3) } var fileDescriptor_6525c4ab1ce8c1c3 = []byte{ // 308 bytes of a gzipped FileDescriptorProto diff --git a/prototypes/x/ift/types/ift.pb.go b/modules/apps/prototypes/ift/types/ift.pb.go similarity index 98% rename from prototypes/x/ift/types/ift.pb.go rename to modules/apps/prototypes/ift/types/ift.pb.go index 30e07b2e5a2..5d996e61de9 100644 --- a/prototypes/x/ift/types/ift.pb.go +++ b/modules/apps/prototypes/ift/types/ift.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: sandbox/ift/ift.proto +// source: ibc/applications/ift/v1/ift.proto package types @@ -218,12 +218,12 @@ func (m *Params) GetAuthority() string { } func init() { - proto.RegisterType((*IFTBridge)(nil), "sandbox.ift.IFTBridge") - proto.RegisterType((*PendingTransfer)(nil), "sandbox.ift.PendingTransfer") - proto.RegisterType((*Params)(nil), "sandbox.ift.Params") + proto.RegisterType((*IFTBridge)(nil), "ibc.applications.prototypes.ift.v1.IFTBridge") + proto.RegisterType((*PendingTransfer)(nil), "ibc.applications.prototypes.ift.v1.PendingTransfer") + proto.RegisterType((*Params)(nil), "ibc.applications.prototypes.ift.v1.Params") } -func init() { proto.RegisterFile("sandbox/ift/ift.proto", fileDescriptor_7603d0b7ebb5be02) } +func init() { proto.RegisterFile("ibc/applications/prototypes/ift/v1/ift.proto", fileDescriptor_7603d0b7ebb5be02) } var fileDescriptor_7603d0b7ebb5be02 = []byte{ // 416 bytes of a gzipped FileDescriptorProto diff --git a/prototypes/x/ift/types/keys.go b/modules/apps/prototypes/ift/types/keys.go similarity index 100% rename from prototypes/x/ift/types/keys.go rename to modules/apps/prototypes/ift/types/keys.go diff --git a/prototypes/x/ift/types/mint_call.go b/modules/apps/prototypes/ift/types/mint_call.go similarity index 100% rename from prototypes/x/ift/types/mint_call.go rename to modules/apps/prototypes/ift/types/mint_call.go diff --git a/prototypes/x/ift/types/mint_call_test.go b/modules/apps/prototypes/ift/types/mint_call_test.go similarity index 99% rename from prototypes/x/ift/types/mint_call_test.go rename to modules/apps/prototypes/ift/types/mint_call_test.go index ccf28169205..3416e166b5a 100644 --- a/prototypes/x/ift/types/mint_call_test.go +++ b/modules/apps/prototypes/ift/types/mint_call_test.go @@ -6,7 +6,7 @@ import ( "testing" "github.com/cosmos/gogoproto/proto" - "github.com/cosmos/ibc-go/prototypes/x/ift/types" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/ift/types" solanapb "github.com/cosmos/solidity-ibc-eureka/packages/go-proto/solana" "github.com/ethereum/go-ethereum/crypto" "github.com/gagliardetto/solana-go" diff --git a/prototypes/x/ift/types/msgs.go b/modules/apps/prototypes/ift/types/msgs.go similarity index 100% rename from prototypes/x/ift/types/msgs.go rename to modules/apps/prototypes/ift/types/msgs.go diff --git a/prototypes/x/ift/types/query.pb.go b/modules/apps/prototypes/ift/types/query.pb.go similarity index 97% rename from prototypes/x/ift/types/query.pb.go rename to modules/apps/prototypes/ift/types/query.pb.go index e9ec55b798e..7e234da301d 100644 --- a/prototypes/x/ift/types/query.pb.go +++ b/modules/apps/prototypes/ift/types/query.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: sandbox/ift/query.proto +// source: ibc/applications/ift/v1/query.proto package types @@ -531,20 +531,20 @@ func (m *DenomBridge) GetBridge() IFTBridge { } func init() { - proto.RegisterType((*QueryIFTBridgeRequest)(nil), "sandbox.ift.QueryIFTBridgeRequest") - proto.RegisterType((*QueryIFTBridgeResponse)(nil), "sandbox.ift.QueryIFTBridgeResponse") - proto.RegisterType((*QueryIFTBridgesRequest)(nil), "sandbox.ift.QueryIFTBridgesRequest") - proto.RegisterType((*QueryIFTBridgesResponse)(nil), "sandbox.ift.QueryIFTBridgesResponse") - proto.RegisterType((*QueryIFTBridgesByDenomRequest)(nil), "sandbox.ift.QueryIFTBridgesByDenomRequest") - proto.RegisterType((*QueryIFTBridgesByDenomResponse)(nil), "sandbox.ift.QueryIFTBridgesByDenomResponse") - proto.RegisterType((*QueryPendingTransferRequest)(nil), "sandbox.ift.QueryPendingTransferRequest") - proto.RegisterType((*QueryPendingTransferResponse)(nil), "sandbox.ift.QueryPendingTransferResponse") - proto.RegisterType((*QueryParamsRequest)(nil), "sandbox.ift.QueryParamsRequest") - proto.RegisterType((*QueryParamsResponse)(nil), "sandbox.ift.QueryParamsResponse") - proto.RegisterType((*DenomBridge)(nil), "sandbox.ift.DenomBridge") + proto.RegisterType((*QueryIFTBridgeRequest)(nil), "ibc.applications.prototypes.ift.v1.QueryIFTBridgeRequest") + proto.RegisterType((*QueryIFTBridgeResponse)(nil), "ibc.applications.prototypes.ift.v1.QueryIFTBridgeResponse") + proto.RegisterType((*QueryIFTBridgesRequest)(nil), "ibc.applications.prototypes.ift.v1.QueryIFTBridgesRequest") + proto.RegisterType((*QueryIFTBridgesResponse)(nil), "ibc.applications.prototypes.ift.v1.QueryIFTBridgesResponse") + proto.RegisterType((*QueryIFTBridgesByDenomRequest)(nil), "ibc.applications.prototypes.ift.v1.QueryIFTBridgesByDenomRequest") + proto.RegisterType((*QueryIFTBridgesByDenomResponse)(nil), "ibc.applications.prototypes.ift.v1.QueryIFTBridgesByDenomResponse") + proto.RegisterType((*QueryPendingTransferRequest)(nil), "ibc.applications.prototypes.ift.v1.QueryPendingTransferRequest") + proto.RegisterType((*QueryPendingTransferResponse)(nil), "ibc.applications.prototypes.ift.v1.QueryPendingTransferResponse") + proto.RegisterType((*QueryParamsRequest)(nil), "ibc.applications.prototypes.ift.v1.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "ibc.applications.prototypes.ift.v1.QueryParamsResponse") + proto.RegisterType((*DenomBridge)(nil), "ibc.applications.prototypes.ift.v1.DenomBridge") } -func init() { proto.RegisterFile("sandbox/ift/query.proto", fileDescriptor_dff00e7f31cbb5cc) } +func init() { proto.RegisterFile("ibc/applications/prototypes/ift/v1/query.proto", fileDescriptor_dff00e7f31cbb5cc) } var fileDescriptor_dff00e7f31cbb5cc = []byte{ // 632 bytes of a gzipped FileDescriptorProto @@ -799,7 +799,7 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf var Query_serviceDesc = _Query_serviceDesc var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "sandbox.ift.Query", + ServiceName: "ibc.applications.prototypes.ift.v1.Query", HandlerType: (*QueryServer)(nil), Methods: []grpc.MethodDesc{ { @@ -824,7 +824,7 @@ var _Query_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "sandbox/ift/query.proto", + Metadata: "ibc/applications/prototypes/ift/v1/query.proto", } func (m *QueryIFTBridgeRequest) Marshal() (dAtA []byte, err error) { diff --git a/prototypes/x/ift/types/query.pb.gw.go b/modules/apps/prototypes/ift/types/query.pb.gw.go similarity index 99% rename from prototypes/x/ift/types/query.pb.gw.go rename to modules/apps/prototypes/ift/types/query.pb.gw.go index 0ac9c4aa32f..3b36cd1d6a4 100644 --- a/prototypes/x/ift/types/query.pb.gw.go +++ b/modules/apps/prototypes/ift/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: sandbox/ift/query.proto +// source: ibc/applications/ift/v1/query.proto /* Package types is a reverse proxy. diff --git a/prototypes/x/ift/types/tx.pb.go b/modules/apps/prototypes/ift/types/tx.pb.go similarity index 98% rename from prototypes/x/ift/types/tx.pb.go rename to modules/apps/prototypes/ift/types/tx.pb.go index 11c91a2eb89..3f978f3c646 100644 --- a/prototypes/x/ift/types/tx.pb.go +++ b/modules/apps/prototypes/ift/types/tx.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: sandbox/ift/tx.proto +// source: ibc/applications/ift/v1/tx.proto package types @@ -579,19 +579,19 @@ func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo func init() { - proto.RegisterType((*MsgRegisterIFTBridge)(nil), "sandbox.ift.MsgRegisterIFTBridge") - proto.RegisterType((*MsgRegisterIFTBridgeResponse)(nil), "sandbox.ift.MsgRegisterIFTBridgeResponse") - proto.RegisterType((*MsgRemoveIFTBridge)(nil), "sandbox.ift.MsgRemoveIFTBridge") - proto.RegisterType((*MsgRemoveIFTBridgeResponse)(nil), "sandbox.ift.MsgRemoveIFTBridgeResponse") - proto.RegisterType((*MsgIFTTransfer)(nil), "sandbox.ift.MsgIFTTransfer") - proto.RegisterType((*MsgIFTTransferResponse)(nil), "sandbox.ift.MsgIFTTransferResponse") - proto.RegisterType((*MsgIFTMint)(nil), "sandbox.ift.MsgIFTMint") - proto.RegisterType((*MsgIFTMintResponse)(nil), "sandbox.ift.MsgIFTMintResponse") - proto.RegisterType((*MsgUpdateParams)(nil), "sandbox.ift.MsgUpdateParams") - proto.RegisterType((*MsgUpdateParamsResponse)(nil), "sandbox.ift.MsgUpdateParamsResponse") + proto.RegisterType((*MsgRegisterIFTBridge)(nil), "ibc.applications.prototypes.ift.v1.MsgRegisterIFTBridge") + proto.RegisterType((*MsgRegisterIFTBridgeResponse)(nil), "ibc.applications.prototypes.ift.v1.MsgRegisterIFTBridgeResponse") + proto.RegisterType((*MsgRemoveIFTBridge)(nil), "ibc.applications.prototypes.ift.v1.MsgRemoveIFTBridge") + proto.RegisterType((*MsgRemoveIFTBridgeResponse)(nil), "ibc.applications.prototypes.ift.v1.MsgRemoveIFTBridgeResponse") + proto.RegisterType((*MsgIFTTransfer)(nil), "ibc.applications.prototypes.ift.v1.MsgIFTTransfer") + proto.RegisterType((*MsgIFTTransferResponse)(nil), "ibc.applications.prototypes.ift.v1.MsgIFTTransferResponse") + proto.RegisterType((*MsgIFTMint)(nil), "ibc.applications.prototypes.ift.v1.MsgIFTMint") + proto.RegisterType((*MsgIFTMintResponse)(nil), "ibc.applications.prototypes.ift.v1.MsgIFTMintResponse") + proto.RegisterType((*MsgUpdateParams)(nil), "ibc.applications.prototypes.ift.v1.MsgUpdateParams") + proto.RegisterType((*MsgUpdateParamsResponse)(nil), "ibc.applications.prototypes.ift.v1.MsgUpdateParamsResponse") } -func init() { proto.RegisterFile("sandbox/ift/tx.proto", fileDescriptor_c3924d107e50751d) } +func init() { proto.RegisterFile("ibc/applications/prototypes/ift/v1/tx.proto", fileDescriptor_c3924d107e50751d) } var fileDescriptor_c3924d107e50751d = []byte{ // 723 bytes of a gzipped FileDescriptorProto @@ -850,7 +850,7 @@ func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(in var Msg_serviceDesc = _Msg_serviceDesc var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "sandbox.ift.Msg", + ServiceName: "ibc.applications.prototypes.ift.v1.Msg", HandlerType: (*MsgServer)(nil), Methods: []grpc.MethodDesc{ { @@ -875,7 +875,7 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "sandbox/ift/tx.proto", + Metadata: "ibc/applications/prototypes/ift/v1/tx.proto", } func (m *MsgRegisterIFTBridge) Marshal() (dAtA []byte, err error) { diff --git a/prototypes/x/tokenfactory/README.md b/modules/apps/prototypes/tokenfactory/README.md similarity index 100% rename from prototypes/x/tokenfactory/README.md rename to modules/apps/prototypes/tokenfactory/README.md diff --git a/prototypes/x/tokenfactory/TESTING.md b/modules/apps/prototypes/tokenfactory/TESTING.md similarity index 100% rename from prototypes/x/tokenfactory/TESTING.md rename to modules/apps/prototypes/tokenfactory/TESTING.md diff --git a/prototypes/x/tokenfactory/cli/tx.go b/modules/apps/prototypes/tokenfactory/cli/tx.go similarity index 97% rename from prototypes/x/tokenfactory/cli/tx.go rename to modules/apps/prototypes/tokenfactory/cli/tx.go index 5dd26629502..9970738875b 100644 --- a/prototypes/x/tokenfactory/cli/tx.go +++ b/modules/apps/prototypes/tokenfactory/cli/tx.go @@ -3,7 +3,7 @@ package cli import ( "fmt" - "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/tokenfactory/types" "github.com/spf13/cobra" "github.com/cosmos/cosmos-sdk/client" diff --git a/prototypes/x/tokenfactory/keeper/denom.go b/modules/apps/prototypes/tokenfactory/keeper/denom.go similarity index 98% rename from prototypes/x/tokenfactory/keeper/denom.go rename to modules/apps/prototypes/tokenfactory/keeper/denom.go index c407817895f..bde2f2d97ce 100644 --- a/prototypes/x/tokenfactory/keeper/denom.go +++ b/modules/apps/prototypes/tokenfactory/keeper/denom.go @@ -3,7 +3,7 @@ package keeper import ( "context" - "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/tokenfactory/types" "cosmossdk.io/collections" errorsmod "cosmossdk.io/errors" diff --git a/prototypes/x/tokenfactory/keeper/genesis.go b/modules/apps/prototypes/tokenfactory/keeper/genesis.go similarity index 94% rename from prototypes/x/tokenfactory/keeper/genesis.go rename to modules/apps/prototypes/tokenfactory/keeper/genesis.go index 2678a73a85e..27267ef141e 100644 --- a/prototypes/x/tokenfactory/keeper/genesis.go +++ b/modules/apps/prototypes/tokenfactory/keeper/genesis.go @@ -3,7 +3,7 @@ package keeper import ( "context" - "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/tokenfactory/types" ) // InitGenesis initializes the tokenfactory module's state from a provided genesis state. diff --git a/prototypes/x/tokenfactory/keeper/keeper.go b/modules/apps/prototypes/tokenfactory/keeper/keeper.go similarity index 96% rename from prototypes/x/tokenfactory/keeper/keeper.go rename to modules/apps/prototypes/tokenfactory/keeper/keeper.go index 8bfe0f0fe1c..f0fea21c180 100644 --- a/prototypes/x/tokenfactory/keeper/keeper.go +++ b/modules/apps/prototypes/tokenfactory/keeper/keeper.go @@ -4,7 +4,7 @@ import ( "context" "fmt" - "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/tokenfactory/types" "cosmossdk.io/collections" "cosmossdk.io/core/store" diff --git a/prototypes/x/tokenfactory/keeper/mint_burn.go b/modules/apps/prototypes/tokenfactory/keeper/mint_burn.go similarity index 98% rename from prototypes/x/tokenfactory/keeper/mint_burn.go rename to modules/apps/prototypes/tokenfactory/keeper/mint_burn.go index 05d9d942ab2..ebebd2477cd 100644 --- a/prototypes/x/tokenfactory/keeper/mint_burn.go +++ b/modules/apps/prototypes/tokenfactory/keeper/mint_burn.go @@ -3,7 +3,7 @@ package keeper import ( "context" - "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/tokenfactory/types" errorsmod "cosmossdk.io/errors" "cosmossdk.io/math" diff --git a/prototypes/x/tokenfactory/keeper/msg_server.go b/modules/apps/prototypes/tokenfactory/keeper/msg_server.go similarity index 98% rename from prototypes/x/tokenfactory/keeper/msg_server.go rename to modules/apps/prototypes/tokenfactory/keeper/msg_server.go index 12ce77003ad..1b2ac09273a 100644 --- a/prototypes/x/tokenfactory/keeper/msg_server.go +++ b/modules/apps/prototypes/tokenfactory/keeper/msg_server.go @@ -3,7 +3,7 @@ package keeper import ( "context" - "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/tokenfactory/types" errorsmod "cosmossdk.io/errors" diff --git a/prototypes/x/tokenfactory/keeper/params.go b/modules/apps/prototypes/tokenfactory/keeper/params.go similarity index 85% rename from prototypes/x/tokenfactory/keeper/params.go rename to modules/apps/prototypes/tokenfactory/keeper/params.go index a6992b00ee0..8027a4be196 100644 --- a/prototypes/x/tokenfactory/keeper/params.go +++ b/modules/apps/prototypes/tokenfactory/keeper/params.go @@ -3,7 +3,7 @@ package keeper import ( "context" - "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/tokenfactory/types" ) // GetParams gets the tokenfactory module's parameters. diff --git a/prototypes/x/tokenfactory/keeper/query.go b/modules/apps/prototypes/tokenfactory/keeper/query.go similarity index 93% rename from prototypes/x/tokenfactory/keeper/query.go rename to modules/apps/prototypes/tokenfactory/keeper/query.go index c87e6e6cfa1..39c12729653 100644 --- a/prototypes/x/tokenfactory/keeper/query.go +++ b/modules/apps/prototypes/tokenfactory/keeper/query.go @@ -3,7 +3,7 @@ package keeper import ( "context" - "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/tokenfactory/types" ) var _ types.QueryServer = Keeper{} diff --git a/prototypes/x/tokenfactory/module.go b/modules/apps/prototypes/tokenfactory/module.go similarity index 95% rename from prototypes/x/tokenfactory/module.go rename to modules/apps/prototypes/tokenfactory/module.go index e02348f35b2..3f65a8df62e 100644 --- a/prototypes/x/tokenfactory/module.go +++ b/modules/apps/prototypes/tokenfactory/module.go @@ -5,9 +5,9 @@ import ( "encoding/json" "fmt" - "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/cli" - "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/keeper" - "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/tokenfactory/cli" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/tokenfactory/keeper" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/tokenfactory/types" "github.com/grpc-ecosystem/grpc-gateway/runtime" "github.com/spf13/cobra" diff --git a/prototypes/x/tokenfactory/types/autocli.go b/modules/apps/prototypes/tokenfactory/types/autocli.go similarity index 100% rename from prototypes/x/tokenfactory/types/autocli.go rename to modules/apps/prototypes/tokenfactory/types/autocli.go diff --git a/prototypes/x/tokenfactory/types/codec.go b/modules/apps/prototypes/tokenfactory/types/codec.go similarity index 100% rename from prototypes/x/tokenfactory/types/codec.go rename to modules/apps/prototypes/tokenfactory/types/codec.go diff --git a/prototypes/x/tokenfactory/types/denom.go b/modules/apps/prototypes/tokenfactory/types/denom.go similarity index 100% rename from prototypes/x/tokenfactory/types/denom.go rename to modules/apps/prototypes/tokenfactory/types/denom.go diff --git a/prototypes/x/tokenfactory/types/denom_test.go b/modules/apps/prototypes/tokenfactory/types/denom_test.go similarity index 94% rename from prototypes/x/tokenfactory/types/denom_test.go rename to modules/apps/prototypes/tokenfactory/types/denom_test.go index 45038eb29d4..caffbf7c720 100644 --- a/prototypes/x/tokenfactory/types/denom_test.go +++ b/modules/apps/prototypes/tokenfactory/types/denom_test.go @@ -3,7 +3,7 @@ package types_test import ( "testing" - "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types" + "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/tokenfactory/types" "github.com/stretchr/testify/require" ) diff --git a/prototypes/x/tokenfactory/types/errors.go b/modules/apps/prototypes/tokenfactory/types/errors.go similarity index 100% rename from prototypes/x/tokenfactory/types/errors.go rename to modules/apps/prototypes/tokenfactory/types/errors.go diff --git a/prototypes/x/tokenfactory/types/events.go b/modules/apps/prototypes/tokenfactory/types/events.go similarity index 100% rename from prototypes/x/tokenfactory/types/events.go rename to modules/apps/prototypes/tokenfactory/types/events.go diff --git a/prototypes/x/tokenfactory/types/expected_keepers.go b/modules/apps/prototypes/tokenfactory/types/expected_keepers.go similarity index 100% rename from prototypes/x/tokenfactory/types/expected_keepers.go rename to modules/apps/prototypes/tokenfactory/types/expected_keepers.go diff --git a/prototypes/x/tokenfactory/types/genesis.go b/modules/apps/prototypes/tokenfactory/types/genesis.go similarity index 100% rename from prototypes/x/tokenfactory/types/genesis.go rename to modules/apps/prototypes/tokenfactory/types/genesis.go diff --git a/prototypes/x/tokenfactory/types/genesis.pb.go b/modules/apps/prototypes/tokenfactory/types/genesis.pb.go similarity index 97% rename from prototypes/x/tokenfactory/types/genesis.pb.go rename to modules/apps/prototypes/tokenfactory/types/genesis.pb.go index 83fb03f7344..7071f4d54ba 100644 --- a/prototypes/x/tokenfactory/types/genesis.pb.go +++ b/modules/apps/prototypes/tokenfactory/types/genesis.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: sandbox/tokenfactory/genesis.proto +// source: ibc/applications/tokenfactory/v1/genesis.proto package types @@ -130,12 +130,12 @@ func (m *GenesisDenom) GetAuthorityMetadata() DenomAuthorityMetadata { } func init() { - proto.RegisterType((*GenesisState)(nil), "sandbox.tokenfactory.GenesisState") - proto.RegisterType((*GenesisDenom)(nil), "sandbox.tokenfactory.GenesisDenom") + proto.RegisterType((*GenesisState)(nil), "ibc.applications.prototypes.tokenfactory.v1.GenesisState") + proto.RegisterType((*GenesisDenom)(nil), "ibc.applications.prototypes.tokenfactory.v1.GenesisDenom") } func init() { - proto.RegisterFile("sandbox/tokenfactory/genesis.proto", fileDescriptor_3dab0b9f9ff24ee2) + proto.RegisterFile("ibc/applications/prototypes/tokenfactory/v1/genesis.proto", fileDescriptor_3dab0b9f9ff24ee2) } var fileDescriptor_3dab0b9f9ff24ee2 = []byte{ diff --git a/prototypes/x/tokenfactory/types/keys.go b/modules/apps/prototypes/tokenfactory/types/keys.go similarity index 100% rename from prototypes/x/tokenfactory/types/keys.go rename to modules/apps/prototypes/tokenfactory/types/keys.go diff --git a/prototypes/x/tokenfactory/types/msgs.go b/modules/apps/prototypes/tokenfactory/types/msgs.go similarity index 100% rename from prototypes/x/tokenfactory/types/msgs.go rename to modules/apps/prototypes/tokenfactory/types/msgs.go diff --git a/prototypes/x/tokenfactory/types/query.pb.go b/modules/apps/prototypes/tokenfactory/types/query.pb.go similarity index 97% rename from prototypes/x/tokenfactory/types/query.pb.go rename to modules/apps/prototypes/tokenfactory/types/query.pb.go index ef6989a419e..4282d80503c 100644 --- a/prototypes/x/tokenfactory/types/query.pb.go +++ b/modules/apps/prototypes/tokenfactory/types/query.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: sandbox/tokenfactory/query.proto +// source: ibc/applications/tokenfactory/v1/query.proto package types @@ -296,15 +296,15 @@ func (m *QueryParamsResponse) GetParams() Params { } func init() { - proto.RegisterType((*QueryDenomAuthorityMetadataRequest)(nil), "sandbox.tokenfactory.QueryDenomAuthorityMetadataRequest") - proto.RegisterType((*QueryDenomAuthorityMetadataResponse)(nil), "sandbox.tokenfactory.QueryDenomAuthorityMetadataResponse") - proto.RegisterType((*QueryDenomsByCreatorRequest)(nil), "sandbox.tokenfactory.QueryDenomsByCreatorRequest") - proto.RegisterType((*QueryDenomsByCreatorResponse)(nil), "sandbox.tokenfactory.QueryDenomsByCreatorResponse") - proto.RegisterType((*QueryParamsRequest)(nil), "sandbox.tokenfactory.QueryParamsRequest") - proto.RegisterType((*QueryParamsResponse)(nil), "sandbox.tokenfactory.QueryParamsResponse") + proto.RegisterType((*QueryDenomAuthorityMetadataRequest)(nil), "ibc.applications.prototypes.tokenfactory.v1.QueryDenomAuthorityMetadataRequest") + proto.RegisterType((*QueryDenomAuthorityMetadataResponse)(nil), "ibc.applications.prototypes.tokenfactory.v1.QueryDenomAuthorityMetadataResponse") + proto.RegisterType((*QueryDenomsByCreatorRequest)(nil), "ibc.applications.prototypes.tokenfactory.v1.QueryDenomsByCreatorRequest") + proto.RegisterType((*QueryDenomsByCreatorResponse)(nil), "ibc.applications.prototypes.tokenfactory.v1.QueryDenomsByCreatorResponse") + proto.RegisterType((*QueryParamsRequest)(nil), "ibc.applications.prototypes.tokenfactory.v1.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "ibc.applications.prototypes.tokenfactory.v1.QueryParamsResponse") } -func init() { proto.RegisterFile("sandbox/tokenfactory/query.proto", fileDescriptor_488808f536ccac77) } +func init() { proto.RegisterFile("ibc/applications/prototypes/tokenfactory/v1/query.proto", fileDescriptor_488808f536ccac77) } var fileDescriptor_488808f536ccac77 = []byte{ // 485 bytes of a gzipped FileDescriptorProto @@ -480,7 +480,7 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf var Query_serviceDesc = _Query_serviceDesc var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "sandbox.tokenfactory.Query", + ServiceName: "ibc.applications.prototypes.tokenfactory.v1.Query", HandlerType: (*QueryServer)(nil), Methods: []grpc.MethodDesc{ { @@ -497,7 +497,7 @@ var _Query_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "sandbox/tokenfactory/query.proto", + Metadata: "ibc/applications/prototypes/tokenfactory/v1/query.proto", } func (m *QueryDenomAuthorityMetadataRequest) Marshal() (dAtA []byte, err error) { diff --git a/prototypes/x/tokenfactory/types/query.pb.gw.go b/modules/apps/prototypes/tokenfactory/types/query.pb.gw.go similarity index 99% rename from prototypes/x/tokenfactory/types/query.pb.gw.go rename to modules/apps/prototypes/tokenfactory/types/query.pb.gw.go index 53545d3ade8..86449576e91 100644 --- a/prototypes/x/tokenfactory/types/query.pb.gw.go +++ b/modules/apps/prototypes/tokenfactory/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: sandbox/tokenfactory/query.proto +// source: ibc/applications/tokenfactory/v1/query.proto /* Package types is a reverse proxy. diff --git a/prototypes/x/tokenfactory/types/tokenfactory.pb.go b/modules/apps/prototypes/tokenfactory/types/tokenfactory.pb.go similarity index 96% rename from prototypes/x/tokenfactory/types/tokenfactory.pb.go rename to modules/apps/prototypes/tokenfactory/types/tokenfactory.pb.go index 242302b84ec..fdbccea4ffa 100644 --- a/prototypes/x/tokenfactory/types/tokenfactory.pb.go +++ b/modules/apps/prototypes/tokenfactory/types/tokenfactory.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: sandbox/tokenfactory/tokenfactory.proto +// source: ibc/applications/tokenfactory/v1/tokenfactory.proto package types @@ -106,12 +106,12 @@ func (m *DenomAuthorityMetadata) GetAdmin() string { } func init() { - proto.RegisterType((*Params)(nil), "sandbox.tokenfactory.Params") - proto.RegisterType((*DenomAuthorityMetadata)(nil), "sandbox.tokenfactory.DenomAuthorityMetadata") + proto.RegisterType((*Params)(nil), "ibc.applications.prototypes.tokenfactory.v1.Params") + proto.RegisterType((*DenomAuthorityMetadata)(nil), "ibc.applications.prototypes.tokenfactory.v1.DenomAuthorityMetadata") } func init() { - proto.RegisterFile("sandbox/tokenfactory/tokenfactory.proto", fileDescriptor_17f074b5b5a22274) + proto.RegisterFile("ibc/applications/prototypes/tokenfactory/v1/tokenfactory.proto", fileDescriptor_17f074b5b5a22274) } var fileDescriptor_17f074b5b5a22274 = []byte{ diff --git a/prototypes/x/tokenfactory/types/tx.pb.go b/modules/apps/prototypes/tokenfactory/types/tx.pb.go similarity index 97% rename from prototypes/x/tokenfactory/types/tx.pb.go rename to modules/apps/prototypes/tokenfactory/types/tx.pb.go index 7887e972438..67ee914ed0d 100644 --- a/prototypes/x/tokenfactory/types/tx.pb.go +++ b/modules/apps/prototypes/tokenfactory/types/tx.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: sandbox/tokenfactory/tx.proto +// source: ibc/applications/tokenfactory/v1/tx.proto package types @@ -465,19 +465,19 @@ func (m *MsgRenounceAdminResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgRenounceAdminResponse proto.InternalMessageInfo func init() { - proto.RegisterType((*MsgCreateDenom)(nil), "sandbox.tokenfactory.MsgCreateDenom") - proto.RegisterType((*MsgCreateDenomResponse)(nil), "sandbox.tokenfactory.MsgCreateDenomResponse") - proto.RegisterType((*MsgMint)(nil), "sandbox.tokenfactory.MsgMint") - proto.RegisterType((*MsgMintResponse)(nil), "sandbox.tokenfactory.MsgMintResponse") - proto.RegisterType((*MsgBurn)(nil), "sandbox.tokenfactory.MsgBurn") - proto.RegisterType((*MsgBurnResponse)(nil), "sandbox.tokenfactory.MsgBurnResponse") - proto.RegisterType((*MsgChangeAdmin)(nil), "sandbox.tokenfactory.MsgChangeAdmin") - proto.RegisterType((*MsgChangeAdminResponse)(nil), "sandbox.tokenfactory.MsgChangeAdminResponse") - proto.RegisterType((*MsgRenounceAdmin)(nil), "sandbox.tokenfactory.MsgRenounceAdmin") - proto.RegisterType((*MsgRenounceAdminResponse)(nil), "sandbox.tokenfactory.MsgRenounceAdminResponse") + proto.RegisterType((*MsgCreateDenom)(nil), "ibc.applications.prototypes.tokenfactory.v1.MsgCreateDenom") + proto.RegisterType((*MsgCreateDenomResponse)(nil), "ibc.applications.prototypes.tokenfactory.v1.MsgCreateDenomResponse") + proto.RegisterType((*MsgMint)(nil), "ibc.applications.prototypes.tokenfactory.v1.MsgMint") + proto.RegisterType((*MsgMintResponse)(nil), "ibc.applications.prototypes.tokenfactory.v1.MsgMintResponse") + proto.RegisterType((*MsgBurn)(nil), "ibc.applications.prototypes.tokenfactory.v1.MsgBurn") + proto.RegisterType((*MsgBurnResponse)(nil), "ibc.applications.prototypes.tokenfactory.v1.MsgBurnResponse") + proto.RegisterType((*MsgChangeAdmin)(nil), "ibc.applications.prototypes.tokenfactory.v1.MsgChangeAdmin") + proto.RegisterType((*MsgChangeAdminResponse)(nil), "ibc.applications.prototypes.tokenfactory.v1.MsgChangeAdminResponse") + proto.RegisterType((*MsgRenounceAdmin)(nil), "ibc.applications.prototypes.tokenfactory.v1.MsgRenounceAdmin") + proto.RegisterType((*MsgRenounceAdminResponse)(nil), "ibc.applications.prototypes.tokenfactory.v1.MsgRenounceAdminResponse") } -func init() { proto.RegisterFile("sandbox/tokenfactory/tx.proto", fileDescriptor_5a175bee69e54b5d) } +func init() { proto.RegisterFile("ibc/applications/prototypes/tokenfactory/v1/tx.proto", fileDescriptor_5a175bee69e54b5d) } var fileDescriptor_5a175bee69e54b5d = []byte{ // 612 bytes of a gzipped FileDescriptorProto @@ -729,7 +729,7 @@ func _Msg_RenounceAdmin_Handler(srv interface{}, ctx context.Context, dec func(i var Msg_serviceDesc = _Msg_serviceDesc var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "sandbox.tokenfactory.Msg", + ServiceName: "ibc.applications.prototypes.tokenfactory.v1.Msg", HandlerType: (*MsgServer)(nil), Methods: []grpc.MethodDesc{ { @@ -754,7 +754,7 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "sandbox/tokenfactory/tx.proto", + Metadata: "ibc/applications/prototypes/tokenfactory/v1/tx.proto", } func (m *MsgCreateDenom) Marshal() (dAtA []byte, err error) { diff --git a/prototypes/proto/sandbox/ift/genesis.proto b/proto/ibc/applications/prototypes/ift/v1/genesis.proto similarity index 76% rename from prototypes/proto/sandbox/ift/genesis.proto rename to proto/ibc/applications/prototypes/ift/v1/genesis.proto index f1dc246640e..af353cc98f2 100644 --- a/prototypes/proto/sandbox/ift/genesis.proto +++ b/proto/ibc/applications/prototypes/ift/v1/genesis.proto @@ -1,10 +1,10 @@ syntax = "proto3"; -package sandbox.ift; +package ibc.applications.prototypes.ift.v1; import "gogoproto/gogo.proto"; -import "sandbox/ift/ift.proto"; +import "ibc/applications/prototypes/ift/v1/ift.proto"; -option go_package = "github.com/cosmos/ibc-go/prototypes/x/ift/types"; +option go_package = "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/ift/types"; // GenesisState defines the IFT module's genesis state. message GenesisState { diff --git a/prototypes/proto/sandbox/ift/ift.proto b/proto/ibc/applications/prototypes/ift/v1/ift.proto similarity index 92% rename from prototypes/proto/sandbox/ift/ift.proto rename to proto/ibc/applications/prototypes/ift/v1/ift.proto index ecdf36f650d..8c1a49a7c68 100644 --- a/prototypes/proto/sandbox/ift/ift.proto +++ b/proto/ibc/applications/prototypes/ift/v1/ift.proto @@ -1,10 +1,10 @@ syntax = "proto3"; -package sandbox.ift; +package ibc.applications.prototypes.ift.v1; import "gogoproto/gogo.proto"; import "cosmos_proto/cosmos.proto"; -option go_package = "github.com/cosmos/ibc-go/prototypes/x/ift/types"; +option go_package = "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/ift/types"; // IFTBridge represents a counterparty IFT contract on a different chain // connected via an IBC Light Client diff --git a/prototypes/proto/sandbox/ift/query.proto b/proto/ibc/applications/prototypes/ift/v1/query.proto similarity index 75% rename from prototypes/proto/sandbox/ift/query.proto rename to proto/ibc/applications/prototypes/ift/v1/query.proto index 30b0185c87b..e97153d8a14 100644 --- a/prototypes/proto/sandbox/ift/query.proto +++ b/proto/ibc/applications/prototypes/ift/v1/query.proto @@ -1,41 +1,41 @@ syntax = "proto3"; -package sandbox.ift; +package ibc.applications.prototypes.ift.v1; import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; -import "sandbox/ift/ift.proto"; +import "ibc/applications/prototypes/ift/v1/ift.proto"; -option go_package = "github.com/cosmos/ibc-go/prototypes/x/ift/types"; +option go_package = "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/ift/types"; // Query defines the gRPC querier service. service Query { // IFTBridge queries the IFT bridge information for a specific denom and // client_id rpc IFTBridge(QueryIFTBridgeRequest) returns (QueryIFTBridgeResponse) { - option (google.api.http).get = "/sandbox/ift/bridge/{denom}/{client_id}"; + option (google.api.http).get = "/ibc/applications/prototypes/ift/v1/bridge/{denom}/{client_id}"; } // IFTBridges queries all IFT bridges rpc IFTBridges(QueryIFTBridgesRequest) returns (QueryIFTBridgesResponse) { - option (google.api.http).get = "/sandbox/ift/bridges"; + option (google.api.http).get = "/ibc/applications/prototypes/ift/v1/bridges"; } // IFTBridgesByDenom queries all IFT bridges for a specific denom rpc IFTBridgesByDenom(QueryIFTBridgesByDenomRequest) returns (QueryIFTBridgesByDenomResponse) { - option (google.api.http).get = "/sandbox/ift/bridges/{denom}"; + option (google.api.http).get = "/ibc/applications/prototypes/ift/v1/bridges/{denom}"; } // PendingTransfer queries a pending transfer rpc PendingTransfer(QueryPendingTransferRequest) returns (QueryPendingTransferResponse) { option (google.api.http).get = - "/sandbox/ift/pending/{denom}/{client_id}/{sequence}"; + "/ibc/applications/prototypes/ift/v1/pending/{denom}/{client_id}/{sequence}"; } // Params queries the module parameters rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { - option (google.api.http).get = "/sandbox/ift/params"; + option (google.api.http).get = "/ibc/applications/prototypes/ift/v1/params"; } } diff --git a/prototypes/proto/sandbox/ift/tx.proto b/proto/ibc/applications/prototypes/ift/v1/tx.proto similarity index 95% rename from prototypes/proto/sandbox/ift/tx.proto rename to proto/ibc/applications/prototypes/ift/v1/tx.proto index 9c6b344e10b..3dade0cf2ba 100644 --- a/prototypes/proto/sandbox/ift/tx.proto +++ b/proto/ibc/applications/prototypes/ift/v1/tx.proto @@ -1,12 +1,12 @@ syntax = "proto3"; -package sandbox.ift; +package ibc.applications.prototypes.ift.v1; import "cosmos/msg/v1/msg.proto"; import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; -import "sandbox/ift/ift.proto"; +import "ibc/applications/prototypes/ift/v1/ift.proto"; -option go_package = "github.com/cosmos/ibc-go/prototypes/x/ift/types"; +option go_package = "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/ift/types"; // Msg defines the IFT module Msg service. service Msg { diff --git a/prototypes/proto/sandbox/tokenfactory/genesis.proto b/proto/ibc/applications/prototypes/tokenfactory/v1/genesis.proto similarity index 68% rename from prototypes/proto/sandbox/tokenfactory/genesis.proto rename to proto/ibc/applications/prototypes/tokenfactory/v1/genesis.proto index 5f3960308ff..bb0f3ee6660 100644 --- a/prototypes/proto/sandbox/tokenfactory/genesis.proto +++ b/proto/ibc/applications/prototypes/tokenfactory/v1/genesis.proto @@ -1,10 +1,10 @@ syntax = "proto3"; -package sandbox.tokenfactory; +package ibc.applications.prototypes.tokenfactory.v1; import "gogoproto/gogo.proto"; -import "sandbox/tokenfactory/tokenfactory.proto"; +import "ibc/applications/prototypes/tokenfactory/v1/tokenfactory.proto"; -option go_package = "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types"; +option go_package = "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/tokenfactory/types"; // GenesisState defines the tokenfactory module's genesis state. message GenesisState { diff --git a/prototypes/proto/sandbox/tokenfactory/query.proto b/proto/ibc/applications/prototypes/tokenfactory/v1/query.proto similarity index 78% rename from prototypes/proto/sandbox/tokenfactory/query.proto rename to proto/ibc/applications/prototypes/tokenfactory/v1/query.proto index 60e7a625803..242f4b1ae06 100644 --- a/prototypes/proto/sandbox/tokenfactory/query.proto +++ b/proto/ibc/applications/prototypes/tokenfactory/v1/query.proto @@ -1,11 +1,11 @@ syntax = "proto3"; -package sandbox.tokenfactory; +package ibc.applications.prototypes.tokenfactory.v1; import "gogoproto/gogo.proto"; import "google/api/annotations.proto"; -import "sandbox/tokenfactory/tokenfactory.proto"; +import "ibc/applications/prototypes/tokenfactory/v1/tokenfactory.proto"; -option go_package = "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types"; +option go_package = "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/tokenfactory/types"; // Query defines the gRPC querier service. service Query { @@ -13,19 +13,19 @@ service Query { rpc DenomAuthorityMetadata(QueryDenomAuthorityMetadataRequest) returns (QueryDenomAuthorityMetadataResponse) { option (google.api.http).get = - "/sandbox/tokenfactory/denoms/{denom}/authority_metadata"; + "/ibc/applications/prototypes/tokenfactory/v1/denoms/{denom}/authority_metadata"; } // DenomsByCreator queries all denoms created by a specific address. rpc DenomsByCreator(QueryDenomsByCreatorRequest) returns (QueryDenomsByCreatorResponse) { option (google.api.http).get = - "/sandbox/tokenfactory/creators/{creator}/denoms"; + "/ibc/applications/prototypes/tokenfactory/v1/creators/{creator}/denoms"; } // Params queries the parameters of the tokenfactory module. rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { - option (google.api.http).get = "/sandbox/tokenfactory/params"; + option (google.api.http).get = "/ibc/applications/prototypes/tokenfactory/v1/params"; } } diff --git a/prototypes/proto/sandbox/tokenfactory/tokenfactory.proto b/proto/ibc/applications/prototypes/tokenfactory/v1/tokenfactory.proto similarity index 66% rename from prototypes/proto/sandbox/tokenfactory/tokenfactory.proto rename to proto/ibc/applications/prototypes/tokenfactory/v1/tokenfactory.proto index 88698193d41..b86f990dede 100644 --- a/prototypes/proto/sandbox/tokenfactory/tokenfactory.proto +++ b/proto/ibc/applications/prototypes/tokenfactory/v1/tokenfactory.proto @@ -1,9 +1,9 @@ syntax = "proto3"; -package sandbox.tokenfactory; +package ibc.applications.prototypes.tokenfactory.v1; import "amino/amino.proto"; -option go_package = "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types"; +option go_package = "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/tokenfactory/types"; // Params defines the parameters for the tokenfactory module. message Params {} diff --git a/prototypes/proto/sandbox/tokenfactory/tx.proto b/proto/ibc/applications/prototypes/tokenfactory/v1/tx.proto similarity index 83% rename from prototypes/proto/sandbox/tokenfactory/tx.proto rename to proto/ibc/applications/prototypes/tokenfactory/v1/tx.proto index 1f8dbb0d475..7ecf6c25e78 100644 --- a/prototypes/proto/sandbox/tokenfactory/tx.proto +++ b/proto/ibc/applications/prototypes/tokenfactory/v1/tx.proto @@ -1,5 +1,5 @@ syntax = "proto3"; -package sandbox.tokenfactory; +package ibc.applications.prototypes.tokenfactory.v1; import "amino/amino.proto"; import "cosmos/base/v1beta1/coin.proto"; @@ -7,7 +7,7 @@ import "cosmos/msg/v1/msg.proto"; import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; -option go_package = "github.com/cosmos/ibc-go/prototypes/x/tokenfactory/types"; +option go_package = "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/tokenfactory/types"; // Msg defines the tokenfactory module's gRPC message service. service Msg { @@ -32,7 +32,7 @@ service Msg { // MsgCreateDenom is the message for creating a new denom. message MsgCreateDenom { option (cosmos.msg.v1.signer) = "sender"; - option (amino.name) = "sandbox/tokenfactory/MsgCreateDenom"; + option (amino.name) = "ibc/applications/prototypes/tokenfactory/v1/MsgCreateDenom"; string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; string denom = 2; @@ -44,7 +44,7 @@ message MsgCreateDenomResponse {} // MsgMint is the message for minting new tokens. message MsgMint { option (cosmos.msg.v1.signer) = "from"; - option (amino.name) = "sandbox/tokenfactory/MsgMint"; + option (amino.name) = "ibc/applications/prototypes/tokenfactory/v1/MsgMint"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; @@ -60,7 +60,7 @@ message MsgMintResponse {} // MsgBurn is the message for burning tokens. message MsgBurn { option (cosmos.msg.v1.signer) = "from"; - option (amino.name) = "sandbox/tokenfactory/MsgBurn"; + option (amino.name) = "ibc/applications/prototypes/tokenfactory/v1/MsgBurn"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; @@ -75,7 +75,7 @@ message MsgBurnResponse {} // MsgChangeAdmin transfers admin authority to a new address. message MsgChangeAdmin { option (cosmos.msg.v1.signer) = "sender"; - option (amino.name) = "sandbox/tokenfactory/MsgChangeAdmin"; + option (amino.name) = "ibc/applications/prototypes/tokenfactory/v1/MsgChangeAdmin"; string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; string denom = 2; @@ -89,7 +89,7 @@ message MsgChangeAdminResponse {} // After renouncing, no one can mint/burn via MsgMint/MsgBurn. message MsgRenounceAdmin { option (cosmos.msg.v1.signer) = "sender"; - option (amino.name) = "sandbox/tokenfactory/MsgRenounceAdmin"; + option (amino.name) = "ibc/applications/prototypes/tokenfactory/v1/MsgRenounceAdmin"; string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; string denom = 2; diff --git a/prototypes/go.mod b/prototypes/go.mod deleted file mode 100644 index 9cf3859c9e4..00000000000 --- a/prototypes/go.mod +++ /dev/null @@ -1,291 +0,0 @@ -module github.com/cosmos/ibc-go/prototypes - -go 1.25.9 - -require ( - cosmossdk.io/api v1.0.0 - cosmossdk.io/collections v1.4.0 - cosmossdk.io/core v1.1.0 - cosmossdk.io/errors v1.1.0 - cosmossdk.io/log/v2 v2.1.0 - cosmossdk.io/math v1.5.3 - github.com/cosmos/cosmos-proto v1.0.0-beta.5 - github.com/cosmos/cosmos-sdk v0.54.2 - github.com/cosmos/gogoproto v1.7.2 - github.com/cosmos/ibc-go/v11 v11.0.0 - github.com/cosmos/solidity-ibc-eureka/packages/go-proto v0.0.0-20260502103309-00b9d8658884 - github.com/ethereum/go-ethereum v1.17.2 - github.com/gagliardetto/binary v0.8.0 - github.com/gagliardetto/solana-go v1.19.0 - github.com/golang/protobuf v1.5.4 - github.com/grpc-ecosystem/grpc-gateway v1.16.0 - github.com/stretchr/testify v1.11.1 - google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4 - google.golang.org/grpc v1.81.0 -) - -require ( - cosmossdk.io/depinject v1.2.1 // indirect - cosmossdk.io/schema v1.1.0 // indirect - filippo.io/edwards25519 v1.2.0 // indirect - github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect - github.com/99designs/keyring v1.2.2 // indirect - github.com/DataDog/datadog-go v4.8.3+incompatible // indirect - github.com/DataDog/zstd v1.5.7 // indirect - github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20260116142910-60249400e523 // indirect - github.com/RoaringBitmap/roaring/v2 v2.15.0 // indirect - github.com/benbjohnson/clock v1.3.5 // indirect - github.com/beorn7/perks v1.0.1 // indirect - github.com/bgentry/speakeasy v0.2.0 // indirect - github.com/bits-and-blooms/bitset v1.24.4 // indirect - github.com/blendle/zapdriver v1.3.1 // indirect - github.com/bytedance/gopkg v0.1.4 // indirect - github.com/bytedance/sonic v1.15.0 // indirect - github.com/bytedance/sonic/loader v0.5.1 // indirect - github.com/cenkalti/backoff/v4 v4.3.0 // indirect - github.com/cenkalti/backoff/v5 v5.0.3 // indirect - github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/cloudwego/base64x v0.1.6 // indirect - github.com/cockroachdb/errors v1.12.0 // indirect - github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0 // indirect - github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 // indirect - github.com/cockroachdb/pebble v1.1.5 // indirect - github.com/cockroachdb/redact v1.1.8 // indirect - github.com/cockroachdb/tokenbucket v0.0.0-20250429170803-42689b6311bb // indirect - github.com/cometbft/cometbft v0.39.1 // indirect - github.com/cometbft/cometbft-db v1.0.4 // indirect - github.com/cosmos/btcutil v1.0.5 // indirect - github.com/cosmos/btree v1.0.0 // indirect - github.com/cosmos/cosmos-db v1.1.3 // indirect - github.com/cosmos/cosmos-sdk/store/v2 v2.0.0 // indirect - github.com/cosmos/go-bip39 v1.0.0 // indirect - github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/iavl v1.2.8 // indirect - github.com/cosmos/ics23/go v0.11.0 // indirect - github.com/cosmos/ledger-cosmos-go v1.0.0 // indirect - github.com/danieljoos/wincred v1.2.3 // indirect - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 // indirect - github.com/desertbit/timer v1.0.1 // indirect - github.com/dgraph-io/badger/v4 v4.9.1 // indirect - github.com/dgraph-io/ristretto/v2 v2.4.0 // indirect - github.com/dunglas/httpsfv v1.1.0 // indirect - github.com/dustin/go-humanize v1.0.1 // indirect - github.com/dvsekhvalnov/jose2go v1.8.0 // indirect - github.com/ebitengine/purego v0.10.0 // indirect - github.com/emicklei/dot v1.11.0 // indirect - github.com/fatih/color v1.18.0 // indirect - github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/flynn/noise v1.1.0 // indirect - github.com/fsnotify/fsnotify v1.9.0 // indirect - github.com/gagliardetto/treeout v0.1.4 // indirect - github.com/getsentry/sentry-go v0.44.1 // indirect - github.com/go-kit/kit v0.13.0 // indirect - github.com/go-kit/log v0.2.1 // indirect - github.com/go-logfmt/logfmt v0.6.1 // indirect - github.com/go-logr/logr v1.4.3 // indirect - github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-ole/go-ole v1.3.0 // indirect - github.com/go-viper/mapstructure/v2 v2.5.0 // indirect - github.com/goccy/go-json v0.10.6 // indirect - github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect - github.com/gogo/googleapis v1.4.1 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/snappy v1.0.0 // indirect - github.com/google/btree v1.1.3 // indirect - github.com/google/flatbuffers v25.2.10+incompatible // indirect - github.com/google/go-cmp v0.7.0 // indirect - github.com/google/orderedcode v0.0.1 // indirect - github.com/google/uuid v1.6.0 // indirect - github.com/gorilla/handlers v1.5.2 // indirect - github.com/gorilla/mux v1.8.1 // indirect - github.com/gorilla/websocket v1.5.3 // indirect - github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect - github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect - github.com/hashicorp/go-hclog v1.6.3 // indirect - github.com/hashicorp/go-immutable-radix v1.3.1 // indirect - github.com/hashicorp/go-metrics v0.5.4 // indirect - github.com/hashicorp/go-plugin v1.7.0 // indirect - github.com/hashicorp/golang-lru v1.0.2 // indirect - github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect - github.com/hashicorp/yamux v0.1.2 // indirect - github.com/hdevalence/ed25519consensus v0.2.0 // indirect - github.com/holiman/uint256 v1.3.2 // indirect - github.com/huandu/skiplist v1.2.1 // indirect - github.com/huin/goupnp v1.3.0 // indirect - github.com/iancoleman/strcase v0.3.0 // indirect - github.com/improbable-eng/grpc-web v0.15.0 // indirect - github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/ipfs/go-cid v0.5.0 // indirect - github.com/jackpal/go-nat-pmp v1.0.2 // indirect - github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect - github.com/jmhodges/levigo v1.0.0 // indirect - github.com/klauspost/compress v1.18.5 // indirect - github.com/klauspost/cpuid/v2 v2.3.0 // indirect - github.com/koron/go-ssdp v0.0.6 // indirect - github.com/kr/pretty v0.3.1 // indirect - github.com/kr/text v0.2.0 // indirect - github.com/lib/pq v1.11.2 // indirect - github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/libp2p/go-flow-metrics v0.2.0 // indirect - github.com/libp2p/go-libp2p v0.47.0 // indirect - github.com/libp2p/go-libp2p-asn-util v0.4.1 // indirect - github.com/libp2p/go-msgio v0.3.0 // indirect - github.com/libp2p/go-netroute v0.3.0 // indirect - github.com/libp2p/go-reuseport v0.4.0 // indirect - github.com/libp2p/go-yamux/v5 v5.0.1 // indirect - github.com/linxGnu/grocksdb v1.10.7 // indirect - github.com/logrusorgru/aurora v2.0.3+incompatible // indirect - github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88 // indirect - github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect - github.com/mattn/go-colorable v0.1.14 // indirect - github.com/mattn/go-isatty v0.0.21 // indirect - github.com/miekg/dns v1.1.66 // indirect - github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect - github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect - github.com/minio/highwayhash v1.0.4 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect - github.com/mitchellh/go-testing-interface v1.14.1 // indirect - github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1 // indirect - github.com/mr-tron/base58 v1.2.0 // indirect - github.com/mschoch/smat v0.2.0 // indirect - github.com/mtibben/percent v0.2.1 // indirect - github.com/multiformats/go-base32 v0.1.0 // indirect - github.com/multiformats/go-base36 v0.2.0 // indirect - github.com/multiformats/go-multiaddr v0.16.1 // indirect - github.com/multiformats/go-multiaddr-dns v0.4.1 // indirect - github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect - github.com/multiformats/go-multibase v0.2.0 // indirect - github.com/multiformats/go-multicodec v0.9.1 // indirect - github.com/multiformats/go-multihash v0.2.3 // indirect - github.com/multiformats/go-multistream v0.6.1 // indirect - github.com/multiformats/go-varint v0.0.7 // indirect - github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/oasisprotocol/curve25519-voi v0.0.0-20251114093237-2ab5a27a1729 // indirect - github.com/oklog/run v1.2.0 // indirect - github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect - github.com/pelletier/go-toml/v2 v2.2.4 // indirect - github.com/petermattis/goid v0.0.0-20260113132338-7c7de50cc741 // indirect - github.com/pion/datachannel v1.5.10 // indirect - github.com/pion/dtls/v2 v2.2.12 // indirect - github.com/pion/dtls/v3 v3.1.2 // indirect - github.com/pion/ice/v4 v4.0.10 // indirect - github.com/pion/interceptor v0.1.40 // indirect - github.com/pion/logging v0.2.4 // indirect - github.com/pion/mdns/v2 v2.0.7 // indirect - github.com/pion/randutil v0.1.0 // indirect - github.com/pion/rtcp v1.2.15 // indirect - github.com/pion/rtp v1.8.19 // indirect - github.com/pion/sctp v1.8.39 // indirect - github.com/pion/sdp/v3 v3.0.13 // indirect - github.com/pion/srtp/v3 v3.0.6 // indirect - github.com/pion/stun v0.6.1 // indirect - github.com/pion/stun/v3 v3.0.0 // indirect - github.com/pion/transport/v2 v2.2.10 // indirect - github.com/pion/transport/v3 v3.0.7 // indirect - github.com/pion/transport/v4 v4.0.1 // indirect - github.com/pion/turn/v4 v4.0.2 // indirect - github.com/pion/webrtc/v4 v4.1.2 // indirect - github.com/pkg/errors v0.9.1 // indirect - github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect - github.com/prometheus/client_golang v1.23.2 // indirect - github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v0.67.5 // indirect - github.com/prometheus/otlptranslator v1.0.0 // indirect - github.com/prometheus/procfs v0.20.1 // indirect - github.com/quic-go/qpack v0.6.0 // indirect - github.com/quic-go/quic-go v0.59.0 // indirect - github.com/quic-go/webtransport-go v0.10.0 // indirect - github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9 // indirect - github.com/rogpeppe/go-internal v1.14.1 // indirect - github.com/rs/cors v1.11.1 // indirect - github.com/rs/zerolog v1.35.0 // indirect - github.com/sagikazarmark/locafero v0.11.0 // indirect - github.com/sasha-s/go-deadlock v0.3.7 // indirect - github.com/shirou/gopsutil/v4 v4.26.3 // indirect - github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect - github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/spf13/afero v1.15.0 // indirect - github.com/spf13/cast v1.10.0 // indirect - github.com/spf13/cobra v1.10.2 // indirect - github.com/spf13/pflag v1.0.10 // indirect - github.com/spf13/viper v1.21.0 // indirect - github.com/streamingfast/logging v0.0.0-20250404134358-92b15d2fbd2e // indirect - github.com/subosito/gotenv v1.6.0 // indirect - github.com/supranational/blst v0.3.16 // indirect - github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect - github.com/tendermint/go-amino v0.16.0 // indirect - github.com/tidwall/btree v1.8.1 // indirect - github.com/tklauser/go-sysconf v0.3.16 // indirect - github.com/tklauser/numcpus v0.11.0 // indirect - github.com/twitchyliquid64/golang-asm v0.15.1 // indirect - github.com/wlynxg/anet v0.0.5 // indirect - github.com/yusufpapurcu/wmi v1.2.4 // indirect - github.com/zondax/golem v0.27.0 // indirect - github.com/zondax/hid v0.9.2 // indirect - github.com/zondax/ledger-go v1.0.1 // indirect - go.etcd.io/bbolt v1.4.3 // indirect - go.mongodb.org/mongo-driver/v2 v2.5.0 // indirect - go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/bridges/otelslog v0.17.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 // indirect - go.opentelemetry.io/contrib/instrumentation/host v0.67.0 // indirect - go.opentelemetry.io/contrib/instrumentation/runtime v0.67.0 // indirect - go.opentelemetry.io/contrib/otelconf v0.22.0 // indirect - go.opentelemetry.io/contrib/propagators/autoprop v0.67.0 // indirect - go.opentelemetry.io/contrib/propagators/aws v1.42.0 // indirect - go.opentelemetry.io/contrib/propagators/b3 v1.42.0 // indirect - go.opentelemetry.io/contrib/propagators/jaeger v1.42.0 // indirect - go.opentelemetry.io/contrib/propagators/ot v1.42.0 // indirect - go.opentelemetry.io/otel v1.43.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.18.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.18.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.42.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.42.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.42.0 // indirect - go.opentelemetry.io/otel/exporters/prometheus v0.64.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.18.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0 // indirect - go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.42.0 // indirect - go.opentelemetry.io/otel/log v0.19.0 // indirect - go.opentelemetry.io/otel/metric v1.43.0 // indirect - go.opentelemetry.io/otel/sdk v1.43.0 // indirect - go.opentelemetry.io/otel/sdk/log v0.18.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect - go.opentelemetry.io/otel/trace v1.43.0 // indirect - go.opentelemetry.io/proto/otlp v1.9.0 // indirect - go.uber.org/dig v1.19.0 // indirect - go.uber.org/fx v1.24.0 // indirect - go.uber.org/mock v0.6.0 // indirect - go.uber.org/multierr v1.11.0 // indirect - go.uber.org/zap v1.27.1 // indirect - go.yaml.in/yaml/v2 v2.4.4 // indirect - go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/arch v0.26.0 // indirect - golang.org/x/crypto v0.50.0 // indirect - golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 // indirect - golang.org/x/mod v0.34.0 // indirect - golang.org/x/net v0.53.0 // indirect - golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.43.0 // indirect - golang.org/x/telemetry v0.0.0-20260311193753-579e4da9a98c // indirect - golang.org/x/term v0.42.0 // indirect - golang.org/x/text v0.36.0 // indirect - golang.org/x/time v0.15.0 // indirect - golang.org/x/tools v0.43.0 // indirect - google.golang.org/genproto v0.0.0-20260414002931-afd174a4e478 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260420184626-e10c466a9529 // indirect - google.golang.org/protobuf v1.36.11 // indirect - gopkg.in/yaml.v3 v3.0.1 // indirect - gotest.tools/v3 v3.5.2 // indirect - lukechampine.com/blake3 v1.4.1 // indirect - nhooyr.io/websocket v1.8.17 // indirect - pgregory.net/rapid v1.2.0 // indirect - sigs.k8s.io/yaml v1.6.0 // indirect -) diff --git a/prototypes/go.sum b/prototypes/go.sum deleted file mode 100644 index e8a21351bd5..00000000000 --- a/prototypes/go.sum +++ /dev/null @@ -1,1427 +0,0 @@ -cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4= -cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= -cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= -cloud.google.com/go/auth v0.20.0 h1:kXTssoVb4azsVDoUiF8KvxAqrsQcQtB53DcSgta74CA= -cloud.google.com/go/auth v0.20.0/go.mod h1:942/yi/itH1SsmpyrbnTMDgGfdy2BUqIKyd0cyYLc5Q= -cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= -cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= -cloud.google.com/go/compute v1.58.0 h1:WQamD8d9Vxu+m5IJBxgUzqsbHxXwx/T7Ol4V5GyVCZE= -cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= -cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= -cloud.google.com/go/iam v1.9.0 h1:89wyjxT6DL4b5rk/Nk8eBC9DHqf+JiMstrn5IEYxFw4= -cloud.google.com/go/iam v1.9.0/go.mod h1:KP+nKGugNJW4LcLx1uEZcq1ok5sQHFaQehQNl4QDgV4= -cloud.google.com/go/monitoring v1.27.0 h1:BhYwMqao+e5Nn7JtWMM9m6zRtKtVUK6kJWMizXChkLU= -cloud.google.com/go/monitoring v1.27.0/go.mod h1:72NOVjJXHY/HBfoLT0+qlCZBT059+9VXLeAnL2PeeVM= -cloud.google.com/go/storage v1.62.1 h1:Os0G3XbUbjZumkpDUf2Y0rLoXJTCF1kU2kWUujKYXD8= -cloud.google.com/go/storage v1.62.1/go.mod h1:cpYz/kRVZ+UQAF1uHeea10/9ewcRbxGoGNKsS9daSXA= -cosmossdk.io/api v1.0.0 h1:qTV8OPVEwcBPwp2b9p4Qy4noZyihJ+sOMaWL/VT+RCc= -cosmossdk.io/api v1.0.0/go.mod h1:fKRljeYk+04p4T8Shdyv+uH2fSVyzHoWrvDAs/7OxfI= -cosmossdk.io/collections v1.4.0 h1:b373bkxCxKiRbapxZ42TRmcKJEnBVBebdQVk9I5IkkE= -cosmossdk.io/collections v1.4.0/go.mod h1:gxbieVY3tjbvWlkm3yOXf7sGyDrVi12haZH+sek6whw= -cosmossdk.io/core v1.1.0 h1:iJ7j2DjNsFzg4/z4ImNQYzy2D4LfMCsaQ8Lrz1KCmxk= -cosmossdk.io/core v1.1.0/go.mod h1:qGmJxBFHobvG1k4bROQnueslotBU5MIKZLC57xVBYYI= -cosmossdk.io/depinject v1.2.1 h1:eD6FxkIjlVaNZT+dXTQuwQTKZrFZ4UrfCq1RKgzyhMw= -cosmossdk.io/depinject v1.2.1/go.mod h1:lqQEycz0H2JXqvOgVwTsjEdMI0plswI7p6KX+MVqFOM= -cosmossdk.io/errors v1.1.0 h1:X2DSt9JYgH7cuiaDr318aUqIl2z5Lfo/PdGzAtmczUU= -cosmossdk.io/errors v1.1.0/go.mod h1:lnjBmx7etZpMTLnxdspZupH0d9HGRWZhiezDZX2ayyI= -cosmossdk.io/log/v2 v2.1.0 h1:oWLWqZ1UObWu5hIS3dvTW7QyjtvlmSzC3LOy04U/hVI= -cosmossdk.io/log/v2 v2.1.0/go.mod h1:zDNpuRD2sWw4zuw1lZYg/jxKftVG+VizgcWAWkIorwY= -cosmossdk.io/math v1.5.3 h1:WH6tu6Z3AUCeHbeOSHg2mt9rnoiUWVWaQ2t6Gkll96U= -cosmossdk.io/math v1.5.3/go.mod h1:uqcZv7vexnhMFJF+6zh9EWdm/+Ylyln34IvPnBauPCQ= -cosmossdk.io/schema v1.1.0 h1:mmpuz3dzouCoyjjcMcA/xHBEmMChN+EHh8EHxHRHhzE= -cosmossdk.io/schema v1.1.0/go.mod h1:Gb7pqO+tpR+jLW5qDcNOSv0KtppYs7881kfzakguhhI= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= -filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= -github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= -github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= -github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0= -github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk= -github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg= -github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/datadog-go v4.8.3+incompatible h1:fNGaYSuObuQb5nzeTQqowRAd9bpDIRRV4/gUtIBjh8Q= -github.com/DataDog/datadog-go v4.8.3+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/zstd v1.5.7 h1:ybO8RBeh29qrxIhCA9E8gKY6xfONU9T6G6aP9DTKfLE= -github.com/DataDog/zstd v1.5.7/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0 h1:rIkQfkCOVKc1OiRCNcSDD8ml5RJlZbH/Xsq7lbpynwc= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0/go.mod h1:RD2SsorTmYhF6HkTmDw7KmPYQk8OBYwTkuasChwv7R4= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0 h1:O2sXMyJh8b7devAGdE+163xtRurt0RVpB6DIzX5vGfg= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0/go.mod h1:hEpiGU18xf70qb3jbTcIggWAiEfX/cOIVc2OTe4OegA= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 h1:0YP0+/ixwu+Uqeu/FGiBZNQ19huiUxxiPXIc9WsLKuQ= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0/go.mod h1:6ZZMQhZKDvUvkJw2rc+oDP90tMMzuU/J+5HG1ZmPOmE= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= -github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= -github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20260116142910-60249400e523 h1:pQUezn45oyv/8VcOQvPCg2851EIIusY0YKkJhAXsy2I= -github.com/ProjectZKM/Ziren/crates/go-runtime/zkvm_runtime v0.0.0-20260116142910-60249400e523/go.mod h1:ioLG6R+5bUSO1oeGSDxOV3FADARuMoytZCSX6MEMQkI= -github.com/RoaringBitmap/roaring/v2 v2.15.0 h1:gCbixa3UiG7g6WUZNVOfEEg2HTc1vR4OVdMkX8t1ZFc= -github.com/RoaringBitmap/roaring/v2 v2.15.0/go.mod h1:eq4wdNXxtJIS/oikeCzdX1rBzek7ANzbth041hrU8Q4= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= -github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/adlio/schema v1.4.0 h1:dekxG6P0my/bPvlyWzMULelR2Xej8RGErlnJcoY5ddw= -github.com/adlio/schema v1.4.0/go.mod h1:3/ojUldWBCWp4e+6VN9ets6unG5WdqbjF7vyzM0zTVQ= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/aws/aws-sdk-go-v2 v1.41.5 h1:dj5kopbwUsVUVFgO4Fi5BIT3t4WyqIDjGKCangnV/yY= -github.com/aws/aws-sdk-go-v2 v1.41.5/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 h1:eBMB84YGghSocM7PsjmmPffTa+1FBUeNvGvFou6V/4o= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI= -github.com/aws/aws-sdk-go-v2/config v1.32.14 h1:opVIRo/ZbbI8OIqSOKmpFaY7IwfFUOCCXBsUpJOwDdI= -github.com/aws/aws-sdk-go-v2/config v1.32.14/go.mod h1:U4/V0uKxh0Tl5sxmCBZ3AecYny4UNlVmObYjKuuaiOo= -github.com/aws/aws-sdk-go-v2/credentials v1.19.14 h1:n+UcGWAIZHkXzYt87uMFBv/l8THYELoX6gVcUvgl6fI= -github.com/aws/aws-sdk-go-v2/credentials v1.19.14/go.mod h1:cJKuyWB59Mqi0jM3nFYQRmnHVQIcgoxjEMAbLkpr62w= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21 h1:NUS3K4BTDArQqNu2ih7yeDLaS3bmHD0YndtA6UP884g= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21/go.mod h1:YWNWJQNjKigKY1RHVJCuupeWDrrHjRqHm0N9rdrWzYI= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21 h1:Rgg6wvjjtX8bNHcvi9OnXWwcE0a2vGpbwmtICOsvcf4= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21/go.mod h1:A/kJFst/nm//cyqonihbdpQZwiUhhzpqTsdbhDdRF9c= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21 h1:PEgGVtPoB6NTpPrBgqSE5hE/o47Ij9qk/SEZFbUOe9A= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21/go.mod h1:p+hz+PRAYlY3zcpJhPwXlLC4C+kqn70WIHwnzAfs6ps= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 h1:qYQ4pzQ2Oz6WpQ8T3HvGHnZydA72MnLuFK9tJwmrbHw= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.22 h1:rWyie/PxDRIdhNf4DzRk0lvjVOqFJuNnO8WwaIRVxzQ= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.22/go.mod h1:zd/JsJ4P7oGfUhXn1VyLqaRZwPmZwg44Jf2dS84Dm3Y= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 h1:5EniKhLZe4xzL7a+fU3C2tfUN4nWIqlLesfrjkuPFTY= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13 h1:JRaIgADQS/U6uXDqlPiefP32yXTda7Kqfx+LgspooZM= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13/go.mod h1:CEuVn5WqOMilYl+tbccq8+N2ieCy0gVn3OtRb0vBNNM= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21 h1:c31//R3xgIJMSC8S6hEVq+38DcvUlgFY0FM6mSI5oto= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21/go.mod h1:r6+pf23ouCB718FUxaqzZdbpYFyDtehyZcmP5KL9FkA= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21 h1:ZlvrNcHSFFWURB8avufQq9gFsheUgjVD9536obIknfM= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21/go.mod h1:cv3TNhVrssKR0O/xxLJVRfd2oazSnZnkUeTf6ctUwfQ= -github.com/aws/aws-sdk-go-v2/service/s3 v1.99.0 h1:hlSuz394kV0vhv9drL5lhuEFbEOEP1VyQpy15qWh1Pk= -github.com/aws/aws-sdk-go-v2/service/s3 v1.99.0/go.mod h1:uoA43SdFwacedBfSgfFSjjCvYe8aYBS7EnU5GZ/YKMM= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.9 h1:QKZH0S178gCmFEgst8hN0mCX1KxLgHBKKY/CLqwP8lg= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.9/go.mod h1:7yuQJoT+OoH8aqIxw9vwF+8KpvLZ8AWmvmUWHsGQZvI= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.15 h1:lFd1+ZSEYJZYvv9d6kXzhkZu07si3f+GQ1AaYwa2LUM= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.15/go.mod h1:WSvS1NLr7JaPunCXqpJnWk1Bjo7IxzZXrZi1QQCkuqM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.19 h1:dzztQ1YmfPrxdrOiuZRMF6fuOwWlWpD2StNLTceKpys= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.19/go.mod h1:YO8TrYtFdl5w/4vmjL8zaBSsiNp3w0L1FfKVKenZT7w= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.10 h1:p8ogvvLugcR/zLBXTXrTkj0RYBUdErbMnAFFp12Lm/U= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.10/go.mod h1:60dv0eZJfeVXfbT1tFJinbHrDfSJ2GZl4Q//OSSNAVw= -github.com/aws/smithy-go v1.24.3 h1:XgOAaUgx+HhVBoP4v8n6HCQoTRDhoMghKqw4LNHsDNg= -github.com/aws/smithy-go v1.24.3/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/benbjohnson/clock v1.3.5 h1:VvXlSJBzZpA/zum6Sj74hxwYI2DIxRWuNIoXAzHZz5o= -github.com/benbjohnson/clock v1.3.5/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= -github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bgentry/speakeasy v0.2.0 h1:tgObeVOf8WAvtuAX6DhJ4xks4CFNwPDZiqzGqIHE51E= -github.com/bgentry/speakeasy v0.2.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bits-and-blooms/bitset v1.24.4 h1:95H15Og1clikBrKr/DuzMXkQzECs1M6hhoGXLwLQOZE= -github.com/bits-and-blooms/bitset v1.24.4/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= -github.com/blendle/zapdriver v1.3.1 h1:C3dydBOWYRiOk+B8X9IVZ5IOe+7cl+tGOexN4QqHfpE= -github.com/blendle/zapdriver v1.3.1/go.mod h1:mdXfREi6u5MArG4j9fewC+FGnXaBR+T4Ox4J2u4eHCc= -github.com/btcsuite/btcd/btcec/v2 v2.3.5 h1:dpAlnAwmT1yIBm3exhT1/8iUSD98RDJM5vqJVQDQLiU= -github.com/btcsuite/btcd/btcec/v2 v2.3.5/go.mod h1:m22FrOAiuxl/tht9wIqAoGHcbnCCaPWyauO8y2LGGtQ= -github.com/btcsuite/btcd/btcutil v1.1.6 h1:zFL2+c3Lb9gEgqKNzowKUPQNb8jV7v5Oaodi/AYFd6c= -github.com/btcsuite/btcd/btcutil v1.1.6/go.mod h1:9dFymx8HpuLqBnsPELrImQeTQfKBQqzqGbbV3jK55aE= -github.com/bytedance/gopkg v0.1.4 h1:oZnQwnX82KAIWb7033bEwtxvTqXcYMxDBaQxo5JJHWM= -github.com/bytedance/gopkg v0.1.4/go.mod h1:v1zWfPm21Fb+OsyXN2VAHdL6TBb2L88anLQgdyje6R4= -github.com/bytedance/sonic v1.15.0 h1:/PXeWFaR5ElNcVE84U0dOHjiMHQOwNIx3K4ymzh/uSE= -github.com/bytedance/sonic v1.15.0/go.mod h1:tFkWrPz0/CUCLEF4ri4UkHekCIcdnkqXw9VduqpJh0k= -github.com/bytedance/sonic/loader v0.5.1 h1:Ygpfa9zwRCCKSlrp5bBP/b/Xzc3VxsAW+5NIYXrOOpI= -github.com/bytedance/sonic/loader v0.5.1/go.mod h1:AR4NYCk5DdzZizZ5djGqQ92eEhCCcdf5x77udYiSJRo= -github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= -github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= -github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= -github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= -github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= -github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= -github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M= -github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 h1:aBangftG7EVZoUb69Os8IaYg++6uMOdKK83QtkkvJik= -github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2/go.mod h1:qwXFYgsP6T7XnJtbKlf1HP8AjxZZyzxMmc+Lq5GjlU4= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= -github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= -github.com/cockroachdb/errors v1.12.0 h1:d7oCs6vuIMUQRVbi6jWWWEJZahLCfJpnJSVobd1/sUo= -github.com/cockroachdb/errors v1.12.0/go.mod h1:SvzfYNNBshAVbZ8wzNc/UPK3w1vf0dKDUP41ucAIf7g= -github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0 h1:pU88SPhIFid6/k0egdR5V6eALQYq2qbSmukrkgIh/0A= -github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M= -github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 h1:ASDL+UJcILMqgNeV5jiqR4j+sTuvQNHdf2chuKj1M5k= -github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506/go.mod h1:Mw7HqKr2kdtu6aYGn3tPmAftiP3QPX63LdK/zcariIo= -github.com/cockroachdb/pebble v1.1.5 h1:5AAWCBWbat0uE0blr8qzufZP5tBjkRyy/jWe1QWLnvw= -github.com/cockroachdb/pebble v1.1.5/go.mod h1:17wO9el1YEigxkP/YtV8NtCivQDgoCyBg5c4VR/eOWo= -github.com/cockroachdb/redact v1.1.8 h1:8eVLLj6juKxiKrAEw2b8cJvNqWq++U8WOfQFuL7KTaA= -github.com/cockroachdb/redact v1.1.8/go.mod h1:GceHHpJ0rMDpYARL5In88Alq/xMBUtVlz7Qxix6ZVkw= -github.com/cockroachdb/tokenbucket v0.0.0-20250429170803-42689b6311bb h1:3bCgBvB8PbJVMX1ouCcSIxvsqKPYM7gs72o0zC76n9g= -github.com/cockroachdb/tokenbucket v0.0.0-20250429170803-42689b6311bb/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/cometbft/cometbft v0.39.1 h1:rPMgpKVd6OUIMDQW6InsAxGCdV+6uiwMQjKYmACjH/o= -github.com/cometbft/cometbft v0.39.1/go.mod h1:lkMTqoPc3h77h6i0oe3wyZgZQBwEwXq+lYpnZLmKJYI= -github.com/cometbft/cometbft-db v1.0.4 h1:cezb8yx/ZWcF124wqUtAFjAuDksS1y1yXedvtprUFxs= -github.com/cometbft/cometbft-db v1.0.4/go.mod h1:M+BtHAGU2XLrpUxo3Nn1nOCcnVCiLM9yx5OuT0u5SCA= -github.com/containerd/continuity v0.4.5 h1:ZRoN1sXq9u7V6QoHMcVWGhOwDFqZ4B9i5H6un1Wh0x4= -github.com/containerd/continuity v0.4.5/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= -github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= -github.com/cosmos/btree v1.0.0 h1:V3OdIzTQw2yE7f6pD6FfA9j2/YLj1UpB9MdY0zU3v3k= -github.com/cosmos/btree v1.0.0/go.mod h1:BZML+flLn4d3MOa4POmzDWf5HQ7EGh0y1OLlfhh7A0k= -github.com/cosmos/cosmos-db v1.1.3 h1:7QNT77+vkefostcKkhrzDK9uoIEryzFrU9eoMeaQOPY= -github.com/cosmos/cosmos-db v1.1.3/go.mod h1:kN+wGsnwUJZYn8Sy5Q2O0vCYA99MJllkKASbs6Unb9U= -github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= -github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= -github.com/cosmos/cosmos-sdk v0.54.2 h1:TBcKN4z++XJ8Tu/NCbLV14KQ3pKhoSwSTDipeWmuaxs= -github.com/cosmos/cosmos-sdk v0.54.2/go.mod h1:yU5ttNdGYTVPfdYhrD8HN1hGg9s3jm7Ub42SpFW3T/Y= -github.com/cosmos/cosmos-sdk/store/v2 v2.0.0 h1:5CFXBU5cHIvxMpz5QBrTwR5DL/W3uZL2BYYMoDp4siY= -github.com/cosmos/cosmos-sdk/store/v2 v2.0.0/go.mod h1:XyRyi5fGjIcokBqS1cyA8/QVbVNy4ui8hmpk1gezuHo= -github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= -github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= -github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= -github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= -github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.7.2 h1:5G25McIraOC0mRFv9TVO139Uh3OklV2hczr13KKVHCA= -github.com/cosmos/gogoproto v1.7.2/go.mod h1:8S7w53P1Y1cHwND64o0BnArT6RmdgIvsBuco6uTllsk= -github.com/cosmos/iavl v1.2.8 h1:55F96BGUJ7KT7h+Ky/cEqS+pEvhFqsU4O8Th3F0N1js= -github.com/cosmos/iavl v1.2.8/go.mod h1:FRHN4tO+6crf0p2zsqye+nAbsMgiwdkxpWm18DyP6+Y= -github.com/cosmos/ibc-go/v11 v11.0.0 h1:9EIehi88hNP1cCU83NC+J8UXNn+05YZt9eqmnzCQLSg= -github.com/cosmos/ibc-go/v11 v11.0.0/go.mod h1:iWlzLuCu+ctVbQwoVf5z51HE5e/NE8/pwnLVVDmP++4= -github.com/cosmos/ics23/go v0.11.0 h1:jk5skjT0TqX5e5QJbEnwXIS2yI2vnmLOgpQPeM5RtnU= -github.com/cosmos/ics23/go v0.11.0/go.mod h1:A8OjxPE67hHST4Icw94hOxxFEJMBG031xIGF/JHNIY0= -github.com/cosmos/ledger-cosmos-go v1.0.0 h1:jNKW89nPf0vR0EkjHG8Zz16h6p3zqwYEOxlHArwgYtw= -github.com/cosmos/ledger-cosmos-go v1.0.0/go.mod h1:mGaw2wDOf+Z6SfRJsMGxU9DIrBa4du0MAiPlpPhLAOE= -github.com/cosmos/solidity-ibc-eureka/packages/go-proto v0.0.0-20260502103309-00b9d8658884 h1:qe6m1bDONjbSjr8rgJyXtnbmllRI/WrHftODkkE8VOk= -github.com/cosmos/solidity-ibc-eureka/packages/go-proto v0.0.0-20260502103309-00b9d8658884/go.mod h1:OXel42XVhxNaFBPhA8URw1f/UG6pWEjkBB3DMRQD/hM= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/danieljoos/wincred v1.2.3 h1:v7dZC2x32Ut3nEfRH+vhoZGvN72+dQ/snVXo/vMFLdQ= -github.com/danieljoos/wincred v1.2.3/go.mod h1:6qqX0WNrS4RzPZ1tnroDzq9kY3fu1KwE7MRLQK4X0bs= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= -github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= -github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= -github.com/decred/dcrd/crypto/blake256 v1.1.0 h1:zPMNGQCm0g4QTY27fOCorQW7EryeQ/U0x++OzVrdms8= -github.com/decred/dcrd/crypto/blake256 v1.1.0/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 h1:5RVFMOWjMyRy8cARdy79nAmgYw3hK/4HUq48LQ6Wwqo= -github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40= -github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= -github.com/desertbit/timer v1.0.1 h1:yRpYNn5Vaaj6QXecdLMPMJsW81JLiI1eokUft5nBmeo= -github.com/desertbit/timer v1.0.1/go.mod h1:htRrYeY5V/t4iu1xCJ5XsQvp4xve8QulXXctAzxqcwE= -github.com/dgraph-io/badger/v4 v4.9.1 h1:DocZXZkg5JJHJPtUErA0ibyHxOVUDVoXLSCV6t8NC8w= -github.com/dgraph-io/badger/v4 v4.9.1/go.mod h1:5/MEx97uzdPUHR4KtkNt8asfI2T4JiEiQlV7kWUo8c0= -github.com/dgraph-io/ristretto/v2 v2.4.0 h1:I/w09yLjhdcVD2QV192UJcq8dPBaAJb9pOuMyNy0XlU= -github.com/dgraph-io/ristretto/v2 v2.4.0/go.mod h1:0KsrXtXvnv0EqnzyowllbVJB8yBonswa2lTCK2gGo9E= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa512G+w+Pxci9hJPB8oMnkcP3iZF38= -github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/docker/go-connections v0.6.0 h1:LlMG9azAe1TqfR7sO+NJttz1gy6KO7VJBh+pMmjSD94= -github.com/docker/go-connections v0.6.0/go.mod h1:AahvXYshr6JgfUJGdDCs2b5EZG/vmaMAntpSFH5BFKE= -github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= -github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/dunglas/httpsfv v1.1.0 h1:Jw76nAyKWKZKFrpMMcL76y35tOpYHqQPzHQiwDvpe54= -github.com/dunglas/httpsfv v1.1.0/go.mod h1:zID2mqw9mFsnt7YC3vYQ9/cjq30q41W+1AnDwH8TiMg= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= -github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/dvsekhvalnov/jose2go v1.8.0 h1:LqkkVKAlHFfH9LOEl5fe4p/zL02OhWE7pCufMBG2jLA= -github.com/dvsekhvalnov/jose2go v1.8.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/ebitengine/purego v0.10.0 h1:QIw4xfpWT6GWTzaW5XEKy3HXoqrJGx1ijYHzTF0/ISU= -github.com/ebitengine/purego v0.10.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/emicklei/dot v1.11.0 h1:zsrhCuFHAJge/aZIC4N4LdHy5tqYu4tWEaUzIwdYj4Y= -github.com/emicklei/dot v1.11.0/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= -github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= -github.com/envoyproxy/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA= -github.com/envoyproxy/go-control-plane/envoy v1.37.0 h1:u3riX6BoYRfF4Dr7dwSOroNfdSbEPe9Yyl09/B6wBrQ= -github.com/envoyproxy/go-control-plane/envoy v1.37.0/go.mod h1:DReE9MMrmecPy+YvQOAOHNYMALuowAnbjjEMkkWOi6A= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMDjpqGAGacLe2T0ds= -github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0= -github.com/ethereum/go-ethereum v1.17.2 h1:ag6geu0kn8Hv5FLKTpH+Hm2DHD+iuFtuqKxEuwUsDOI= -github.com/ethereum/go-ethereum v1.17.2/go.mod h1:KHcRXfGOUfUmKg51IhQ0IowiqZ6PqZf08CMtk0g5K1o= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= -github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= -github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= -github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/flynn/noise v1.1.0 h1:KjPQoQCEFdZDiP03phOvGi11+SVVhBG2wOWAorLsstg= -github.com/flynn/noise v1.1.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= -github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= -github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= -github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= -github.com/gagliardetto/binary v0.8.0 h1:U9ahc45v9HW0d15LoN++vIXSJyqR/pWw8DDlhd7zvxg= -github.com/gagliardetto/binary v0.8.0/go.mod h1:2tfj51g5o9dnvsc+fL3Jxr22MuWzYXwx9wEoN0XQ7/c= -github.com/gagliardetto/solana-go v1.19.0 h1:m3fPxI7/+VpE6WgOzwmRBY9t4QY6ljvpJLhwWaJVOE8= -github.com/gagliardetto/solana-go v1.19.0/go.mod h1:M88UnNo9tGt64VizMeR1+jZuyrFF8vho9ZOCtYKPXxQ= -github.com/gagliardetto/treeout v0.1.4 h1:ozeYerrLCmCubo1TcIjFiOWTTGteOOHND1twdFpgwaw= -github.com/gagliardetto/treeout v0.1.4/go.mod h1:loUefvXTrlRG5rYmJmExNryyBRh8f89VZhmMOyCyqok= -github.com/getsentry/sentry-go v0.44.1 h1:/cPtrA5qB7uMRrhgSn9TYtcEF36auGP3Y6+ThvD/yaI= -github.com/getsentry/sentry-go v0.44.1/go.mod h1:XDotiNZbgf5U8bPDUAfvcFmOnMQQceESxyKaObSssW0= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= -github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= -github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-kit/kit v0.13.0 h1:OoneCcHKHQ03LfBpoQCUfCluwd2Vt3ohz+kvbJneZAU= -github.com/go-kit/kit v0.13.0/go.mod h1:phqEHMMUbyrCFCTgH48JueqrM3md2HcAZ8N3XE4FKDg= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= -github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.6.1 h1:4hvbpePJKnIzH1B+8OR/JPbTx37NktoI9LE2QZBBkvE= -github.com/go-logfmt/logfmt v0.6.1/go.mod h1:EV2pOAQoZaT1ZXZbqDl5hrymndi4SY9ED9/z6CO0XAk= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= -github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= -github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= -github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro= -github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-json v0.10.6 h1:p8HrPJzOakx/mn/bQtjgNjdTcN+/S6FcG2CTtQOrHVU= -github.com/goccy/go-json v0.10.6/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= -github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= -github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= -github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= -github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= -github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= -github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/flatbuffers v25.2.10+incompatible h1:F3vclr7C3HpB1k9mxCGRMXq6FdUalZ6H/pNX4FP1v0Q= -github.com/google/flatbuffers v25.2.10+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= -github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= -github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= -github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= -github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.14 h1:yh8ncqsbUY4shRD5dA6RlzjJaT4hi3kII+zYw8wmLb8= -github.com/googleapis/enterprise-certificate-proxy v0.3.14/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= -github.com/googleapis/gax-go/v2 v2.22.0 h1:PjIWBpgGIVKGoCXuiCoP64altEJCj3/Ei+kSU5vlZD4= -github.com/googleapis/gax-go/v2 v2.22.0/go.mod h1:irWBbALSr0Sk3qlqb9SyJ1h68WjgeFuiOzI4Rqw5+aY= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= -github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= -github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= -github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= -github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= -github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= -github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= -github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= -github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72 h1:vTCWu1wbdYo7PEZFem/rlr01+Un+wwVmI7wiegFdRLk= -github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72/go.mod h1:Vn+BBgKQHVQYdVQ4NZDICE1Brb+JfaONyDHr3q07oQc= -github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= -github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.8.6 h1:9sQboWULaydVphxc4S64oAI4YqpuCk7nPmvbk131ebY= -github.com/hashicorp/go-getter v1.8.6/go.mod h1:nVH12eOV2P58dIiL3rsU6Fh3wLeJEKBOJzhMmzlSWoo= -github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= -github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= -github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-metrics v0.5.4 h1:8mmPiIJkTPPEbAiV97IxdAGNdRdaWwVap1BU6elejKY= -github.com/hashicorp/go-metrics v0.5.4/go.mod h1:CG5yz4NZ/AI/aQt9Ucm/vdBnbh7fvmv4lxZ350i+QQI= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-plugin v1.7.0 h1:YghfQH/0QmPNc/AZMTFE3ac8fipZyZECHdDPshfk+mA= -github.com/hashicorp/go-plugin v1.7.0/go.mod h1:BExt6KEaIYx804z8k4gRzRLEvxKVb+kn0NMcihqOqb8= -github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.9.0 h1:CeOIz6k+LoN3qX9Z0tyQrPtiB1DFYRPfCIBtaXPSCnA= -github.com/hashicorp/go-version v1.9.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= -github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= -github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8= -github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns= -github.com/hdevalence/ed25519consensus v0.2.0 h1:37ICyZqdyj0lAZ8P4D1d1id3HqbbG1N3iBb1Tb4rdcU= -github.com/hdevalence/ed25519consensus v0.2.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= -github.com/holiman/uint256 v1.3.2 h1:a9EgMPSC1AAaj1SZL5zIQD3WbwTuHrMGOerLjGmM/TA= -github.com/holiman/uint256 v1.3.2/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= -github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= -github.com/huandu/skiplist v1.2.1 h1:dTi93MgjwErA/8idWTzIw4Y1kZsMWx35fmI2c8Rij7w= -github.com/huandu/skiplist v1.2.1/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= -github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= -github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= -github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= -github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= -github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/ipfs/go-cid v0.5.0 h1:goEKKhaGm0ul11IHA7I6p1GmKz8kEYniqFopaB5Otwg= -github.com/ipfs/go-cid v0.5.0/go.mod h1:0L7vmeNXpQpUS9vt+yEARkJ8rOg43DF3iPgn4GIN0mk= -github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= -github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= -github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= -github.com/jhump/protoreflect v1.18.0 h1:TOz0MSR/0JOZ5kECB/0ufGnC2jdsgZ123Rd/k4Z5/2w= -github.com/jhump/protoreflect v1.18.0/go.mod h1:ezWcltJIVF4zYdIFM+D/sHV4Oh5LNU08ORzCGfwvTz8= -github.com/jhump/protoreflect/v2 v2.0.0-beta.1 h1:Dw1rslK/VotaUGYsv53XVWITr+5RCPXfvvlGrM/+B6w= -github.com/jhump/protoreflect/v2 v2.0.0-beta.1/go.mod h1:D9LBEowZyv8/iSu97FU2zmXG3JxVTmNw21mu63niFzU= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= -github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.4/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE= -github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= -github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= -github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/koron/go-ssdp v0.0.6 h1:Jb0h04599eq/CY7rB5YEqPS83HmRfHP2azkxMN2rFtU= -github.com/koron/go-ssdp v0.0.6/go.mod h1:0R9LfRJGek1zWTjN3JUNlm5INCDYGpRDfAptnct63fI= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/lib/pq v1.11.2 h1:x6gxUeu39V0BHZiugWe8LXZYZ+Utk7hSJGThs8sdzfs= -github.com/lib/pq v1.11.2/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA= -github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= -github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= -github.com/libp2p/go-flow-metrics v0.2.0 h1:EIZzjmeOE6c8Dav0sNv35vhZxATIXWZg6j/C08XmmDw= -github.com/libp2p/go-flow-metrics v0.2.0/go.mod h1:st3qqfu8+pMfh+9Mzqb2GTiwrAGjIPszEjZmtksN8Jc= -github.com/libp2p/go-libp2p v0.47.0 h1:qQpBjSCWNQFF0hjBbKirMXE9RHLtSuzTDkTfr1rw0yc= -github.com/libp2p/go-libp2p v0.47.0/go.mod h1:s8HPh7mMV933OtXzONaGFseCg/BE//m1V34p3x4EUOY= -github.com/libp2p/go-libp2p-asn-util v0.4.1 h1:xqL7++IKD9TBFMgnLPZR6/6iYhawHKHl950SO9L6n94= -github.com/libp2p/go-libp2p-asn-util v0.4.1/go.mod h1:d/NI6XZ9qxw67b4e+NgpQexCIiFYJjErASrYW4PFDN8= -github.com/libp2p/go-libp2p-testing v0.12.0 h1:EPvBb4kKMWO29qP4mZGyhVzUyR25dvfUIK5WDu6iPUA= -github.com/libp2p/go-libp2p-testing v0.12.0/go.mod h1:KcGDRXyN7sQCllucn1cOOS+Dmm7ujhfEyXQL5lvkcPg= -github.com/libp2p/go-msgio v0.3.0 h1:mf3Z8B1xcFN314sWX+2vOTShIE0Mmn2TXn3YCUQGNj0= -github.com/libp2p/go-msgio v0.3.0/go.mod h1:nyRM819GmVaF9LX3l03RMh10QdOroF++NBbxAb0mmDM= -github.com/libp2p/go-netroute v0.3.0 h1:nqPCXHmeNmgTJnktosJ/sIef9hvwYCrsLxXmfNks/oc= -github.com/libp2p/go-netroute v0.3.0/go.mod h1:Nkd5ShYgSMS5MUKy/MU2T57xFoOKvvLR92Lic48LEyA= -github.com/libp2p/go-reuseport v0.4.0 h1:nR5KU7hD0WxXCJbmw7r2rhRYruNRl2koHw8fQscQm2s= -github.com/libp2p/go-reuseport v0.4.0/go.mod h1:ZtI03j/wO5hZVDFo2jKywN6bYKWLOy8Se6DrI2E1cLU= -github.com/libp2p/go-yamux/v5 v5.0.1 h1:f0WoX/bEF2E8SbE4c/k1Mo+/9z0O4oC/hWEA+nfYRSg= -github.com/libp2p/go-yamux/v5 v5.0.1/go.mod h1:en+3cdX51U0ZslwRdRLrvQsdayFt3TSUKvBGErzpWbU= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/linxGnu/grocksdb v1.10.7 h1:fCi4qvZWo04VgFwGWmO8HQJgUVounJBy+C2TMVPU/ho= -github.com/linxGnu/grocksdb v1.10.7/go.mod h1:OLQKZwiKwaJiAVCsOzWKvwiLwfZ5Vz8Md5TYR7t7pM8= -github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= -github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= -github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88 h1:PTw+yKnXcOFCR6+8hHTyWBeQ/P4Nb7dd4/0ohEcWQuM= -github.com/lufia/plan9stats v0.0.0-20260216142805-b3301c5f2a88/go.mod h1:autxFIvghDt3jPTLoqZ9OZ7s9qTGNAWmYCjVFWPX/zg= -github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE= -github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= -github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= -github.com/marcopolo/simnet v0.0.4 h1:50Kx4hS9kFGSRIbrt9xUS3NJX33EyPqHVmpXvaKLqrY= -github.com/marcopolo/simnet v0.0.4/go.mod h1:tfQF1u2DmaB6WHODMtQaLtClEf3a296CKQLq5gAsIS0= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= -github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.21 h1:xYae+lCNBP7QuW4PUnNG61ffM4hVIfm+zUzDuSzYLGs= -github.com/mattn/go-isatty v0.0.21/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.66 h1:FeZXOS3VCVsKnEAd+wBkjMC3D2K+ww66Cq3VnCINuJE= -github.com/miekg/dns v1.1.66/go.mod h1:jGFzBsSNbJw6z1HYut1RKBKHA9PBdxeHrZG8J+gC2WE= -github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8= -github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/highwayhash v1.0.4 h1:asJizugGgchQod2ja9NJlGOWq4s7KsAWr5XUc9Clgl4= -github.com/minio/highwayhash v1.0.4/go.mod h1:GGYsuwP/fPD6Y9hMiXuapVvlIUEhFhMTh0rxU3ik1LQ= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= -github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/moby/sys/user v0.4.0 h1:jhcMKit7SA80hivmFJcbB1vqmw//wU61Zdui2eQXuMs= -github.com/moby/sys/user v0.4.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1 h1:mPMvm6X6tf4w8y7j9YIt6V9jfWhL6QlbEc7CCmeQlWk= -github.com/mostynb/zstdpool-freelist v0.0.0-20201229113212-927304c0c3b1/go.mod h1:ye2e/VUEtE2BHE+G/QcKkcLQVAEJoYRFj5VUOQatCRE= -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mschoch/smat v0.2.0 h1:8imxQsjDm8yFEAVBe7azKmKSgzSkZXDuKkSq9374khM= -github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw= -github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= -github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= -github.com/multiformats/go-base32 v0.1.0 h1:pVx9xoSPqEIQG8o+UbAe7DNi51oej1NtK+aGkbLYxPE= -github.com/multiformats/go-base32 v0.1.0/go.mod h1:Kj3tFY6zNr+ABYMqeUNeGvkIC/UYgtWibDcT0rExnbI= -github.com/multiformats/go-base36 v0.2.0 h1:lFsAbNOGeKtuKozrtBsAkSVhv1p9D0/qedU9rQyccr0= -github.com/multiformats/go-base36 v0.2.0/go.mod h1:qvnKE++v+2MWCfePClUEjE78Z7P2a1UV0xHgWc0hkp4= -github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= -github.com/multiformats/go-multiaddr v0.16.1 h1:fgJ0Pitow+wWXzN9do+1b8Pyjmo8m5WhGfzpL82MpCw= -github.com/multiformats/go-multiaddr v0.16.1/go.mod h1:JSVUmXDjsVFiW7RjIFMP7+Ev+h1DTbiJgVeTV/tcmP0= -github.com/multiformats/go-multiaddr-dns v0.4.1 h1:whi/uCLbDS3mSEUMb1MsoT4uzUeZB0N32yzufqS0i5M= -github.com/multiformats/go-multiaddr-dns v0.4.1/go.mod h1:7hfthtB4E4pQwirrz+J0CcDUfbWzTqEzVyYKKIKpgkc= -github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= -github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= -github.com/multiformats/go-multibase v0.2.0 h1:isdYCVLvksgWlMW9OZRYJEa9pZETFivncJHmHnnd87g= -github.com/multiformats/go-multibase v0.2.0/go.mod h1:bFBZX4lKCA/2lyOFSAoKH5SS6oPyjtnzK/XTFDPkNuk= -github.com/multiformats/go-multicodec v0.9.1 h1:x/Fuxr7ZuR4jJV4Os5g444F7xC4XmyUaT/FWtE+9Zjo= -github.com/multiformats/go-multicodec v0.9.1/go.mod h1:LLWNMtyV5ithSBUo3vFIMaeDy+h3EbkMTek1m+Fybbo= -github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.2.3 h1:7Lyc8XfX/IY2jWb/gI7JP+o7JEq9hOa7BFvVU9RSh+U= -github.com/multiformats/go-multihash v0.2.3/go.mod h1:dXgKXCXjBzdscBLk9JkjINiEsCKRVch90MdaGiKsvSM= -github.com/multiformats/go-multistream v0.6.1 h1:4aoX5v6T+yWmc2raBHsTvzmFhOI8WVOer28DeBBEYdQ= -github.com/multiformats/go-multistream v0.6.1/go.mod h1:ksQf6kqHAb6zIsyw7Zm+gAuVo57Qbq84E27YlYqavqw= -github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8= -github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oasisprotocol/curve25519-voi v0.0.0-20251114093237-2ab5a27a1729 h1:yfQ2sO9WJXUAIUR+g7NUkxJSKCAFJcR5sUDu+ZmjTZI= -github.com/oasisprotocol/curve25519-voi v0.0.0-20251114093237-2ab5a27a1729/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s= -github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/oklog/run v1.2.0 h1:O8x3yXwah4A73hJdlrwo/2X6J62gE5qTMusH0dvz60E= -github.com/oklog/run v1.2.0/go.mod h1:mgDbKRSwPhJfesJ4PntqFUbKQRZ50NgmZTSPlFA0YFk= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= -github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= -github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= -github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= -github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= -github.com/opencontainers/runc v1.2.8 h1:RnEICeDReapbZ5lZEgHvj7E9Q3Eex9toYmaGBsbvU5Q= -github.com/opencontainers/runc v1.2.8/go.mod h1:cC0YkmZcuvr+rtBZ6T7NBoVbMGNAdLa/21vIElJDOzI= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= -github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= -github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= -github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= -github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= -github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/petermattis/goid v0.0.0-20250813065127-a731cc31b4fe/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/petermattis/goid v0.0.0-20260113132338-7c7de50cc741 h1:KPpdlQLZcHfTMQRi6bFQ7ogNO0ltFT4PmtwTLW4W+14= -github.com/petermattis/goid v0.0.0-20260113132338-7c7de50cc741/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= -github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= -github.com/pion/datachannel v1.5.10 h1:ly0Q26K1i6ZkGf42W7D4hQYR90pZwzFOjTq5AuCKk4o= -github.com/pion/datachannel v1.5.10/go.mod h1:p/jJfC9arb29W7WrxyKbepTU20CFgyx5oLo8Rs4Py/M= -github.com/pion/dtls/v2 v2.2.7/go.mod h1:8WiMkebSHFD0T+dIU+UeBaoV7kDhOW5oDCzZ7WZ/F9s= -github.com/pion/dtls/v2 v2.2.12 h1:KP7H5/c1EiVAAKUmXyCzPiQe5+bCJrpOeKg/L05dunk= -github.com/pion/dtls/v2 v2.2.12/go.mod h1:d9SYc9fch0CqK90mRk1dC7AkzzpwJj6u2GU3u+9pqFE= -github.com/pion/dtls/v3 v3.1.2 h1:gqEdOUXLtCGW+afsBLO0LtDD8GnuBBjEy6HRtyofZTc= -github.com/pion/dtls/v3 v3.1.2/go.mod h1:Hw/igcX4pdY69z1Hgv5x7wJFrUkdgHwAn/Q/uo7YHRo= -github.com/pion/ice/v4 v4.0.10 h1:P59w1iauC/wPk9PdY8Vjl4fOFL5B+USq1+xbDcN6gT4= -github.com/pion/ice/v4 v4.0.10/go.mod h1:y3M18aPhIxLlcO/4dn9X8LzLLSma84cx6emMSu14FGw= -github.com/pion/interceptor v0.1.40 h1:e0BjnPcGpr2CFQgKhrQisBU7V3GXK6wrfYrGYaU6Jq4= -github.com/pion/interceptor v0.1.40/go.mod h1:Z6kqH7M/FYirg3frjGJ21VLSRJGBXB/KqaTIrdqnOic= -github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= -github.com/pion/logging v0.2.4 h1:tTew+7cmQ+Mc1pTBLKH2puKsOvhm32dROumOZ655zB8= -github.com/pion/logging v0.2.4/go.mod h1:DffhXTKYdNZU+KtJ5pyQDjvOAh/GsNSyv1lbkFbe3so= -github.com/pion/mdns/v2 v2.0.7 h1:c9kM8ewCgjslaAmicYMFQIde2H9/lrZpjBkN8VwoVtM= -github.com/pion/mdns/v2 v2.0.7/go.mod h1:vAdSYNAT0Jy3Ru0zl2YiW3Rm/fJCwIeM0nToenfOJKA= -github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= -github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= -github.com/pion/rtcp v1.2.15 h1:LZQi2JbdipLOj4eBjK4wlVoQWfrZbh3Q6eHtWtJBZBo= -github.com/pion/rtcp v1.2.15/go.mod h1:jlGuAjHMEXwMUHK78RgX0UmEJFV4zUKOFHR7OP+D3D0= -github.com/pion/rtp v1.8.19 h1:jhdO/3XhL/aKm/wARFVmvTfq0lC/CvN1xwYKmduly3c= -github.com/pion/rtp v1.8.19/go.mod h1:bAu2UFKScgzyFqvUKmbvzSdPr+NGbZtv6UB2hesqXBk= -github.com/pion/sctp v1.8.39 h1:PJma40vRHa3UTO3C4MyeJDQ+KIobVYRZQZ0Nt7SjQnE= -github.com/pion/sctp v1.8.39/go.mod h1:cNiLdchXra8fHQwmIoqw0MbLLMs+f7uQ+dGMG2gWebE= -github.com/pion/sdp/v3 v3.0.13 h1:uN3SS2b+QDZnWXgdr69SM8KB4EbcnPnPf2Laxhty/l4= -github.com/pion/sdp/v3 v3.0.13/go.mod h1:88GMahN5xnScv1hIMTqLdu/cOcUkj6a9ytbncwMCq2E= -github.com/pion/srtp/v3 v3.0.6 h1:E2gyj1f5X10sB/qILUGIkL4C2CqK269Xq167PbGCc/4= -github.com/pion/srtp/v3 v3.0.6/go.mod h1:BxvziG3v/armJHAaJ87euvkhHqWe9I7iiOy50K2QkhY= -github.com/pion/stun v0.6.1 h1:8lp6YejULeHBF8NmV8e2787BogQhduZugh5PdhDyyN4= -github.com/pion/stun v0.6.1/go.mod h1:/hO7APkX4hZKu/D0f2lHzNyvdkTGtIy3NDmLR7kSz/8= -github.com/pion/stun/v3 v3.0.0 h1:4h1gwhWLWuZWOJIJR9s2ferRO+W3zA/b6ijOI6mKzUw= -github.com/pion/stun/v3 v3.0.0/go.mod h1:HvCN8txt8mwi4FBvS3EmDghW6aQJ24T+y+1TKjB5jyU= -github.com/pion/transport/v2 v2.2.1/go.mod h1:cXXWavvCnFF6McHTft3DWS9iic2Mftcz1Aq29pGcU5g= -github.com/pion/transport/v2 v2.2.4/go.mod h1:q2U/tf9FEfnSBGSW6w5Qp5PFWRLRj3NjLhCCgpRK4p0= -github.com/pion/transport/v2 v2.2.10 h1:ucLBLE8nuxiHfvkFKnkDQRYWYfp8ejf4YBOPfaQpw6Q= -github.com/pion/transport/v2 v2.2.10/go.mod h1:sq1kSLWs+cHW9E+2fJP95QudkzbK7wscs8yYgQToO5E= -github.com/pion/transport/v3 v3.0.7 h1:iRbMH05BzSNwhILHoBoAPxoB9xQgOaJk+591KC9P1o0= -github.com/pion/transport/v3 v3.0.7/go.mod h1:YleKiTZ4vqNxVwh77Z0zytYi7rXHl7j6uPLGhhz9rwo= -github.com/pion/transport/v4 v4.0.1 h1:sdROELU6BZ63Ab7FrOLn13M6YdJLY20wldXW2Cu2k8o= -github.com/pion/transport/v4 v4.0.1/go.mod h1:nEuEA4AD5lPdcIegQDpVLgNoDGreqM/YqmEx3ovP4jM= -github.com/pion/turn/v4 v4.0.2 h1:ZqgQ3+MjP32ug30xAbD6Mn+/K4Sxi3SdNOTFf+7mpps= -github.com/pion/turn/v4 v4.0.2/go.mod h1:pMMKP/ieNAG/fN5cZiN4SDuyKsXtNTr0ccN7IToA1zs= -github.com/pion/webrtc/v4 v4.1.2 h1:mpuUo/EJ1zMNKGE79fAdYNFZBX790KE7kQQpLMjjR54= -github.com/pion/webrtc/v4 v4.1.2/go.mod h1:xsCXiNAmMEjIdFxAYU0MbB3RwRieJsegSB2JZsGN+8U= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= -github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU= -github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= -github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= -github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= -github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.67.5 h1:pIgK94WWlQt1WLwAC5j2ynLaBRDiinoAb86HZHTUGI4= -github.com/prometheus/common v0.67.5/go.mod h1:SjE/0MzDEEAyrdr5Gqc6G+sXI67maCxzaT3A2+HqjUw= -github.com/prometheus/otlptranslator v1.0.0 h1:s0LJW/iN9dkIH+EnhiD3BlkkP5QVIUVEoIwkU+A6qos= -github.com/prometheus/otlptranslator v1.0.0/go.mod h1:vRYWnXvI6aWGpsdY/mOT/cbeVRBlPWtBNDb7kGR3uKM= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.20.1 h1:XwbrGOIplXW/AU3YhIhLODXMJYyC1isLFfYCsTEycfc= -github.com/prometheus/procfs v0.20.1/go.mod h1:o9EMBZGRyvDrSPH1RqdxhojkuXstoe4UlK79eF5TGGo= -github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8= -github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII= -github.com/quic-go/quic-go v0.59.0 h1:OLJkp1Mlm/aS7dpKgTc6cnpynnD2Xg7C1pwL6vy/SAw= -github.com/quic-go/quic-go v0.59.0/go.mod h1:upnsH4Ju1YkqpLXC305eW3yDZ4NfnNbmQRCMWS58IKU= -github.com/quic-go/webtransport-go v0.10.0 h1:LqXXPOXuETY5Xe8ITdGisBzTYmUOy5eSj+9n4hLTjHI= -github.com/quic-go/webtransport-go v0.10.0/go.mod h1:LeGIXr5BQKE3UsynwVBeQrU1TPrbh73MGoC6jd+V7ow= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9 h1:bsUq1dX0N8AOIL7EB/X911+m4EHsnWEHeJ0c+3TTBrg= -github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= -github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= -github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= -github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/zerolog v1.35.0 h1:VD0ykx7HMiMJytqINBsKcbLS+BJ4WYjz+05us+LRTdI= -github.com/rs/zerolog v1.35.0/go.mod h1:EjML9kdfa/RMA7h/6z6pYmq1ykOuA8/mjWaEvGI+jcw= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc= -github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sasha-s/go-deadlock v0.3.7 h1:i3KnHMAptD/cZ8JmDXQnD44luuRbOn+CFeXGnLnf+YU= -github.com/sasha-s/go-deadlock v0.3.7/go.mod h1:KuZj51ZFmx42q/mPaYbRk0P1xcwe697zsJKE03vD4/Y= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/shirou/gopsutil/v4 v4.26.3 h1:2ESdQt90yU3oXF/CdOlRCJxrP+Am1aBYubTMTfxJ1qc= -github.com/shirou/gopsutil/v4 v4.26.3/go.mod h1:LZ6ewCSkBqUpvSOf+LsTGnRinC6iaNUNMGBtDkJBaLQ= -github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= -github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= -github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw= -github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= -github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg= -github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY= -github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v1.10.2 h1:DMTTonx5m65Ic0GOoRY2c16WCbHxOOw6xxezuLaBpcU= -github.com/spf13/cobra v1.10.2/go.mod h1:7C1pvHqHw5A4vrJfjNwvOdzYu0Gml16OCs2GRiTUUS4= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= -github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU= -github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY= -github.com/spiffe/go-spiffe/v2 v2.6.0 h1:l+DolpxNWYgruGQVV0xsfeya3CsC7m8iBzDnMpsbLuo= -github.com/spiffe/go-spiffe/v2 v2.6.0/go.mod h1:gm2SeUoMZEtpnzPNs2Csc0D/gX33k1xIx7lEzqblHEs= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/streamingfast/logging v0.0.0-20230608130331-f22c91403091/go.mod h1:VlduQ80JcGJSargkRU4Sg9Xo63wZD/l8A5NC/Uo1/uU= -github.com/streamingfast/logging v0.0.0-20250404134358-92b15d2fbd2e h1:qGVGDR2/bXLyR498un1hvhDQPUJ/m14JBRTJz+c67Bc= -github.com/streamingfast/logging v0.0.0-20250404134358-92b15d2fbd2e/go.mod h1:VlduQ80JcGJSargkRU4Sg9Xo63wZD/l8A5NC/Uo1/uU= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= -github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= -github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= -github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= -github.com/supranational/blst v0.3.16 h1:bTDadT+3fK497EvLdWRQEjiGnUtzJ7jjIUMF0jqwYhE= -github.com/supranational/blst v0.3.16/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= -github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= -github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= -github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= -github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/test-go/testify v1.1.4 h1:Tf9lntrKUMHiXQ07qBScBTSA0dhYQlu83hswqelv1iE= -github.com/test-go/testify v1.1.4/go.mod h1:rH7cfJo/47vWGdi4GPj16x3/t1xGOj2YxzmNQzk2ghU= -github.com/tidwall/btree v1.8.1 h1:27ehoXvm5AG/g+1VxLS1SD3vRhp/H7LuEfwNvddEdmA= -github.com/tidwall/btree v1.8.1/go.mod h1:jBbTdUWhSZClZWoDg54VnvV7/54modSOzDN7VXftj1A= -github.com/tklauser/go-sysconf v0.3.16 h1:frioLaCQSsF5Cy1jgRBrzr6t502KIIwQ0MArYICU0nA= -github.com/tklauser/go-sysconf v0.3.16/go.mod h1:/qNL9xxDhc7tx3HSRsLWNnuzbVfh3e7gh/BmM179nYI= -github.com/tklauser/numcpus v0.11.0 h1:nSTwhKH5e1dMNsCdVBukSZrURJRoHbSEQjdEbY+9RXw= -github.com/tklauser/numcpus v0.11.0/go.mod h1:z+LwcLq54uWZTX0u/bGobaV34u6V7KNlTZejzM6/3MQ= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= -github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= -github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY= -github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/wlynxg/anet v0.0.3/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= -github.com/wlynxg/anet v0.0.5 h1:J3VJGi1gvo0JwZ/P1/Yc/8p63SoW98B5dHkYDmpgvvU= -github.com/wlynxg/anet v0.0.5/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= -github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -github.com/zondax/golem v0.27.0 h1:IbBjGIXF3SoGOZHsILJvIM/F/ylwJzMcHAcggiqniPw= -github.com/zondax/golem v0.27.0/go.mod h1:AmorCgJPt00L8xN1VrMBe13PSifoZksnQ1Ge906bu4A= -github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= -github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -github.com/zondax/ledger-go v1.0.1 h1:Ks/2tz/dOF+dbRynfZ0dEhcdL1lqw43Sa0zMXHpQ3aQ= -github.com/zondax/ledger-go v1.0.1/go.mod h1:j7IgMY39f30apthJYMd1YsHZRqdyu4KbVmUp0nU78X0= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.4.3 h1:dEadXpI6G79deX5prL3QRNP6JB8UxVkqo4UPnHaNXJo= -go.etcd.io/bbolt v1.4.3/go.mod h1:tKQlpPaYCVFctUIgFKFnAlvbmB3tpy1vkTnDWohtc0E= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.mongodb.org/mongo-driver/v2 v2.5.0 h1:yXUhImUjjAInNcpTcAlPHiT7bIXhshCTL3jVBkF3xaE= -go.mongodb.org/mongo-driver/v2 v2.5.0/go.mod h1:yOI9kBsufol30iFsl1slpdq1I0eHPzybRWdyYUs8K/0= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= -go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/contrib/bridges/otelslog v0.17.0 h1:NFIS6x7wyObQ7cR84x7bt1sr8nYBx89s3x3GwRjw40k= -go.opentelemetry.io/contrib/bridges/otelslog v0.17.0/go.mod h1:39SaByOyDMRMe872AE7uelMuQZidIw7LLFAnQi0FWTE= -go.opentelemetry.io/contrib/detectors/gcp v1.43.0 h1:62yY3dT7/ShwOxzA0RsKRgshBmfElKI4d/Myu2OxDFU= -go.opentelemetry.io/contrib/detectors/gcp v1.43.0/go.mod h1:RyaZMFY7yi1kAs45S6mbFGz8O8rqB0dTY14uzvG4LCs= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 h1:0Qx7VGBacMm9ZENQ7TnNObTYI4ShC+lHI16seduaxZo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0/go.mod h1:Sje3i3MjSPKTSPvVWCaL8ugBzJwik3u4smCjUeuupqg= -go.opentelemetry.io/contrib/instrumentation/host v0.67.0 h1:TBZlpWERGQYejjjxOCaul34rx1gM8Dc3erQH3DDe1ng= -go.opentelemetry.io/contrib/instrumentation/host v0.67.0/go.mod h1:gY4HjuF4CJmklxYjdJNH3wxBlAehJfX/g/vQo+kL0TU= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 h1:CqXxU8VOmDefoh0+ztfGaymYbhdB/tT3zs79QaZTNGY= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0/go.mod h1:BuhAPThV8PBHBvg8ZzZ/Ok3idOdhWIodywz2xEcRbJo= -go.opentelemetry.io/contrib/instrumentation/runtime v0.67.0 h1:fM78cKITJ2r08cl+nw5i+hI9zWAu3iak8o1Os/ca2Ck= -go.opentelemetry.io/contrib/instrumentation/runtime v0.67.0/go.mod h1:ybmlzIqGcQzwt5lAfi8TpSnHo/CI3yv1Czodmm+OJa8= -go.opentelemetry.io/contrib/otelconf v0.22.0 h1:+kpcfczGOFM85zDZyqQCzWefhovegfn24D0WwmQz0n4= -go.opentelemetry.io/contrib/otelconf v0.22.0/go.mod h1:ojdbOukO+JRDJQmJY2PRIZEg0UYVzcOuZR59hp7xffc= -go.opentelemetry.io/contrib/propagators/autoprop v0.67.0 h1:XhcQRf4MeqwQw96FcnatDAj6gwE19SUrWZ1VwNg77iE= -go.opentelemetry.io/contrib/propagators/autoprop v0.67.0/go.mod h1:7OK06SuNIBIlc5Uq3JGQEsKHuXw29t9OJemvDYyP1dk= -go.opentelemetry.io/contrib/propagators/aws v1.42.0 h1:Kbr3xDxs6kcxp5ThXTKWK2OtwLhNoXBVtqguNYcsZL0= -go.opentelemetry.io/contrib/propagators/aws v1.42.0/go.mod h1:Jzw9hZHtxdpCN7x8S17UH59X/EiFivp6VXLs9bdM1OQ= -go.opentelemetry.io/contrib/propagators/b3 v1.42.0 h1:B2Pew5ufEtgkjLF+tSkXjgYZXQr9m7aCm1wLKB0URbU= -go.opentelemetry.io/contrib/propagators/b3 v1.42.0/go.mod h1:iPgUcSEF5DORW6+yNbdw/YevUy+QqJ508ncjhrRSCjc= -go.opentelemetry.io/contrib/propagators/jaeger v1.42.0 h1:jP8unWI6q5kcb3gpGLjKDGaUa+JW+nHKWvpS/q+YuWA= -go.opentelemetry.io/contrib/propagators/jaeger v1.42.0/go.mod h1:xd89e/pUyPatUP1C4z1UknD9jHptESO99tWyvd4mWD4= -go.opentelemetry.io/contrib/propagators/ot v1.42.0 h1:uQjD1NNqX1+DfcAoWParPt1egNg9vC9gH4xarJ9Khxo= -go.opentelemetry.io/contrib/propagators/ot v1.42.0/go.mod h1:yw/c2TCmQLIv109HBOCn6NlJ8Dp7MNfjMcqQZRnAMmg= -go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= -go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.18.0 h1:deI9UQMoGFgrg5iLPgzueqFPHevDl+28YKfSpPTI6rY= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.18.0/go.mod h1:PFx9NgpNUKXdf7J4Q3agRxMs3Y07QhTCVipKmLsMKnU= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.18.0 h1:icqq3Z34UrEFk2u+HMhTtRsvo7Ues+eiJVjaJt62njs= -go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.18.0/go.mod h1:W2m8P+d5Wn5kipj4/xmbt9uMqezEKfBjzVJadfABSBE= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.42.0 h1:MdKucPl/HbzckWWEisiNqMPhRrAOQX8r4jTuGr636gk= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.42.0/go.mod h1:RolT8tWtfHcjajEH5wFIZ4Dgh5jpPdFXYV9pTAk/qjc= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.42.0 h1:H7O6RlGOMTizyl3R08Kn5pdM06bnH8oscSj7o11tmLA= -go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.42.0/go.mod h1:mBFWu/WOVDkWWsR7Tx7h6EpQB8wsv7P0Yrh0Pb7othc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 h1:THuZiwpQZuHPul65w4WcwEnkX2QIuMT+UFoOrygtoJw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0/go.mod h1:J2pvYM5NGHofZ2/Ru6zw/TNWnEQp5crgyDeSrYpXkAw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 h1:zWWrB1U6nqhS/k6zYB74CjRpuiitRtLLi68VcgmOEto= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0/go.mod h1:2qXPNBX1OVRC0IwOnfo1ljoid+RD0QK3443EaqVlsOU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.42.0 h1:uLXP+3mghfMf7XmV4PkGfFhFKuNWoCvvx5wP/wOXo0o= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.42.0/go.mod h1:v0Tj04armyT59mnURNUJf7RCKcKzq+lgJs6QSjHjaTc= -go.opentelemetry.io/otel/exporters/prometheus v0.64.0 h1:g0LRDXMX/G1SEZtK8zl8Chm4K6GBwRkjPKE36LxiTYs= -go.opentelemetry.io/otel/exporters/prometheus v0.64.0/go.mod h1:UrgcjnarfdlBDP3GjDIJWe6HTprwSazNjwsI+Ru6hro= -go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.18.0 h1:KJVjPD3rcPb98rIs3HznyJlrfx9ge5oJvxxlGR+P/7s= -go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.18.0/go.mod h1:K3kRa2ckmHWQaTWQdPRHc7qGXASuVuoEQXzrvlA98Ws= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0 h1:TC+BewnDpeiAmcscXbGMfxkO+mwYUwE/VySwvw88PfA= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0/go.mod h1:J/ZyF4vfPwsSr9xJSPyQ4LqtcTPULFR64KwTikGLe+A= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.42.0 h1:s/1iRkCKDfhlh1JF26knRneorus8aOwVIDhvYx9WoDw= -go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.42.0/go.mod h1:UI3wi0FXg1Pofb8ZBiBLhtMzgoTm1TYkMvn71fAqDzs= -go.opentelemetry.io/otel/log v0.19.0 h1:KUZs/GOsw79TBBMfDWsXS+KZ4g2Ckzksd1ymzsIEbo4= -go.opentelemetry.io/otel/log v0.19.0/go.mod h1:5DQYeGmxVIr4n0/BcJvF4upsraHjg6vudJJpnkL6Ipk= -go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= -go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= -go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= -go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= -go.opentelemetry.io/otel/sdk/log v0.18.0 h1:n8OyZr7t7otkeTnPTbDNom6rW16TBYGtvyy2Gk6buQw= -go.opentelemetry.io/otel/sdk/log v0.18.0/go.mod h1:C0+wxkTwKpOCZLrlJ3pewPiiQwpzycPI/u6W0Z9fuYk= -go.opentelemetry.io/otel/sdk/log/logtest v0.18.0 h1:l3mYuPsuBx6UKE47BVcPrZoZ0q/KER57vbj2qkgDLXA= -go.opentelemetry.io/otel/sdk/log/logtest v0.18.0/go.mod h1:7cHtiVJpZebB3wybTa4NG+FUo5NPe3PROz1FqB0+qdw= -go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= -go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= -go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= -go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= -go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/dig v1.19.0 h1:BACLhebsYdpQ7IROQ1AGPjrXcP5dF80U3gKoFzbaq/4= -go.uber.org/dig v1.19.0/go.mod h1:Us0rSJiThwCv2GteUN0Q7OKvU7n5J4dxZ9JKUXozFdE= -go.uber.org/fx v1.24.0 h1:wE8mruvpg2kiiL1Vqd0CC+tr0/24XIB10Iwp2lLWzkg= -go.uber.org/fx v1.24.0/go.mod h1:AmDeGyS+ZARGKM4tlH4FY2Jr63VjbEDJHtqXTGP5hbo= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= -go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y= -go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= -go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= -go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc= -go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ= -go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ= -go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= -go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= -golang.org/x/arch v0.26.0 h1:jZ6dpec5haP/fUv1kLCbuJy6dnRrfX6iVK08lZBFpk4= -golang.org/x/arch v0.26.0/go.mod h1:0X+GdSIP+kL5wPmpK7sdkEVTt2XoYP0cSjQSbZBwOi8= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= -golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= -golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= -golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 h1:jiDhWWeC7jfWqR9c/uplMOqJ0sbNlNWv0UkzE0vX1MA= -golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90/go.mod h1:xE1HEv6b+1SCZ5/uscMRjUBKtIxworgEcEi+/n9NQDQ= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI= -golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= -golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= -golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= -golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= -golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= -golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/telemetry v0.0.0-20260311193753-579e4da9a98c h1:6a8FdnNk6bTXBjR4AGKFgUKuo+7GnR3FX5L7CbveeZc= -golang.org/x/telemetry v0.0.0-20260311193753-579e4da9a98c/go.mod h1:TpUTTEp9frx7rTdLpC9gFG9kdI7zVLFTFFlqaH2Cncw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= -golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= -golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY= -golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= -golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= -golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= -golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= -gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= -google.golang.org/api v0.276.0 h1:nVArUtfLEihtW+b0DdcqRGK1xoEm2+ltAihyztq7MKY= -google.golang.org/api v0.276.0/go.mod h1:Fnag/EWUPIcJXuIkP1pjoTgS5vdxlk3eeemL7Do6bvw= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20260414002931-afd174a4e478 h1:aLsVTW0lZ8+IY5u/ERjZSCvAmhuR7slKzyha3YikDNA= -google.golang.org/genproto v0.0.0-20260414002931-afd174a4e478/go.mod h1:YJAzKjfHIUHb9T+bfu8L7mthAp7VVXQBUs1PLdBWS7M= -google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4 h1:yOzSCGPx+cp5VO7IxvZ9SBFF7j1tZVcNtlHR2iYKtVo= -google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4/go.mod h1:Q9HWtNeE7tM9npdIsEvqXj1QJIvVoeAV3rtXtS715Cw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260420184626-e10c466a9529 h1:XF8+t6QQiS0o9ArVan/HW8Q7cycNPGsJf6GA2nXxYAg= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260420184626-e10c466a9529/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.81.0 h1:W3G9N3KQf3BU+YuCtGKJk0CmxQNbAISICD/9AORxLIw= -google.golang.org/grpc v1.81.0/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= -google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q= -gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -lukechampine.com/blake3 v1.4.1 h1:I3Smz7gso8w4/TunLKec6K2fn+kyKtDxr/xcQEN84Wg= -lukechampine.com/blake3 v1.4.1/go.mod h1:QFosUxmjB8mnrWFSNwKmvxHpfY72bmD2tQ0kBMM3kwo= -nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -nhooyr.io/websocket v1.8.17 h1:KEVeLJkUywCKVsnLIDlD/5gtayKp8VoCkksHCGGfT9Y= -nhooyr.io/websocket v1.8.17/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= -pgregory.net/rapid v1.2.0 h1:keKAYRcjm+e1F0oAuU5F5+YPAWcyxNNRK2wud503Gnk= -pgregory.net/rapid v1.2.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs= -sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/prototypes/proto/buf.gen.gogo.yaml b/prototypes/proto/buf.gen.gogo.yaml deleted file mode 100644 index 9d53ba67a81..00000000000 --- a/prototypes/proto/buf.gen.gogo.yaml +++ /dev/null @@ -1,13 +0,0 @@ -version: v1 -plugins: - - name: gocosmos - out: .. - opt: - - plugins=grpc - - Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types - - Mcosmos/orm/v1/orm.proto=cosmossdk.io/orm - - name: grpc-gateway - out: .. - opt: - - logtostderr=true - - allow_colon_final_segments=true diff --git a/prototypes/proto/buf.lock b/prototypes/proto/buf.lock deleted file mode 100644 index 0a6666c84e5..00000000000 --- a/prototypes/proto/buf.lock +++ /dev/null @@ -1,33 +0,0 @@ -# Generated by buf. DO NOT EDIT. -version: v1 -deps: - - remote: buf.build - owner: cosmos - repository: cosmos-proto - commit: 04467658e59e44bbb22fe568206e1f70 - digest: shake256:73a640bd60e0c523b0f8237ff34eab67c45a38b64bbbde1d80224819d272dbf316ac183526bd245f994af6608b025f5130483d0133c5edd385531326b5990466 - - remote: buf.build - owner: cosmos - repository: cosmos-sdk - commit: 65fa41963e6a41dd95a35934239029df - digest: shake256:f67571e6f86dba07c678908f1734ca5a855416e1ecd903c3ebcae49f93c2a7114cdc64538ee8012cc3bb45e9bfd4345395f43d2ac2c01821ca32e5d734cb4dfd - - remote: buf.build - owner: cosmos - repository: gogo-proto - commit: 88ef6483f90f478fb938c37dde52ece3 - digest: shake256:89c45df2aa11e0cff97b0d695436713db3d993d76792e9f8dc1ae90e6ab9a9bec55503d48ceedd6b86069ab07d3041b32001b2bfe0227fa725dd515ff381e5ba - - remote: buf.build - owner: cosmos - repository: ics23 - commit: dc427cb4519143d8996361c045a29ad7 - digest: shake256:f6611c56170e2cb6354fa6e367a225fed7b8b0defca3252f05e842fe311be46997680ebf57d8644b52c1f2cca49b366ffe89ce5e8db5fd055a15259c88e4e41e - - remote: buf.build - owner: googleapis - repository: googleapis - commit: c17df5b2beca46928cc87d5656bd5343 - digest: shake256:c62ecead9b13485a02893cd678a6c81e40879bf00ea509bbc6fd8f1b2cc33eccf6a85c259b08d1e0f052f693cbfc7dfda236e9665b1d6869b8e1132a794a61e2 - - remote: buf.build - owner: protocolbuffers - repository: wellknowntypes - commit: 9d16d599a978406980f6e2f081331a93 - digest: shake256:946278992baee216f7742401780df3727195ffc068a30e21769c7e808d16ee25e9e48e51f938b6ddbe405abe46c45091a56ad90aac1cad0d809d16cbad889ff1 diff --git a/prototypes/proto/buf.yaml b/prototypes/proto/buf.yaml deleted file mode 100644 index 5671350cf54..00000000000 --- a/prototypes/proto/buf.yaml +++ /dev/null @@ -1,25 +0,0 @@ -version: v1 -deps: - - buf.build/protocolbuffers/wellknowntypes - - buf.build/cosmos/cosmos-sdk - - buf.build/cosmos/cosmos-proto - - buf.build/cosmos/gogo-proto - - buf.build/googleapis/googleapis - - buf.build/cosmos/ics23 -breaking: - use: - - FILE -lint: - use: - - STANDARD - - COMMENTS - - FILE_LOWER_SNAKE_CASE - except: - - UNARY_RPC - - COMMENT_FIELD - - COMMENT_MESSAGE - - SERVICE_SUFFIX - - PACKAGE_VERSION_SUFFIX - - RPC_REQUEST_STANDARD_NAME - - RPC_RESPONSE_STANDARD_NAME - From eeb1c2cc0e988928fa48b07280ae9754399fc7c5 Mon Sep 17 00:00:00 2001 From: Diana Borbe Date: Tue, 5 May 2026 10:22:51 +0200 Subject: [PATCH 08/11] Fix panic: msg name ibc/applications/ift/v1/MsgRegisterIFTBridge is too long to be registered with amino --- modules/apps/prototypes/ift/types/codec.go | 10 +++++----- .../applications/prototypes/tokenfactory/v1/tx.proto | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/modules/apps/prototypes/ift/types/codec.go b/modules/apps/prototypes/ift/types/codec.go index 82a63e1c329..d971b6cd431 100644 --- a/modules/apps/prototypes/ift/types/codec.go +++ b/modules/apps/prototypes/ift/types/codec.go @@ -11,11 +11,11 @@ import ( // RegisterLegacyAminoCodec registers the necessary x/ift interfaces and concrete types // on the provided LegacyAmino codec. These types are used for Amino JSON serialization. func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { - legacy.RegisterAminoMsg(cdc, &MsgRegisterIFTBridge{}, "ibc/applications/ift/v1/MsgRegisterIFTBridge") - legacy.RegisterAminoMsg(cdc, &MsgRemoveIFTBridge{}, "ibc/applications/ift/v1/MsgRemoveIFTBridge") - legacy.RegisterAminoMsg(cdc, &MsgIFTTransfer{}, "ibc/applications/ift/v1/MsgIFTTransfer") - legacy.RegisterAminoMsg(cdc, &MsgIFTMint{}, "ibc/applications/ift/v1/MsgIFTMint") - legacy.RegisterAminoMsg(cdc, &MsgUpdateParams{}, "ibc/applications/ift/v1/MsgUpdateParams") + legacy.RegisterAminoMsg(cdc, &MsgRegisterIFTBridge{}, "ift/MsgRegisterIFTBridge") + legacy.RegisterAminoMsg(cdc, &MsgRemoveIFTBridge{}, "ift/MsgRemoveIFTBridge") + legacy.RegisterAminoMsg(cdc, &MsgIFTTransfer{}, "ift/MsgIFTTransfer") + legacy.RegisterAminoMsg(cdc, &MsgIFTMint{}, "ift/MsgIFTMint") + legacy.RegisterAminoMsg(cdc, &MsgUpdateParams{}, "ift/MsgUpdateParams") } // RegisterInterfaces registers the x/ift interfaces types with the interface registry diff --git a/proto/ibc/applications/prototypes/tokenfactory/v1/tx.proto b/proto/ibc/applications/prototypes/tokenfactory/v1/tx.proto index 7ecf6c25e78..f9ccc4361dc 100644 --- a/proto/ibc/applications/prototypes/tokenfactory/v1/tx.proto +++ b/proto/ibc/applications/prototypes/tokenfactory/v1/tx.proto @@ -32,7 +32,7 @@ service Msg { // MsgCreateDenom is the message for creating a new denom. message MsgCreateDenom { option (cosmos.msg.v1.signer) = "sender"; - option (amino.name) = "ibc/applications/prototypes/tokenfactory/v1/MsgCreateDenom"; + option (amino.name) = "tokenfactory/MsgCreateDenom"; string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; string denom = 2; @@ -44,7 +44,7 @@ message MsgCreateDenomResponse {} // MsgMint is the message for minting new tokens. message MsgMint { option (cosmos.msg.v1.signer) = "from"; - option (amino.name) = "ibc/applications/prototypes/tokenfactory/v1/MsgMint"; + option (amino.name) = "tokenfactory/MsgMint"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; @@ -60,7 +60,7 @@ message MsgMintResponse {} // MsgBurn is the message for burning tokens. message MsgBurn { option (cosmos.msg.v1.signer) = "from"; - option (amino.name) = "ibc/applications/prototypes/tokenfactory/v1/MsgBurn"; + option (amino.name) = "tokenfactory/MsgBurn"; option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; @@ -75,7 +75,7 @@ message MsgBurnResponse {} // MsgChangeAdmin transfers admin authority to a new address. message MsgChangeAdmin { option (cosmos.msg.v1.signer) = "sender"; - option (amino.name) = "ibc/applications/prototypes/tokenfactory/v1/MsgChangeAdmin"; + option (amino.name) = "tokenfactory/MsgChangeAdmin"; string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; string denom = 2; @@ -89,7 +89,7 @@ message MsgChangeAdminResponse {} // After renouncing, no one can mint/burn via MsgMint/MsgBurn. message MsgRenounceAdmin { option (cosmos.msg.v1.signer) = "sender"; - option (amino.name) = "ibc/applications/prototypes/tokenfactory/v1/MsgRenounceAdmin"; + option (amino.name) = "tokenfactory/MsgRenounceAdmin"; string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; string denom = 2; From b60a44cf98d68cfa40048e08720b269be09fa7a4 Mon Sep 17 00:00:00 2001 From: Diana Borbe Date: Tue, 5 May 2026 14:42:07 +0200 Subject: [PATCH 09/11] Fix proto for prototypes --- .../prototypes/ift/v1/genesis.proto | 11 +++-- .../applications/prototypes/ift/v1/ift.proto | 8 ++-- .../prototypes/ift/v1/query.proto | 43 +++++++++++-------- .../applications/prototypes/ift/v1/tx.proto | 30 +++++++------ .../prototypes/tokenfactory/v1/genesis.proto | 9 ++-- .../prototypes/tokenfactory/v1/query.proto | 29 +++++++------ .../tokenfactory/v1/tokenfactory.proto | 2 +- .../prototypes/tokenfactory/v1/tx.proto | 38 ++++++++-------- 8 files changed, 91 insertions(+), 79 deletions(-) diff --git a/proto/ibc/applications/prototypes/ift/v1/genesis.proto b/proto/ibc/applications/prototypes/ift/v1/genesis.proto index af353cc98f2..44bc57d7fcd 100644 --- a/proto/ibc/applications/prototypes/ift/v1/genesis.proto +++ b/proto/ibc/applications/prototypes/ift/v1/genesis.proto @@ -9,16 +9,15 @@ option go_package = "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/ift/ty // GenesisState defines the IFT module's genesis state. message GenesisState { // Module parameters - Params params = 1 [ (gogoproto.nullable) = false ]; + Params params = 1 [(gogoproto.nullable) = false]; // All registered IFT bridges - repeated GenesisBridge bridges = 2 [ (gogoproto.nullable) = false ]; + repeated GenesisBridge bridges = 2 [(gogoproto.nullable) = false]; // All pending transfers - repeated PendingTransfer pending_transfers = 3 - [ (gogoproto.nullable) = false ]; + repeated PendingTransfer pending_transfers = 3 [(gogoproto.nullable) = false]; } // GenesisBridge wraps denom with its bridge configuration message GenesisBridge { - string denom = 1; - IFTBridge bridge = 2 [ (gogoproto.nullable) = false ]; + string denom = 1; + IFTBridge bridge = 2 [(gogoproto.nullable) = false]; } diff --git a/proto/ibc/applications/prototypes/ift/v1/ift.proto b/proto/ibc/applications/prototypes/ift/v1/ift.proto index 8c1a49a7c68..3b0ad646f35 100644 --- a/proto/ibc/applications/prototypes/ift/v1/ift.proto +++ b/proto/ibc/applications/prototypes/ift/v1/ift.proto @@ -31,12 +31,12 @@ message PendingTransfer { // The IBC sequence number associated with the ibc packet uint64 sequence = 3; // The address of the sender who initiated the transfer - string sender = 4 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string sender = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // The amount of tokens involved in the pending transfer string amount = 5 [ - (cosmos_proto.scalar) = "cosmos.Int", + (cosmos_proto.scalar) = "cosmos.Int", (gogoproto.customtype) = "cosmossdk.io/math.Int", - (gogoproto.nullable) = false + (gogoproto.nullable) = false ]; } @@ -44,5 +44,5 @@ message PendingTransfer { message Params { // Authority is the address that can register/remove bridges (typically // governance) - string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; } diff --git a/proto/ibc/applications/prototypes/ift/v1/query.proto b/proto/ibc/applications/prototypes/ift/v1/query.proto index e97153d8a14..e3476bff0c4 100644 --- a/proto/ibc/applications/prototypes/ift/v1/query.proto +++ b/proto/ibc/applications/prototypes/ift/v1/query.proto @@ -21,16 +21,13 @@ service Query { } // IFTBridgesByDenom queries all IFT bridges for a specific denom - rpc IFTBridgesByDenom(QueryIFTBridgesByDenomRequest) - returns (QueryIFTBridgesByDenomResponse) { + rpc IFTBridgesByDenom(QueryIFTBridgesByDenomRequest) returns (QueryIFTBridgesByDenomResponse) { option (google.api.http).get = "/ibc/applications/prototypes/ift/v1/bridges/{denom}"; } // PendingTransfer queries a pending transfer - rpc PendingTransfer(QueryPendingTransferRequest) - returns (QueryPendingTransferResponse) { - option (google.api.http).get = - "/ibc/applications/prototypes/ift/v1/pending/{denom}/{client_id}/{sequence}"; + rpc PendingTransfer(QueryPendingTransferRequest) returns (QueryPendingTransferResponse) { + option (google.api.http).get = "/ibc/applications/prototypes/ift/v1/pending/{denom}/{client_id}/{sequence}"; } // Params queries the module parameters @@ -39,45 +36,57 @@ service Query { } } +// QueryIFTBridgeRequest is the request type for querying an IFT bridge by denom and client ID. message QueryIFTBridgeRequest { - string denom = 1; + string denom = 1; string client_id = 2; } +// QueryIFTBridgeResponse is the response type for the IFTBridge query. message QueryIFTBridgeResponse { - IFTBridge bridge = 1 [ (gogoproto.nullable) = false ]; + IFTBridge bridge = 1 [(gogoproto.nullable) = false]; } +// QueryIFTBridgesRequest is the request type for querying all IFT bridges. message QueryIFTBridgesRequest {} +// QueryIFTBridgesResponse is the response type for the IFTBridges query. message QueryIFTBridgesResponse { - repeated DenomBridge bridges = 1 [ (gogoproto.nullable) = false ]; + repeated DenomBridge bridges = 1 [(gogoproto.nullable) = false]; } -message QueryIFTBridgesByDenomRequest { string denom = 1; } +// QueryIFTBridgesByDenomRequest is the request type for querying all IFT bridges for a specific denom. +message QueryIFTBridgesByDenomRequest { + string denom = 1; +} +// QueryIFTBridgesByDenomResponse is the response type for the IFTBridgesByDenom query. message QueryIFTBridgesByDenomResponse { - repeated IFTBridge bridges = 1 [ (gogoproto.nullable) = false ]; + repeated IFTBridge bridges = 1 [(gogoproto.nullable) = false]; } +// QueryPendingTransferRequest is the request type for querying a pending transfer. message QueryPendingTransferRequest { - string denom = 1; + string denom = 1; string client_id = 2; - uint64 sequence = 3; + uint64 sequence = 3; } +// QueryPendingTransferResponse is the response type for the PendingTransfer query. message QueryPendingTransferResponse { - PendingTransfer pending_transfer = 1 [ (gogoproto.nullable) = false ]; + PendingTransfer pending_transfer = 1 [(gogoproto.nullable) = false]; } +// QueryParamsRequest is the request type for querying module parameters. message QueryParamsRequest {} +// QueryParamsResponse is the response type for the Params query. message QueryParamsResponse { - Params params = 1 [ (gogoproto.nullable) = false ]; + Params params = 1 [(gogoproto.nullable) = false]; } // DenomBridge wraps denom with its bridge info for query responses message DenomBridge { - string denom = 1; - IFTBridge bridge = 2 [ (gogoproto.nullable) = false ]; + string denom = 1; + IFTBridge bridge = 2 [(gogoproto.nullable) = false]; } diff --git a/proto/ibc/applications/prototypes/ift/v1/tx.proto b/proto/ibc/applications/prototypes/ift/v1/tx.proto index 3dade0cf2ba..e329c0151c5 100644 --- a/proto/ibc/applications/prototypes/ift/v1/tx.proto +++ b/proto/ibc/applications/prototypes/ift/v1/tx.proto @@ -13,8 +13,7 @@ service Msg { option (cosmos.msg.v1.service) = true; // RegisterIFTBridge registers a new IBC bridge to a counterparty IFT contract - rpc RegisterIFTBridge(MsgRegisterIFTBridge) - returns (MsgRegisterIFTBridgeResponse); + rpc RegisterIFTBridge(MsgRegisterIFTBridge) returns (MsgRegisterIFTBridgeResponse); // RemoveIFTBridge removes an existing IBC bridge rpc RemoveIFTBridge(MsgRemoveIFTBridge) returns (MsgRemoveIFTBridgeResponse); // IFTTransfer initiates a cross-chain token transfer @@ -31,7 +30,7 @@ message MsgRegisterIFTBridge { option (cosmos.msg.v1.signer) = "signer"; // The address of the signer registering the bridge (must be authority) - string signer = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string signer = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // The denom representing the IFT token on this chain string denom = 2; // The IBC client identifier on the local chain representing the counterparty @@ -46,6 +45,7 @@ message MsgRegisterIFTBridge { string ift_send_call_constructor = 5; } +// MsgRegisterIFTBridgeResponse is the response type for the RegisterIFTBridge RPC method. message MsgRegisterIFTBridgeResponse {} // MsgRemoveIFTBridge removes an existing IBC bridge @@ -53,7 +53,7 @@ message MsgRemoveIFTBridge { option (cosmos.msg.v1.signer) = "signer"; // The address of the signer removing the bridge (must be authority) - string signer = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string signer = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // The denom representing the IFT token on this chain string denom = 2; // The IBC client identifier on the local chain representing the counterparty @@ -61,6 +61,7 @@ message MsgRemoveIFTBridge { string client_id = 3; } +// MsgRemoveIFTBridgeResponse is the response type for the RemoveIFTBridge RPC method. message MsgRemoveIFTBridgeResponse {} // MsgIFTTransfer initiates a cross-chain token transfer @@ -68,7 +69,7 @@ message MsgIFTTransfer { option (cosmos.msg.v1.signer) = "signer"; // The address of the signer initiating the transfer - string signer = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string signer = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // The denom representing the IFT token on this chain string denom = 2; // The IBC client identifier over which the transfer is being made @@ -77,14 +78,15 @@ message MsgIFTTransfer { string receiver = 4; // The amount of tokens to transfer string amount = 5 [ - (cosmos_proto.scalar) = "cosmos.Int", + (cosmos_proto.scalar) = "cosmos.Int", (gogoproto.customtype) = "cosmossdk.io/math.Int", - (gogoproto.nullable) = false + (gogoproto.nullable) = false ]; // The timeout timestamp for the IBC packet (in seconds since epoch) uint64 timeout_timestamp = 6; } +// MsgIFTTransferResponse is the response type for the IFTTransfer RPC method. message MsgIFTTransferResponse { // The sequence number of the IBC packet uint64 sequence = 1; @@ -96,19 +98,20 @@ message MsgIFTMint { // The address of the signer (must be ICS27-GMP account controlled by // counterparty bridge) - string signer = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string signer = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // The denom representing the IFT token on this chain string denom = 2; // The address of the receiver on the local chain - string receiver = 3 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string receiver = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // The amount of tokens to mint string amount = 4 [ - (cosmos_proto.scalar) = "cosmos.Int", + (cosmos_proto.scalar) = "cosmos.Int", (gogoproto.customtype) = "cosmossdk.io/math.Int", - (gogoproto.nullable) = false + (gogoproto.nullable) = false ]; } +// MsgIFTMintResponse is the response type for the IFTMint RPC method. message MsgIFTMintResponse {} // MsgUpdateParams updates the module parameters @@ -116,9 +119,10 @@ message MsgUpdateParams { option (cosmos.msg.v1.signer) = "authority"; // Authority is the address that controls the module (typically governance) - string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; // Params defines the new parameters to set - Params params = 2 [ (gogoproto.nullable) = false ]; + Params params = 2 [(gogoproto.nullable) = false]; } +// MsgUpdateParamsResponse is the response type for the UpdateParams RPC method. message MsgUpdateParamsResponse {} diff --git a/proto/ibc/applications/prototypes/tokenfactory/v1/genesis.proto b/proto/ibc/applications/prototypes/tokenfactory/v1/genesis.proto index bb0f3ee6660..e875e8e1bbf 100644 --- a/proto/ibc/applications/prototypes/tokenfactory/v1/genesis.proto +++ b/proto/ibc/applications/prototypes/tokenfactory/v1/genesis.proto @@ -8,13 +8,12 @@ option go_package = "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/tokenf // GenesisState defines the tokenfactory module's genesis state. message GenesisState { - Params params = 1 [ (gogoproto.nullable) = false ]; - repeated GenesisDenom factory_denoms = 2 [ (gogoproto.nullable) = false ]; + Params params = 1 [(gogoproto.nullable) = false]; + repeated GenesisDenom factory_denoms = 2 [(gogoproto.nullable) = false]; } // GenesisDenom defines a genesis denom for the tokenfactory module. message GenesisDenom { - string denom = 1; - DenomAuthorityMetadata authority_metadata = 2 - [ (gogoproto.nullable) = false ]; + string denom = 1; + DenomAuthorityMetadata authority_metadata = 2 [(gogoproto.nullable) = false]; } diff --git a/proto/ibc/applications/prototypes/tokenfactory/v1/query.proto b/proto/ibc/applications/prototypes/tokenfactory/v1/query.proto index 242f4b1ae06..fa8d7a4a693 100644 --- a/proto/ibc/applications/prototypes/tokenfactory/v1/query.proto +++ b/proto/ibc/applications/prototypes/tokenfactory/v1/query.proto @@ -10,17 +10,13 @@ option go_package = "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/tokenf // Query defines the gRPC querier service. service Query { // DenomAuthorityMetadata queries the authority metadata for a denom. - rpc DenomAuthorityMetadata(QueryDenomAuthorityMetadataRequest) - returns (QueryDenomAuthorityMetadataResponse) { - option (google.api.http).get = - "/ibc/applications/prototypes/tokenfactory/v1/denoms/{denom}/authority_metadata"; + rpc DenomAuthorityMetadata(QueryDenomAuthorityMetadataRequest) returns (QueryDenomAuthorityMetadataResponse) { + option (google.api.http).get = "/ibc/applications/prototypes/tokenfactory/v1/denoms/{denom}/authority_metadata"; } // DenomsByCreator queries all denoms created by a specific address. - rpc DenomsByCreator(QueryDenomsByCreatorRequest) - returns (QueryDenomsByCreatorResponse) { - option (google.api.http).get = - "/ibc/applications/prototypes/tokenfactory/v1/creators/{creator}/denoms"; + rpc DenomsByCreator(QueryDenomsByCreatorRequest) returns (QueryDenomsByCreatorResponse) { + option (google.api.http).get = "/ibc/applications/prototypes/tokenfactory/v1/creators/{creator}/denoms"; } // Params queries the parameters of the tokenfactory module. @@ -31,27 +27,32 @@ service Query { // QueryDenomAuthorityMetadataRequest is the request type for the // Query/DenomAuthorityMetadata RPC method. -message QueryDenomAuthorityMetadataRequest { string denom = 1; } +message QueryDenomAuthorityMetadataRequest { + string denom = 1; +} // QueryDenomAuthorityMetadataResponse is the response type for the // Query/DenomAuthorityMetadata RPC method. message QueryDenomAuthorityMetadataResponse { - DenomAuthorityMetadata authority_metadata = 1 - [ (gogoproto.nullable) = false ]; + DenomAuthorityMetadata authority_metadata = 1 [(gogoproto.nullable) = false]; } // QueryDenomsByCreatorRequest is the request type for the // Query/DenomsByCreator RPC method. -message QueryDenomsByCreatorRequest { string creator = 1; } +message QueryDenomsByCreatorRequest { + string creator = 1; +} // QueryDenomsByCreatorResponse is the response type for the // Query/DenomsByCreator RPC method. -message QueryDenomsByCreatorResponse { repeated string denoms = 1; } +message QueryDenomsByCreatorResponse { + repeated string denoms = 1; +} // QueryParamsRequest is the request type for the Query/Params RPC method. message QueryParamsRequest {} // QueryParamsResponse is the response type for the Query/Params RPC method. message QueryParamsResponse { - Params params = 1 [ (gogoproto.nullable) = false ]; + Params params = 1 [(gogoproto.nullable) = false]; } diff --git a/proto/ibc/applications/prototypes/tokenfactory/v1/tokenfactory.proto b/proto/ibc/applications/prototypes/tokenfactory/v1/tokenfactory.proto index b86f990dede..491ba2a9734 100644 --- a/proto/ibc/applications/prototypes/tokenfactory/v1/tokenfactory.proto +++ b/proto/ibc/applications/prototypes/tokenfactory/v1/tokenfactory.proto @@ -10,5 +10,5 @@ message Params {} // DenomAuthorityMetadata defines the authority metadata for a denom. message DenomAuthorityMetadata { - string admin = 1 [ (amino.dont_omitempty) = true ]; + string admin = 1 [(amino.dont_omitempty) = true]; } diff --git a/proto/ibc/applications/prototypes/tokenfactory/v1/tx.proto b/proto/ibc/applications/prototypes/tokenfactory/v1/tx.proto index f9ccc4361dc..91bb4e7ce4e 100644 --- a/proto/ibc/applications/prototypes/tokenfactory/v1/tx.proto +++ b/proto/ibc/applications/prototypes/tokenfactory/v1/tx.proto @@ -32,10 +32,10 @@ service Msg { // MsgCreateDenom is the message for creating a new denom. message MsgCreateDenom { option (cosmos.msg.v1.signer) = "sender"; - option (amino.name) = "tokenfactory/MsgCreateDenom"; + option (amino.name) = "tokenfactory/MsgCreateDenom"; - string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; - string denom = 2; + string sender = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string denom = 2; } // MsgCreateDenomResponse is the response for creating a new denom. @@ -44,14 +44,14 @@ message MsgCreateDenomResponse {} // MsgMint is the message for minting new tokens. message MsgMint { option (cosmos.msg.v1.signer) = "from"; - option (amino.name) = "tokenfactory/MsgMint"; + option (amino.name) = "tokenfactory/MsgMint"; - option (gogoproto.equal) = false; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; - string from = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; - string address = 2 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; - cosmos.base.v1beta1.Coin amount = 3 [ (gogoproto.nullable) = false ]; + string from = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false]; } // MsgMintResponse is the response for minting new tokens. @@ -60,13 +60,13 @@ message MsgMintResponse {} // MsgBurn is the message for burning tokens. message MsgBurn { option (cosmos.msg.v1.signer) = "from"; - option (amino.name) = "tokenfactory/MsgBurn"; + option (amino.name) = "tokenfactory/MsgBurn"; - option (gogoproto.equal) = false; + option (gogoproto.equal) = false; option (gogoproto.goproto_getters) = false; - string from = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; - cosmos.base.v1beta1.Coin amount = 2 [ (gogoproto.nullable) = false ]; + string from = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + cosmos.base.v1beta1.Coin amount = 2 [(gogoproto.nullable) = false]; } // MsgBurnResponse is the response for burning tokens. @@ -75,11 +75,11 @@ message MsgBurnResponse {} // MsgChangeAdmin transfers admin authority to a new address. message MsgChangeAdmin { option (cosmos.msg.v1.signer) = "sender"; - option (amino.name) = "tokenfactory/MsgChangeAdmin"; + option (amino.name) = "tokenfactory/MsgChangeAdmin"; - string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; - string denom = 2; - string new_admin = 3 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string sender = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string denom = 2; + string new_admin = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; } // MsgChangeAdminResponse is the response for changing admin. @@ -89,10 +89,10 @@ message MsgChangeAdminResponse {} // After renouncing, no one can mint/burn via MsgMint/MsgBurn. message MsgRenounceAdmin { option (cosmos.msg.v1.signer) = "sender"; - option (amino.name) = "tokenfactory/MsgRenounceAdmin"; + option (amino.name) = "tokenfactory/MsgRenounceAdmin"; - string sender = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; - string denom = 2; + string sender = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string denom = 2; } // MsgRenounceAdminResponse is the response for renouncing admin. From 4f910c40e3fe034d0f67aba1391248518ac4c47a Mon Sep 17 00:00:00 2001 From: Diana Borbe Date: Tue, 5 May 2026 14:43:28 +0200 Subject: [PATCH 10/11] Fix proto on prototypes --- .../apps/prototypes/ift/types/genesis.pb.go | 56 ++++--- modules/apps/prototypes/ift/types/ift.pb.go | 72 +++++---- modules/apps/prototypes/ift/types/query.pb.go | 147 +++++++++-------- .../apps/prototypes/ift/types/query.pb.gw.go | 12 +- modules/apps/prototypes/ift/types/tx.pb.go | 151 ++++++++++-------- .../tokenfactory/types/genesis.pb.go | 52 +++--- .../prototypes/tokenfactory/types/query.pb.go | 100 ++++++------ .../tokenfactory/types/query.pb.gw.go | 8 +- .../tokenfactory/types/tokenfactory.pb.go | 40 ++--- .../prototypes/tokenfactory/types/tx.pb.go | 132 +++++++-------- 10 files changed, 407 insertions(+), 363 deletions(-) diff --git a/modules/apps/prototypes/ift/types/genesis.pb.go b/modules/apps/prototypes/ift/types/genesis.pb.go index 5aa58220496..7ec7659f19f 100644 --- a/modules/apps/prototypes/ift/types/genesis.pb.go +++ b/modules/apps/prototypes/ift/types/genesis.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: ibc/applications/ift/v1/genesis.proto +// source: ibc/applications/prototypes/ift/v1/genesis.proto package types @@ -37,7 +37,7 @@ func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_6525c4ab1ce8c1c3, []int{0} + return fileDescriptor_5bceadd6f2bad5e9, []int{0} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -97,7 +97,7 @@ func (m *GenesisBridge) Reset() { *m = GenesisBridge{} } func (m *GenesisBridge) String() string { return proto.CompactTextString(m) } func (*GenesisBridge) ProtoMessage() {} func (*GenesisBridge) Descriptor() ([]byte, []int) { - return fileDescriptor_6525c4ab1ce8c1c3, []int{1} + return fileDescriptor_5bceadd6f2bad5e9, []int{1} } func (m *GenesisBridge) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -145,30 +145,34 @@ func init() { proto.RegisterType((*GenesisBridge)(nil), "ibc.applications.prototypes.ift.v1.GenesisBridge") } -func init() { proto.RegisterFile("ibc/applications/prototypes/ift/v1/genesis.proto", fileDescriptor_6525c4ab1ce8c1c3) } +func init() { + proto.RegisterFile("ibc/applications/prototypes/ift/v1/genesis.proto", fileDescriptor_5bceadd6f2bad5e9) +} -var fileDescriptor_6525c4ab1ce8c1c3 = []byte{ - // 308 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x90, 0xb1, 0x4e, 0xf3, 0x30, - 0x14, 0x85, 0xe3, 0xf6, 0xff, 0x8b, 0x70, 0x41, 0x02, 0x53, 0x50, 0xa8, 0x90, 0xa9, 0x3a, 0x75, - 0x80, 0x58, 0x14, 0x26, 0xc6, 0x0e, 0x45, 0x4c, 0xa0, 0xd2, 0x09, 0x06, 0x94, 0x34, 0x8e, 0xb1, - 0x44, 0xec, 0xc8, 0x36, 0x12, 0xbc, 0x05, 0x8f, 0xd5, 0x09, 0x75, 0x64, 0x42, 0x28, 0x79, 0x11, - 0x84, 0x6d, 0xa4, 0x7a, 0xb3, 0xef, 0x3d, 0xe7, 0x3b, 0xf7, 0x5e, 0x78, 0xa8, 0x53, 0x91, 0x67, - 0xf2, 0x95, 0xf0, 0xc2, 0x10, 0x46, 0x05, 0xd5, 0x5c, 0x27, 0x95, 0x92, 0x46, 0xa2, 0xae, 0x6f, - 0x25, 0xbc, 0x30, 0xfd, 0x1e, 0x93, 0x4c, 0xda, 0x3a, 0xf9, 0x7d, 0x39, 0x49, 0x7f, 0x7f, 0xdd, - 0xcd, 0x0b, 0xe3, 0xca, 0xc3, 0x0f, 0x00, 0xb7, 0xae, 0x1c, 0xeb, 0xce, 0xa4, 0x86, 0xa2, 0x33, - 0xd8, 0xa9, 0x52, 0x95, 0x96, 0x3a, 0x06, 0x03, 0x30, 0xea, 0x8e, 0xf7, 0x92, 0x35, 0x76, 0x72, - 0x6b, 0x5b, 0x93, 0x7f, 0xcb, 0xaf, 0xe3, 0x68, 0xe6, 0x85, 0xe8, 0x12, 0x6e, 0x64, 0x8a, 0xe7, - 0x8c, 0xea, 0xb8, 0x35, 0x68, 0x8f, 0xba, 0xe3, 0x7e, 0xe0, 0xf1, 0xf8, 0x89, 0x95, 0x78, 0xeb, - 0x9f, 0x01, 0xdd, 0xc0, 0xdd, 0x8a, 0x8a, 0x9c, 0x0b, 0xf6, 0x68, 0x54, 0x2a, 0x74, 0x41, 0x95, - 0x8e, 0xdb, 0x96, 0x72, 0x14, 0x26, 0x3b, 0xd5, 0xdc, 0x8b, 0x3c, 0x67, 0xa7, 0x0a, 0xcb, 0x7a, - 0xf8, 0x00, 0xb7, 0x83, 0x40, 0xd4, 0x83, 0xff, 0x73, 0x2a, 0x64, 0x69, 0xf7, 0xd9, 0x9c, 0xb9, - 0x0f, 0xba, 0x80, 0x1d, 0x37, 0x42, 0xdc, 0xb2, 0x6b, 0x1e, 0x04, 0x61, 0xd7, 0xd3, 0x79, 0x30, - 0xae, 0xd7, 0x4e, 0xa6, 0xcb, 0x1a, 0x83, 0x55, 0x8d, 0xc1, 0x77, 0x8d, 0xc1, 0x7b, 0x83, 0xa3, - 0x55, 0x83, 0xa3, 0xcf, 0x06, 0x47, 0xf7, 0x27, 0x8c, 0x9b, 0xa7, 0x97, 0x2c, 0x59, 0xc8, 0x92, - 0x2c, 0xa4, 0x2e, 0xa5, 0x26, 0x1e, 0x78, 0xfa, 0x4c, 0x73, 0x46, 0x15, 0x71, 0x97, 0x37, 0x6f, - 0x15, 0xd5, 0x59, 0xc7, 0x1e, 0xff, 0xfc, 0x27, 0x00, 0x00, 0xff, 0xff, 0x94, 0x46, 0x6e, 0xad, - 0xd3, 0x01, 0x00, 0x00, +var fileDescriptor_5bceadd6f2bad5e9 = []byte{ + // 344 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0xbd, 0x4e, 0xfb, 0x30, + 0x14, 0xc5, 0x93, 0xf6, 0xff, 0x2f, 0xc2, 0x05, 0x09, 0xa2, 0x0e, 0x51, 0x87, 0x50, 0x75, 0xaa, + 0x10, 0xb5, 0x49, 0xbb, 0x33, 0x74, 0xe0, 0x43, 0x2c, 0x50, 0x3a, 0x20, 0x16, 0x94, 0x0f, 0xc7, + 0x58, 0x6a, 0x62, 0xcb, 0xd7, 0xad, 0xc4, 0x5b, 0x20, 0xf1, 0x52, 0x1d, 0x3b, 0x32, 0x21, 0xd4, + 0xbe, 0x08, 0xaa, 0x63, 0x04, 0x15, 0x03, 0xd9, 0xae, 0x8f, 0x7d, 0x7e, 0xf7, 0xf8, 0x5e, 0x74, + 0xca, 0xe3, 0x84, 0x44, 0x52, 0x4e, 0x79, 0x12, 0x69, 0x2e, 0x0a, 0x20, 0x52, 0x09, 0x2d, 0xf4, + 0xb3, 0xa4, 0x40, 0x78, 0xa6, 0xc9, 0x3c, 0x24, 0x8c, 0x16, 0x14, 0x38, 0x60, 0x73, 0xe3, 0x75, + 0x79, 0x9c, 0xe0, 0x9f, 0x0e, 0xfc, 0xed, 0xc0, 0x3c, 0xd3, 0x78, 0x1e, 0xb6, 0x5b, 0x4c, 0x30, + 0x61, 0x64, 0xb2, 0xa9, 0xca, 0x17, 0xed, 0x93, 0x0a, 0xbd, 0x36, 0x00, 0xa3, 0x76, 0x5f, 0x6b, + 0x68, 0xef, 0xa2, 0xec, 0x7c, 0xa7, 0x23, 0x4d, 0xbd, 0x4b, 0xd4, 0x90, 0x91, 0x8a, 0x72, 0xf0, + 0xdd, 0x8e, 0xdb, 0x6b, 0x0e, 0x8e, 0xf1, 0xdf, 0x49, 0xf0, 0x8d, 0x71, 0x8c, 0xfe, 0x2d, 0xde, + 0x8f, 0x9c, 0xb1, 0xf5, 0x7b, 0xb7, 0x68, 0x27, 0x56, 0x3c, 0x65, 0x14, 0xfc, 0x5a, 0xa7, 0xde, + 0x6b, 0x0e, 0xc2, 0x2a, 0x28, 0x1b, 0x66, 0x64, 0x9c, 0x96, 0xf8, 0xc5, 0xf1, 0x32, 0x74, 0x28, + 0x69, 0x91, 0xf2, 0x82, 0x3d, 0x6a, 0x15, 0x15, 0x90, 0x51, 0x05, 0x7e, 0xdd, 0xc0, 0x87, 0x95, + 0x72, 0x96, 0xe6, 0x89, 0xf5, 0x5a, 0xfc, 0x81, 0xdc, 0x96, 0xa1, 0xab, 0xd0, 0xfe, 0x56, 0x0e, + 0xaf, 0x85, 0xfe, 0xa7, 0xb4, 0x10, 0xb9, 0x19, 0xca, 0xee, 0xb8, 0x3c, 0x78, 0xd7, 0xa8, 0x51, + 0x26, 0xf3, 0x6b, 0x66, 0x56, 0xfd, 0x2a, 0x19, 0xae, 0xce, 0x27, 0x5b, 0x9f, 0xb3, 0x88, 0xd1, + 0xfd, 0x62, 0x15, 0xb8, 0xcb, 0x55, 0xe0, 0x7e, 0xac, 0x02, 0xf7, 0x65, 0x1d, 0x38, 0xcb, 0x75, + 0xe0, 0xbc, 0xad, 0x03, 0xe7, 0xe1, 0x8c, 0x71, 0xfd, 0x34, 0x8b, 0x71, 0x22, 0x72, 0x92, 0x08, + 0xc8, 0x05, 0x10, 0x1e, 0x27, 0x7d, 0x26, 0xc8, 0x3c, 0x0c, 0x49, 0x2e, 0xd2, 0xd9, 0x94, 0xc2, + 0x66, 0xe5, 0xbf, 0x56, 0x6d, 0xaa, 0xb8, 0x61, 0xd4, 0xe1, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x63, 0xfe, 0x01, 0xc4, 0x86, 0x02, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/modules/apps/prototypes/ift/types/ift.pb.go b/modules/apps/prototypes/ift/types/ift.pb.go index 5d996e61de9..10e4f979727 100644 --- a/modules/apps/prototypes/ift/types/ift.pb.go +++ b/modules/apps/prototypes/ift/types/ift.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: ibc/applications/ift/v1/ift.proto +// source: ibc/applications/prototypes/ift/v1/ift.proto package types @@ -44,7 +44,7 @@ func (m *IFTBridge) Reset() { *m = IFTBridge{} } func (m *IFTBridge) String() string { return proto.CompactTextString(m) } func (*IFTBridge) ProtoMessage() {} func (*IFTBridge) Descriptor() ([]byte, []int) { - return fileDescriptor_7603d0b7ebb5be02, []int{0} + return fileDescriptor_58b89007ac565bbb, []int{0} } func (m *IFTBridge) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -113,7 +113,7 @@ func (m *PendingTransfer) Reset() { *m = PendingTransfer{} } func (m *PendingTransfer) String() string { return proto.CompactTextString(m) } func (*PendingTransfer) ProtoMessage() {} func (*PendingTransfer) Descriptor() ([]byte, []int) { - return fileDescriptor_7603d0b7ebb5be02, []int{1} + return fileDescriptor_58b89007ac565bbb, []int{1} } func (m *PendingTransfer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -181,7 +181,7 @@ func (m *Params) Reset() { *m = Params{} } func (m *Params) String() string { return proto.CompactTextString(m) } func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_7603d0b7ebb5be02, []int{2} + return fileDescriptor_58b89007ac565bbb, []int{2} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -223,36 +223,40 @@ func init() { proto.RegisterType((*Params)(nil), "ibc.applications.prototypes.ift.v1.Params") } -func init() { proto.RegisterFile("ibc/applications/prototypes/ift/v1/ift.proto", fileDescriptor_7603d0b7ebb5be02) } - -var fileDescriptor_7603d0b7ebb5be02 = []byte{ - // 416 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0xc1, 0x8a, 0xd4, 0x30, - 0x18, 0x9e, 0xae, 0xbb, 0x65, 0x1b, 0x0f, 0x42, 0x98, 0x95, 0xee, 0x08, 0x5d, 0x99, 0x93, 0xa0, - 0xd3, 0x0a, 0x82, 0xe8, 0x4d, 0x67, 0x60, 0xa1, 0xb7, 0xa5, 0xbb, 0x27, 0x2f, 0x25, 0x93, 0xfc, - 0xed, 0x04, 0xdb, 0x64, 0x4c, 0xfe, 0x82, 0xf3, 0x16, 0xbe, 0x80, 0x6f, 0xb1, 0x0f, 0xb1, 0xc7, - 0x65, 0x2f, 0x8a, 0x87, 0x45, 0x66, 0x5e, 0x44, 0xda, 0x04, 0x47, 0x3d, 0x78, 0x08, 0xe4, 0xff, - 0xbf, 0xef, 0x4b, 0xbe, 0x3f, 0xf9, 0xc8, 0x89, 0x65, 0x4a, 0x2c, 0xf5, 0xe7, 0x4c, 0x56, 0xd8, - 0xaf, 0x74, 0x6d, 0x34, 0x6a, 0xfa, 0xd0, 0xb7, 0x53, 0x59, 0xe1, 0x64, 0x5c, 0xeb, 0x5a, 0x0f, - 0xfd, 0xac, 0xdf, 0x39, 0xca, 0xe4, 0x94, 0x6b, 0xdb, 0x6a, 0x5b, 0x3a, 0xc0, 0x15, 0x0e, 0x9a, - 0x7e, 0x0d, 0x48, 0x94, 0x9f, 0x5f, 0xcd, 0x8d, 0x14, 0x35, 0xd0, 0x27, 0x24, 0xe2, 0x8d, 0x04, - 0x85, 0xa5, 0x14, 0x71, 0xf0, 0x34, 0x78, 0x16, 0x15, 0xc7, 0xae, 0x91, 0x0b, 0xfa, 0x86, 0xc4, - 0x5c, 0x77, 0x0a, 0xc1, 0xac, 0x99, 0xc1, 0x4d, 0x29, 0x2b, 0x2c, 0x99, 0x10, 0x06, 0xac, 0x8d, - 0x0f, 0x06, 0xee, 0xe3, 0x3f, 0xf1, 0xbc, 0xc2, 0xf7, 0x0e, 0xa5, 0x6f, 0xc9, 0x69, 0x4f, 0xb6, - 0xa0, 0x44, 0xc9, 0x59, 0xd3, 0x94, 0x5c, 0x2b, 0x8b, 0xa6, 0xe3, 0xa8, 0x4d, 0xfc, 0xc0, 0x49, - 0x65, 0x85, 0x97, 0xa0, 0xc4, 0x82, 0x35, 0xcd, 0x62, 0x8f, 0x4e, 0xbf, 0x05, 0xe4, 0xd1, 0x05, - 0x28, 0x21, 0x55, 0x7d, 0x65, 0x98, 0xb2, 0x15, 0x18, 0x3a, 0x26, 0x47, 0x02, 0x94, 0x6e, 0xbd, - 0x43, 0x57, 0xfc, 0xed, 0xfd, 0xe0, 0x1f, 0xef, 0x13, 0x72, 0x6c, 0xe1, 0x53, 0x07, 0x8a, 0xc3, - 0x70, 0xe1, 0x61, 0xf1, 0xbb, 0xa6, 0x2f, 0x49, 0xd8, 0x3b, 0x03, 0x13, 0x1f, 0xf6, 0xaa, 0x79, - 0x7c, 0x77, 0x3d, 0x1b, 0xfb, 0x47, 0xf2, 0x13, 0x5c, 0xa2, 0x91, 0xaa, 0x2e, 0x3c, 0x8f, 0x2e, - 0x48, 0xc8, 0xda, 0x7e, 0xd4, 0xf8, 0x68, 0x50, 0x3c, 0xbf, 0xb9, 0x3f, 0x1b, 0xfd, 0xb8, 0x3f, - 0x3b, 0x71, 0x2a, 0x2b, 0x3e, 0xa6, 0x52, 0x67, 0x2d, 0xc3, 0x55, 0x9a, 0x2b, 0xbc, 0xbb, 0x9e, - 0x11, 0x7f, 0x5c, 0xae, 0xb0, 0xf0, 0xd2, 0xe9, 0x3b, 0x12, 0x5e, 0x30, 0xc3, 0x5a, 0x4b, 0x5f, - 0x93, 0x88, 0x75, 0xb8, 0xd2, 0x46, 0xe2, 0xc6, 0xcd, 0xf4, 0x1f, 0x0f, 0x7b, 0xea, 0xfc, 0xfc, - 0x66, 0x9b, 0x04, 0xb7, 0xdb, 0x24, 0xf8, 0xb9, 0x4d, 0x82, 0x2f, 0xbb, 0x64, 0x74, 0xbb, 0x4b, - 0x46, 0xdf, 0x77, 0xc9, 0xe8, 0xc3, 0x8b, 0x5a, 0xe2, 0xaa, 0x5b, 0xa6, 0x5c, 0xb7, 0xfe, 0xbb, - 0x33, 0x9f, 0x92, 0x59, 0x03, 0xa2, 0x06, 0x93, 0xb9, 0x14, 0xe1, 0x66, 0x0d, 0x76, 0x19, 0x0e, - 0x51, 0x78, 0xf5, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x6c, 0xc8, 0xa7, 0xdf, 0x61, 0x02, 0x00, 0x00, +func init() { + proto.RegisterFile("ibc/applications/prototypes/ift/v1/ift.proto", fileDescriptor_58b89007ac565bbb) +} + +var fileDescriptor_58b89007ac565bbb = []byte{ + // 446 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x92, 0x41, 0x8b, 0xd3, 0x40, + 0x14, 0xc7, 0x9b, 0x75, 0xb7, 0x6c, 0xe7, 0x22, 0x84, 0x2a, 0xd9, 0x0a, 0x59, 0xe9, 0x49, 0xd0, + 0x66, 0x2c, 0x82, 0xe8, 0x45, 0xb4, 0x05, 0x21, 0xb7, 0x25, 0xbb, 0x07, 0xf1, 0x12, 0x26, 0x33, + 0x93, 0x74, 0x30, 0x99, 0x17, 0x67, 0x5e, 0x0a, 0xfd, 0x16, 0x7e, 0x01, 0xbf, 0xc5, 0x7e, 0x88, + 0x3d, 0x2e, 0x7b, 0x51, 0x3c, 0x2c, 0xd2, 0x7e, 0x11, 0x49, 0x26, 0xd8, 0x55, 0xc1, 0x53, 0xe6, + 0xbd, 0xff, 0xef, 0x9f, 0xfc, 0x5f, 0xe6, 0x91, 0x67, 0x2a, 0xe3, 0x94, 0xd5, 0x75, 0xa9, 0x38, + 0x43, 0x05, 0xda, 0xd2, 0xda, 0x00, 0x02, 0x6e, 0x6a, 0x69, 0xa9, 0xca, 0x91, 0xae, 0xe7, 0xed, + 0x23, 0xea, 0xba, 0xfe, 0x54, 0x65, 0x3c, 0xba, 0x4b, 0x47, 0x7b, 0x3a, 0x6a, 0xb1, 0xf5, 0x7c, + 0x32, 0x2e, 0xa0, 0x80, 0xae, 0x4d, 0xdb, 0x93, 0x23, 0x26, 0x27, 0x1c, 0x6c, 0x05, 0x36, 0x75, + 0x82, 0x2b, 0x9c, 0x34, 0xfd, 0xea, 0x91, 0x51, 0xfc, 0xfe, 0x62, 0x61, 0x94, 0x28, 0xa4, 0xff, + 0x88, 0x8c, 0x78, 0xa9, 0xa4, 0xc6, 0x54, 0x89, 0xc0, 0x7b, 0xec, 0x3d, 0x19, 0x25, 0xc7, 0xae, + 0x11, 0x0b, 0xff, 0x15, 0x09, 0x38, 0x34, 0x1a, 0xa5, 0xa9, 0x99, 0xc1, 0x4d, 0xaa, 0x72, 0x4c, + 0x99, 0x10, 0x46, 0x5a, 0x1b, 0x1c, 0x74, 0xec, 0xc3, 0xbb, 0x7a, 0x9c, 0xe3, 0x3b, 0xa7, 0xfa, + 0xaf, 0xc9, 0x49, 0x0b, 0x5b, 0xa9, 0x45, 0xca, 0x59, 0x59, 0xa6, 0x1c, 0xb4, 0x45, 0xd3, 0x70, + 0x04, 0x13, 0xdc, 0x73, 0x56, 0x95, 0xe3, 0xb9, 0xd4, 0x62, 0xc9, 0xca, 0x72, 0xb9, 0x57, 0xa7, + 0xdf, 0x3c, 0x72, 0xff, 0x4c, 0x6a, 0xa1, 0x74, 0x71, 0x61, 0x98, 0xb6, 0xb9, 0x34, 0xfe, 0x98, + 0x1c, 0x09, 0xa9, 0xa1, 0xea, 0x13, 0xba, 0xe2, 0xcf, 0xec, 0x07, 0x7f, 0x65, 0x9f, 0x90, 0x63, + 0x2b, 0x3f, 0x37, 0x52, 0x73, 0xd9, 0x7d, 0xf0, 0x30, 0xf9, 0x5d, 0xfb, 0xcf, 0xc9, 0xb0, 0x4d, + 0x26, 0x4d, 0x70, 0xd8, 0xba, 0x16, 0xc1, 0xcd, 0xe5, 0x6c, 0xdc, 0xff, 0xa4, 0x7e, 0x82, 0x73, + 0x34, 0x4a, 0x17, 0x49, 0xcf, 0xf9, 0x4b, 0x32, 0x64, 0x55, 0x3b, 0x6a, 0x70, 0xd4, 0x39, 0x9e, + 0x5e, 0xdd, 0x9e, 0x0e, 0x7e, 0xdc, 0x9e, 0x3e, 0x70, 0x2e, 0x2b, 0x3e, 0x45, 0x0a, 0x68, 0xc5, + 0x70, 0x15, 0xc5, 0x1a, 0x6f, 0x2e, 0x67, 0xa4, 0x7f, 0x5d, 0xac, 0x31, 0xe9, 0xad, 0xd3, 0xb7, + 0x64, 0x78, 0xc6, 0x0c, 0xab, 0xac, 0xff, 0x92, 0x8c, 0x58, 0x83, 0x2b, 0x30, 0x0a, 0x37, 0x6e, + 0xa6, 0xff, 0x64, 0xd8, 0xa3, 0x8b, 0x0f, 0x57, 0xdb, 0xd0, 0xbb, 0xde, 0x86, 0xde, 0xcf, 0x6d, + 0xe8, 0x7d, 0xd9, 0x85, 0x83, 0xeb, 0x5d, 0x38, 0xf8, 0xbe, 0x0b, 0x07, 0x1f, 0xdf, 0x14, 0x0a, + 0x57, 0x4d, 0x16, 0x71, 0xa8, 0xfa, 0xeb, 0xa6, 0x2a, 0xe3, 0xb3, 0x02, 0xe8, 0x7a, 0x3e, 0xa7, + 0x15, 0x88, 0xa6, 0x94, 0xb6, 0xdd, 0xbc, 0x7f, 0x36, 0xae, 0x3b, 0x65, 0xc3, 0xae, 0xfb, 0xe2, + 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0xeb, 0xb0, 0x45, 0x87, 0xa1, 0x02, 0x00, 0x00, } func (m *IFTBridge) Marshal() (dAtA []byte, err error) { diff --git a/modules/apps/prototypes/ift/types/query.pb.go b/modules/apps/prototypes/ift/types/query.pb.go index 7e234da301d..88c52fe3125 100644 --- a/modules/apps/prototypes/ift/types/query.pb.go +++ b/modules/apps/prototypes/ift/types/query.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: ibc/applications/ift/v1/query.proto +// source: ibc/applications/prototypes/ift/v1/query.proto package types @@ -29,6 +29,7 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +// QueryIFTBridgeRequest is the request type for querying an IFT bridge by denom and client ID. type QueryIFTBridgeRequest struct { Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"` ClientId string `protobuf:"bytes,2,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` @@ -38,7 +39,7 @@ func (m *QueryIFTBridgeRequest) Reset() { *m = QueryIFTBridgeRequest{} } func (m *QueryIFTBridgeRequest) String() string { return proto.CompactTextString(m) } func (*QueryIFTBridgeRequest) ProtoMessage() {} func (*QueryIFTBridgeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_dff00e7f31cbb5cc, []int{0} + return fileDescriptor_8c14d4fc1a9675c1, []int{0} } func (m *QueryIFTBridgeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -81,6 +82,7 @@ func (m *QueryIFTBridgeRequest) GetClientId() string { return "" } +// QueryIFTBridgeResponse is the response type for the IFTBridge query. type QueryIFTBridgeResponse struct { Bridge IFTBridge `protobuf:"bytes,1,opt,name=bridge,proto3" json:"bridge"` } @@ -89,7 +91,7 @@ func (m *QueryIFTBridgeResponse) Reset() { *m = QueryIFTBridgeResponse{} func (m *QueryIFTBridgeResponse) String() string { return proto.CompactTextString(m) } func (*QueryIFTBridgeResponse) ProtoMessage() {} func (*QueryIFTBridgeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_dff00e7f31cbb5cc, []int{1} + return fileDescriptor_8c14d4fc1a9675c1, []int{1} } func (m *QueryIFTBridgeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -125,6 +127,7 @@ func (m *QueryIFTBridgeResponse) GetBridge() IFTBridge { return IFTBridge{} } +// QueryIFTBridgesRequest is the request type for querying all IFT bridges. type QueryIFTBridgesRequest struct { } @@ -132,7 +135,7 @@ func (m *QueryIFTBridgesRequest) Reset() { *m = QueryIFTBridgesRequest{} func (m *QueryIFTBridgesRequest) String() string { return proto.CompactTextString(m) } func (*QueryIFTBridgesRequest) ProtoMessage() {} func (*QueryIFTBridgesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_dff00e7f31cbb5cc, []int{2} + return fileDescriptor_8c14d4fc1a9675c1, []int{2} } func (m *QueryIFTBridgesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -161,6 +164,7 @@ func (m *QueryIFTBridgesRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QueryIFTBridgesRequest proto.InternalMessageInfo +// QueryIFTBridgesResponse is the response type for the IFTBridges query. type QueryIFTBridgesResponse struct { Bridges []DenomBridge `protobuf:"bytes,1,rep,name=bridges,proto3" json:"bridges"` } @@ -169,7 +173,7 @@ func (m *QueryIFTBridgesResponse) Reset() { *m = QueryIFTBridgesResponse func (m *QueryIFTBridgesResponse) String() string { return proto.CompactTextString(m) } func (*QueryIFTBridgesResponse) ProtoMessage() {} func (*QueryIFTBridgesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_dff00e7f31cbb5cc, []int{3} + return fileDescriptor_8c14d4fc1a9675c1, []int{3} } func (m *QueryIFTBridgesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -205,6 +209,7 @@ func (m *QueryIFTBridgesResponse) GetBridges() []DenomBridge { return nil } +// QueryIFTBridgesByDenomRequest is the request type for querying all IFT bridges for a specific denom. type QueryIFTBridgesByDenomRequest struct { Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"` } @@ -213,7 +218,7 @@ func (m *QueryIFTBridgesByDenomRequest) Reset() { *m = QueryIFTBridgesBy func (m *QueryIFTBridgesByDenomRequest) String() string { return proto.CompactTextString(m) } func (*QueryIFTBridgesByDenomRequest) ProtoMessage() {} func (*QueryIFTBridgesByDenomRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_dff00e7f31cbb5cc, []int{4} + return fileDescriptor_8c14d4fc1a9675c1, []int{4} } func (m *QueryIFTBridgesByDenomRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -249,6 +254,7 @@ func (m *QueryIFTBridgesByDenomRequest) GetDenom() string { return "" } +// QueryIFTBridgesByDenomResponse is the response type for the IFTBridgesByDenom query. type QueryIFTBridgesByDenomResponse struct { Bridges []IFTBridge `protobuf:"bytes,1,rep,name=bridges,proto3" json:"bridges"` } @@ -257,7 +263,7 @@ func (m *QueryIFTBridgesByDenomResponse) Reset() { *m = QueryIFTBridgesB func (m *QueryIFTBridgesByDenomResponse) String() string { return proto.CompactTextString(m) } func (*QueryIFTBridgesByDenomResponse) ProtoMessage() {} func (*QueryIFTBridgesByDenomResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_dff00e7f31cbb5cc, []int{5} + return fileDescriptor_8c14d4fc1a9675c1, []int{5} } func (m *QueryIFTBridgesByDenomResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -293,6 +299,7 @@ func (m *QueryIFTBridgesByDenomResponse) GetBridges() []IFTBridge { return nil } +// QueryPendingTransferRequest is the request type for querying a pending transfer. type QueryPendingTransferRequest struct { Denom string `protobuf:"bytes,1,opt,name=denom,proto3" json:"denom,omitempty"` ClientId string `protobuf:"bytes,2,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"` @@ -303,7 +310,7 @@ func (m *QueryPendingTransferRequest) Reset() { *m = QueryPendingTransfe func (m *QueryPendingTransferRequest) String() string { return proto.CompactTextString(m) } func (*QueryPendingTransferRequest) ProtoMessage() {} func (*QueryPendingTransferRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_dff00e7f31cbb5cc, []int{6} + return fileDescriptor_8c14d4fc1a9675c1, []int{6} } func (m *QueryPendingTransferRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -353,6 +360,7 @@ func (m *QueryPendingTransferRequest) GetSequence() uint64 { return 0 } +// QueryPendingTransferResponse is the response type for the PendingTransfer query. type QueryPendingTransferResponse struct { PendingTransfer PendingTransfer `protobuf:"bytes,1,opt,name=pending_transfer,json=pendingTransfer,proto3" json:"pending_transfer"` } @@ -361,7 +369,7 @@ func (m *QueryPendingTransferResponse) Reset() { *m = QueryPendingTransf func (m *QueryPendingTransferResponse) String() string { return proto.CompactTextString(m) } func (*QueryPendingTransferResponse) ProtoMessage() {} func (*QueryPendingTransferResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_dff00e7f31cbb5cc, []int{7} + return fileDescriptor_8c14d4fc1a9675c1, []int{7} } func (m *QueryPendingTransferResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -397,6 +405,7 @@ func (m *QueryPendingTransferResponse) GetPendingTransfer() PendingTransfer { return PendingTransfer{} } +// QueryParamsRequest is the request type for querying module parameters. type QueryParamsRequest struct { } @@ -404,7 +413,7 @@ func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } func (*QueryParamsRequest) ProtoMessage() {} func (*QueryParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_dff00e7f31cbb5cc, []int{8} + return fileDescriptor_8c14d4fc1a9675c1, []int{8} } func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -433,6 +442,7 @@ func (m *QueryParamsRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo +// QueryParamsResponse is the response type for the Params query. type QueryParamsResponse struct { Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` } @@ -441,7 +451,7 @@ func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } func (*QueryParamsResponse) ProtoMessage() {} func (*QueryParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_dff00e7f31cbb5cc, []int{9} + return fileDescriptor_8c14d4fc1a9675c1, []int{9} } func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -487,7 +497,7 @@ func (m *DenomBridge) Reset() { *m = DenomBridge{} } func (m *DenomBridge) String() string { return proto.CompactTextString(m) } func (*DenomBridge) ProtoMessage() {} func (*DenomBridge) Descriptor() ([]byte, []int) { - return fileDescriptor_dff00e7f31cbb5cc, []int{10} + return fileDescriptor_8c14d4fc1a9675c1, []int{10} } func (m *DenomBridge) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -544,50 +554,55 @@ func init() { proto.RegisterType((*DenomBridge)(nil), "ibc.applications.prototypes.ift.v1.DenomBridge") } -func init() { proto.RegisterFile("ibc/applications/prototypes/ift/v1/query.proto", fileDescriptor_dff00e7f31cbb5cc) } - -var fileDescriptor_dff00e7f31cbb5cc = []byte{ - // 632 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0x4f, 0x6f, 0xd3, 0x4e, - 0x10, 0x8d, 0xfb, 0x27, 0xbf, 0x76, 0x72, 0xe8, 0x8f, 0x6d, 0xda, 0x5a, 0x6e, 0x70, 0x23, 0x53, - 0x89, 0x94, 0x3f, 0x59, 0x91, 0x52, 0x84, 0xc4, 0x2d, 0x42, 0x15, 0x45, 0x02, 0x41, 0xe8, 0x01, - 0xb8, 0x54, 0x4e, 0xbc, 0x71, 0x2d, 0x25, 0x5e, 0xd7, 0xeb, 0x48, 0x44, 0x51, 0x2e, 0x48, 0xdc, - 0x11, 0x7c, 0x04, 0x8e, 0x7c, 0x91, 0x1e, 0x2b, 0x71, 0xe1, 0x84, 0x50, 0xc2, 0x07, 0x41, 0xd9, - 0x5d, 0xbb, 0xb1, 0xe3, 0x58, 0x11, 0xb7, 0x78, 0xe6, 0xcd, 0xbc, 0x37, 0x3b, 0x6f, 0x14, 0xd8, - 0x61, 0xa6, 0x6b, 0x35, 0xe9, 0x07, 0xec, 0xb4, 0x03, 0x7c, 0xd1, 0x23, 0x7e, 0xbf, 0xea, 0xf9, - 0x34, 0xa0, 0xa8, 0x20, 0x13, 0x55, 0xa7, 0x1d, 0x68, 0x45, 0x9b, 0xda, 0x94, 0xc7, 0xf1, 0xe4, - 0x97, 0x80, 0x68, 0x25, 0x9b, 0x52, 0xbb, 0x43, 0xb0, 0xe9, 0x39, 0xd8, 0x74, 0x5d, 0x1a, 0x98, - 0x81, 0x43, 0x5d, 0x26, 0xb3, 0x5b, 0xd3, 0x9d, 0x9d, 0x76, 0x20, 0xc2, 0xc6, 0x73, 0xd8, 0x7a, - 0x3d, 0xa1, 0x39, 0x39, 0x3e, 0xad, 0xfb, 0x8e, 0x65, 0x93, 0x06, 0xb9, 0xe8, 0x11, 0x16, 0xa0, - 0x22, 0xac, 0x5a, 0xc4, 0xa5, 0x5d, 0x55, 0x29, 0x2b, 0x95, 0xf5, 0x86, 0xf8, 0x40, 0xbb, 0xb0, - 0xde, 0xea, 0x38, 0xc4, 0x0d, 0xce, 0x1c, 0x4b, 0x5d, 0xe2, 0x99, 0x35, 0x11, 0x38, 0xb1, 0x8c, - 0x97, 0xb0, 0x9d, 0xec, 0xc5, 0x3c, 0xea, 0x32, 0x82, 0x1e, 0x42, 0xbe, 0xc9, 0x23, 0xbc, 0x5b, - 0xa1, 0xb6, 0x5d, 0x9d, 0x1a, 0xa7, 0x1a, 0xe1, 0xeb, 0x2b, 0x97, 0xbf, 0xf6, 0x72, 0x0d, 0x89, - 0x35, 0xd4, 0x64, 0x3f, 0x26, 0xc5, 0x19, 0x6f, 0x60, 0x67, 0x26, 0x23, 0xa9, 0x1e, 0xc3, 0x7f, - 0xa2, 0x9c, 0xa9, 0x4a, 0x79, 0xb9, 0x52, 0xa8, 0xa9, 0x31, 0xae, 0xa7, 0x93, 0x31, 0x62, 0x6c, - 0x21, 0xdc, 0x38, 0x82, 0x9b, 0x89, 0xa6, 0xf5, 0x3e, 0x87, 0x67, 0x3e, 0x89, 0xf1, 0x16, 0xf4, - 0x79, 0x65, 0x52, 0xd2, 0xa3, 0xa4, 0xa4, 0xec, 0xf1, 0x23, 0x41, 0x1d, 0xd8, 0xe5, 0x9d, 0x5f, - 0x11, 0xd7, 0x72, 0x5c, 0xfb, 0xd4, 0x37, 0x5d, 0xd6, 0x26, 0xfe, 0xbf, 0x6f, 0x08, 0x69, 0xb0, - 0xc6, 0x26, 0xd5, 0x6e, 0x8b, 0xa8, 0xcb, 0x65, 0xa5, 0xb2, 0xd2, 0x88, 0xbe, 0x8d, 0x2e, 0x94, - 0xd2, 0xd9, 0xe4, 0x14, 0x2f, 0xe0, 0x7f, 0x4f, 0xa4, 0xce, 0x02, 0x99, 0x93, 0xdb, 0x2c, 0xc5, - 0xc6, 0x49, 0xd4, 0xcb, 0xa1, 0x36, 0xbc, 0x78, 0xd8, 0x28, 0x02, 0x12, 0x74, 0xa6, 0x6f, 0x76, - 0xa3, 0xc5, 0x3e, 0x83, 0xcd, 0x58, 0x54, 0x72, 0x3f, 0x80, 0xbc, 0xc7, 0x23, 0x92, 0x71, 0x33, - 0xce, 0xc8, 0x53, 0xa1, 0x79, 0x04, 0xd0, 0x78, 0x07, 0x85, 0xa9, 0x5d, 0xcf, 0x79, 0xac, 0x6b, - 0x5f, 0x2e, 0x2d, 0xee, 0xcb, 0xda, 0xf7, 0x55, 0x58, 0xe5, 0x2a, 0xd1, 0x27, 0x05, 0xd6, 0x23, - 0x14, 0x32, 0x62, 0xd5, 0xa9, 0x67, 0xa5, 0xdd, 0xca, 0xc4, 0x88, 0x71, 0x0d, 0xfc, 0xf1, 0xc7, - 0x9f, 0xaf, 0x4b, 0x07, 0xe8, 0x36, 0x9e, 0x3e, 0x5a, 0xc1, 0x8e, 0x07, 0x5c, 0xfa, 0x10, 0x0f, - 0xa2, 0x35, 0x0f, 0x51, 0x0f, 0xe0, 0xda, 0x7e, 0x28, 0x8b, 0x23, 0x7c, 0x69, 0x6d, 0x3f, 0x1b, - 0x24, 0x95, 0x94, 0xb8, 0x92, 0x6d, 0x54, 0x4c, 0x51, 0xc2, 0xd0, 0x17, 0x05, 0x6e, 0xcc, 0xd8, - 0x1e, 0xdd, 0xc9, 0xea, 0x1c, 0x3f, 0x29, 0xed, 0xee, 0x42, 0x58, 0x29, 0x66, 0x9f, 0x8b, 0xd1, - 0x51, 0x29, 0x4d, 0x4c, 0xf8, 0x2e, 0xe8, 0x9b, 0x02, 0x1b, 0x09, 0x0f, 0xa2, 0xca, 0x2c, 0x4d, - 0xfa, 0x51, 0x69, 0x07, 0x0b, 0x20, 0xa5, 0x9c, 0x27, 0x5c, 0xce, 0x11, 0x3a, 0x8c, 0xc9, 0x91, - 0x3e, 0x4f, 0x5b, 0x13, 0x1e, 0x84, 0xc7, 0x36, 0x44, 0xe7, 0x90, 0x17, 0xb6, 0x45, 0x7b, 0x29, - 0x8c, 0xd3, 0x37, 0xa1, 0x95, 0xe7, 0x03, 0xa4, 0x92, 0x5d, 0xae, 0x64, 0x0b, 0x6d, 0xc6, 0x95, - 0x88, 0xb3, 0x38, 0xbe, 0x1c, 0xe9, 0xca, 0xd5, 0x48, 0x57, 0x7e, 0x8f, 0x74, 0xe5, 0xf3, 0x58, - 0xcf, 0x5d, 0x8d, 0xf5, 0xdc, 0xcf, 0xb1, 0x9e, 0x7b, 0x7f, 0xcf, 0x76, 0x82, 0xf3, 0x5e, 0xb3, - 0xda, 0xa2, 0x5d, 0xdc, 0xa2, 0xac, 0x4b, 0x59, 0x58, 0x7f, 0xbf, 0x43, 0x2c, 0x9b, 0xf8, 0x58, - 0x34, 0x0a, 0xfa, 0x1e, 0x61, 0xcd, 0x3c, 0xff, 0xc3, 0x38, 0xfc, 0x1b, 0x00, 0x00, 0xff, 0xff, - 0xfa, 0x21, 0xb7, 0xac, 0xa3, 0x06, 0x00, 0x00, +func init() { + proto.RegisterFile("ibc/applications/prototypes/ift/v1/query.proto", fileDescriptor_8c14d4fc1a9675c1) +} + +var fileDescriptor_8c14d4fc1a9675c1 = []byte{ + // 673 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x94, 0xcf, 0x4f, 0xd4, 0x40, + 0x14, 0xc7, 0x77, 0xf8, 0xb1, 0xc2, 0xe3, 0x80, 0x8e, 0xa8, 0x9b, 0x82, 0x95, 0xf4, 0x44, 0x10, + 0x3a, 0xd9, 0xdd, 0xa0, 0x51, 0x12, 0xc4, 0x8d, 0x21, 0x82, 0x1a, 0x75, 0xc3, 0xc1, 0x78, 0x21, + 0xdd, 0x76, 0xa8, 0x63, 0x76, 0x3b, 0xa5, 0xd3, 0x25, 0x21, 0x84, 0x8b, 0x31, 0x9e, 0x4d, 0xfc, + 0x3b, 0xfc, 0x07, 0xfc, 0x0b, 0x88, 0x27, 0x12, 0x0f, 0x7a, 0x32, 0x06, 0x3c, 0xf8, 0x67, 0x98, + 0x4e, 0x67, 0xcb, 0x6e, 0x77, 0xd1, 0x52, 0x6e, 0xed, 0x9b, 0x79, 0xdf, 0xf9, 0x7e, 0x66, 0xde, + 0x7b, 0x60, 0xb2, 0x86, 0x4d, 0x2c, 0xdf, 0x6f, 0x32, 0xdb, 0x0a, 0x19, 0xf7, 0x04, 0xf1, 0x03, + 0x1e, 0xf2, 0x70, 0xcf, 0xa7, 0x82, 0xb0, 0xed, 0x90, 0xec, 0x96, 0xc9, 0x4e, 0x9b, 0x06, 0x7b, + 0xa6, 0x8c, 0x63, 0x83, 0x35, 0x6c, 0xb3, 0x7b, 0xbf, 0x79, 0xba, 0xdf, 0x64, 0xdb, 0xa1, 0xb9, + 0x5b, 0xd6, 0xa6, 0x5c, 0xee, 0x72, 0x19, 0x26, 0xd1, 0x57, 0xbc, 0x43, 0x9b, 0x71, 0x39, 0x77, + 0x9b, 0x94, 0x58, 0x3e, 0x23, 0x96, 0xe7, 0xf1, 0xb0, 0x3b, 0x5f, 0x5b, 0xc8, 0xe0, 0x23, 0x92, + 0x97, 0x51, 0x63, 0x03, 0xae, 0xbd, 0x8c, 0x4c, 0xad, 0xaf, 0x6d, 0xd6, 0x02, 0xe6, 0xb8, 0xb4, + 0x4e, 0x77, 0xda, 0x54, 0x84, 0x78, 0x0a, 0x46, 0x1d, 0xea, 0xf1, 0x56, 0x09, 0xcd, 0xa2, 0xb9, + 0xf1, 0x7a, 0xfc, 0x83, 0xa7, 0x61, 0xdc, 0x6e, 0x32, 0xea, 0x85, 0x5b, 0xcc, 0x29, 0x0d, 0xc9, + 0x95, 0xb1, 0x38, 0xb0, 0xee, 0x18, 0x14, 0xae, 0xa7, 0xb5, 0x84, 0xcf, 0x3d, 0x41, 0xf1, 0x13, + 0x28, 0x36, 0x64, 0x44, 0xaa, 0x4d, 0x54, 0x16, 0xcd, 0xff, 0xc3, 0x9b, 0x89, 0x4c, 0x6d, 0xe4, + 0xf0, 0xe7, 0xad, 0x42, 0x5d, 0x49, 0x18, 0xa5, 0xf4, 0x31, 0x42, 0x79, 0x36, 0xde, 0xc2, 0x8d, + 0xbe, 0x15, 0xe5, 0xe0, 0x39, 0x5c, 0x8a, 0xd3, 0x45, 0x09, 0xcd, 0x0e, 0xcf, 0x4d, 0x54, 0x48, + 0x16, 0x0b, 0x8f, 0x22, 0xe8, 0x1e, 0x13, 0x1d, 0x15, 0x63, 0x09, 0x6e, 0xa6, 0xce, 0xaa, 0xed, + 0xc9, 0xed, 0xff, 0xbc, 0x40, 0x83, 0x83, 0x7e, 0x56, 0x9a, 0x72, 0xfa, 0x2c, 0xed, 0x34, 0xd7, + 0x65, 0x25, 0x3e, 0x9b, 0x30, 0x2d, 0x0f, 0x7c, 0x41, 0x3d, 0x87, 0x79, 0xee, 0x66, 0x60, 0x79, + 0x62, 0x9b, 0x06, 0xf9, 0x9f, 0x19, 0x6b, 0x30, 0x26, 0xa2, 0x6c, 0xcf, 0xa6, 0xa5, 0xe1, 0x59, + 0x34, 0x37, 0x52, 0x4f, 0xfe, 0x8d, 0xf7, 0x08, 0x66, 0x06, 0x1f, 0xa7, 0xe8, 0x1c, 0xb8, 0xec, + 0xc7, 0x4b, 0x5b, 0xa1, 0x5a, 0x53, 0x35, 0x51, 0xcd, 0x82, 0x99, 0x92, 0x55, 0xb0, 0x93, 0x7e, + 0x6f, 0xd8, 0x98, 0x02, 0x1c, 0xbb, 0xb0, 0x02, 0xab, 0x95, 0x94, 0xc7, 0x16, 0x5c, 0xed, 0x89, + 0x2a, 0x4b, 0x8f, 0xa1, 0xe8, 0xcb, 0x88, 0x32, 0x32, 0x9f, 0xc9, 0x88, 0xcc, 0xe8, 0x54, 0x66, + 0x9c, 0x6f, 0xf8, 0x30, 0xd1, 0x55, 0x31, 0x67, 0xdc, 0xed, 0x69, 0x2f, 0x0c, 0x5d, 0xb8, 0x17, + 0x2a, 0x1f, 0xc6, 0x60, 0x54, 0x32, 0xe1, 0xaf, 0x08, 0xc6, 0x93, 0x5d, 0xf8, 0x5e, 0x16, 0xd1, + 0x81, 0x8d, 0xaf, 0xdd, 0xcf, 0x93, 0x1a, 0x5f, 0xa5, 0xb1, 0xf6, 0xee, 0xdb, 0xef, 0x4f, 0x43, + 0xab, 0x78, 0x85, 0x64, 0x18, 0x42, 0x31, 0x02, 0xd9, 0x97, 0xd7, 0x72, 0x40, 0xf6, 0x93, 0x8a, + 0x3b, 0xc0, 0x5f, 0x10, 0xc0, 0x69, 0x87, 0xe0, 0x1c, 0x96, 0x3a, 0x8f, 0xae, 0x2d, 0xe7, 0xca, + 0x55, 0x3c, 0x55, 0xc9, 0xb3, 0x88, 0x6f, 0x67, 0xe7, 0x11, 0xf8, 0x3b, 0x82, 0x2b, 0x7d, 0xed, + 0x8d, 0x1f, 0xe6, 0xf0, 0xd1, 0x3b, 0x51, 0xb4, 0xda, 0x45, 0x24, 0x14, 0xd1, 0xb2, 0x24, 0x5a, + 0xc2, 0xd5, 0x73, 0x10, 0x75, 0x9e, 0x08, 0xff, 0x41, 0x30, 0x99, 0xea, 0x40, 0xfc, 0x20, 0xb3, + 0xa9, 0xc1, 0x13, 0x48, 0x5b, 0xcd, 0x2f, 0xa0, 0x98, 0xea, 0x92, 0xe9, 0x29, 0xde, 0xc8, 0xc2, + 0xa4, 0x46, 0xc5, 0xa0, 0xb2, 0x23, 0xfb, 0x9d, 0x39, 0x76, 0x80, 0x3f, 0x23, 0x28, 0xc6, 0x3d, + 0x8e, 0xef, 0x64, 0x37, 0xd8, 0x3d, 0x6e, 0xb4, 0xbb, 0xe7, 0xce, 0x53, 0x3c, 0x15, 0xc9, 0xb3, + 0x80, 0xe7, 0x33, 0xf1, 0xc4, 0x83, 0xe8, 0xd5, 0xe1, 0xb1, 0x8e, 0x8e, 0x8e, 0x75, 0xf4, 0xeb, + 0x58, 0x47, 0x1f, 0x4f, 0xf4, 0xc2, 0xd1, 0x89, 0x5e, 0xf8, 0x71, 0xa2, 0x17, 0x5e, 0xaf, 0xb8, + 0x2c, 0x7c, 0xd3, 0x6e, 0x98, 0x36, 0x6f, 0x11, 0x9b, 0x8b, 0x16, 0x17, 0x91, 0xec, 0xa2, 0xcb, + 0xc9, 0x6e, 0xb9, 0x4c, 0x5a, 0xdc, 0x69, 0x37, 0xa9, 0x88, 0x4e, 0xe9, 0x53, 0x97, 0x5f, 0x8d, + 0xa2, 0x8c, 0x56, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0xb9, 0x58, 0xa2, 0x29, 0xe0, 0x08, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -625,7 +640,7 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { func (c *queryClient) IFTBridge(ctx context.Context, in *QueryIFTBridgeRequest, opts ...grpc.CallOption) (*QueryIFTBridgeResponse, error) { out := new(QueryIFTBridgeResponse) - err := c.cc.Invoke(ctx, "/sandbox.ift.Query/IFTBridge", in, out, opts...) + err := c.cc.Invoke(ctx, "/ibc.applications.prototypes.ift.v1.Query/IFTBridge", in, out, opts...) if err != nil { return nil, err } @@ -634,7 +649,7 @@ func (c *queryClient) IFTBridge(ctx context.Context, in *QueryIFTBridgeRequest, func (c *queryClient) IFTBridges(ctx context.Context, in *QueryIFTBridgesRequest, opts ...grpc.CallOption) (*QueryIFTBridgesResponse, error) { out := new(QueryIFTBridgesResponse) - err := c.cc.Invoke(ctx, "/sandbox.ift.Query/IFTBridges", in, out, opts...) + err := c.cc.Invoke(ctx, "/ibc.applications.prototypes.ift.v1.Query/IFTBridges", in, out, opts...) if err != nil { return nil, err } @@ -643,7 +658,7 @@ func (c *queryClient) IFTBridges(ctx context.Context, in *QueryIFTBridgesRequest func (c *queryClient) IFTBridgesByDenom(ctx context.Context, in *QueryIFTBridgesByDenomRequest, opts ...grpc.CallOption) (*QueryIFTBridgesByDenomResponse, error) { out := new(QueryIFTBridgesByDenomResponse) - err := c.cc.Invoke(ctx, "/sandbox.ift.Query/IFTBridgesByDenom", in, out, opts...) + err := c.cc.Invoke(ctx, "/ibc.applications.prototypes.ift.v1.Query/IFTBridgesByDenom", in, out, opts...) if err != nil { return nil, err } @@ -652,7 +667,7 @@ func (c *queryClient) IFTBridgesByDenom(ctx context.Context, in *QueryIFTBridges func (c *queryClient) PendingTransfer(ctx context.Context, in *QueryPendingTransferRequest, opts ...grpc.CallOption) (*QueryPendingTransferResponse, error) { out := new(QueryPendingTransferResponse) - err := c.cc.Invoke(ctx, "/sandbox.ift.Query/PendingTransfer", in, out, opts...) + err := c.cc.Invoke(ctx, "/ibc.applications.prototypes.ift.v1.Query/PendingTransfer", in, out, opts...) if err != nil { return nil, err } @@ -661,7 +676,7 @@ func (c *queryClient) PendingTransfer(ctx context.Context, in *QueryPendingTrans func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { out := new(QueryParamsResponse) - err := c.cc.Invoke(ctx, "/sandbox.ift.Query/Params", in, out, opts...) + err := c.cc.Invoke(ctx, "/ibc.applications.prototypes.ift.v1.Query/Params", in, out, opts...) if err != nil { return nil, err } @@ -717,7 +732,7 @@ func _Query_IFTBridge_Handler(srv interface{}, ctx context.Context, dec func(int } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/sandbox.ift.Query/IFTBridge", + FullMethod: "/ibc.applications.prototypes.ift.v1.Query/IFTBridge", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).IFTBridge(ctx, req.(*QueryIFTBridgeRequest)) @@ -735,7 +750,7 @@ func _Query_IFTBridges_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/sandbox.ift.Query/IFTBridges", + FullMethod: "/ibc.applications.prototypes.ift.v1.Query/IFTBridges", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).IFTBridges(ctx, req.(*QueryIFTBridgesRequest)) @@ -753,7 +768,7 @@ func _Query_IFTBridgesByDenom_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/sandbox.ift.Query/IFTBridgesByDenom", + FullMethod: "/ibc.applications.prototypes.ift.v1.Query/IFTBridgesByDenom", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).IFTBridgesByDenom(ctx, req.(*QueryIFTBridgesByDenomRequest)) @@ -771,7 +786,7 @@ func _Query_PendingTransfer_Handler(srv interface{}, ctx context.Context, dec fu } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/sandbox.ift.Query/PendingTransfer", + FullMethod: "/ibc.applications.prototypes.ift.v1.Query/PendingTransfer", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).PendingTransfer(ctx, req.(*QueryPendingTransferRequest)) @@ -789,7 +804,7 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/sandbox.ift.Query/Params", + FullMethod: "/ibc.applications.prototypes.ift.v1.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) diff --git a/modules/apps/prototypes/ift/types/query.pb.gw.go b/modules/apps/prototypes/ift/types/query.pb.gw.go index 3b36cd1d6a4..d106ce3134d 100644 --- a/modules/apps/prototypes/ift/types/query.pb.gw.go +++ b/modules/apps/prototypes/ift/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: ibc/applications/ift/v1/query.proto +// source: ibc/applications/prototypes/ift/v1/query.proto /* Package types is a reverse proxy. @@ -563,15 +563,15 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_IFTBridge_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"sandbox", "ift", "bridge", "denom", "client_id"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_IFTBridge_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"ibc", "applications", "prototypes", "ift", "v1", "bridge", "denom", "client_id"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_IFTBridges_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"sandbox", "ift", "bridges"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_IFTBridges_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5}, []string{"ibc", "applications", "prototypes", "ift", "v1", "bridges"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_IFTBridgesByDenom_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"sandbox", "ift", "bridges", "denom"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_IFTBridgesByDenom_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6}, []string{"ibc", "applications", "prototypes", "ift", "v1", "bridges", "denom"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_PendingTransfer_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"sandbox", "ift", "pending", "denom", "client_id", "sequence"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_PendingTransfer_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7, 1, 0, 4, 1, 5, 8}, []string{"ibc", "applications", "prototypes", "ift", "v1", "pending", "denom", "client_id", "sequence"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"sandbox", "ift", "params"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5}, []string{"ibc", "applications", "prototypes", "ift", "v1", "params"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( diff --git a/modules/apps/prototypes/ift/types/tx.pb.go b/modules/apps/prototypes/ift/types/tx.pb.go index 3f978f3c646..8b1b4afaf69 100644 --- a/modules/apps/prototypes/ift/types/tx.pb.go +++ b/modules/apps/prototypes/ift/types/tx.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: ibc/applications/ift/v1/tx.proto +// source: ibc/applications/prototypes/ift/v1/tx.proto package types @@ -54,7 +54,7 @@ func (m *MsgRegisterIFTBridge) Reset() { *m = MsgRegisterIFTBridge{} } func (m *MsgRegisterIFTBridge) String() string { return proto.CompactTextString(m) } func (*MsgRegisterIFTBridge) ProtoMessage() {} func (*MsgRegisterIFTBridge) Descriptor() ([]byte, []int) { - return fileDescriptor_c3924d107e50751d, []int{0} + return fileDescriptor_7297fb80c033062b, []int{0} } func (m *MsgRegisterIFTBridge) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -118,6 +118,7 @@ func (m *MsgRegisterIFTBridge) GetIftSendCallConstructor() string { return "" } +// MsgRegisterIFTBridgeResponse is the response type for the RegisterIFTBridge RPC method. type MsgRegisterIFTBridgeResponse struct { } @@ -125,7 +126,7 @@ func (m *MsgRegisterIFTBridgeResponse) Reset() { *m = MsgRegisterIFTBrid func (m *MsgRegisterIFTBridgeResponse) String() string { return proto.CompactTextString(m) } func (*MsgRegisterIFTBridgeResponse) ProtoMessage() {} func (*MsgRegisterIFTBridgeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_c3924d107e50751d, []int{1} + return fileDescriptor_7297fb80c033062b, []int{1} } func (m *MsgRegisterIFTBridgeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -169,7 +170,7 @@ func (m *MsgRemoveIFTBridge) Reset() { *m = MsgRemoveIFTBridge{} } func (m *MsgRemoveIFTBridge) String() string { return proto.CompactTextString(m) } func (*MsgRemoveIFTBridge) ProtoMessage() {} func (*MsgRemoveIFTBridge) Descriptor() ([]byte, []int) { - return fileDescriptor_c3924d107e50751d, []int{2} + return fileDescriptor_7297fb80c033062b, []int{2} } func (m *MsgRemoveIFTBridge) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -219,6 +220,7 @@ func (m *MsgRemoveIFTBridge) GetClientId() string { return "" } +// MsgRemoveIFTBridgeResponse is the response type for the RemoveIFTBridge RPC method. type MsgRemoveIFTBridgeResponse struct { } @@ -226,7 +228,7 @@ func (m *MsgRemoveIFTBridgeResponse) Reset() { *m = MsgRemoveIFTBridgeRe func (m *MsgRemoveIFTBridgeResponse) String() string { return proto.CompactTextString(m) } func (*MsgRemoveIFTBridgeResponse) ProtoMessage() {} func (*MsgRemoveIFTBridgeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_c3924d107e50751d, []int{3} + return fileDescriptor_7297fb80c033062b, []int{3} } func (m *MsgRemoveIFTBridgeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -275,7 +277,7 @@ func (m *MsgIFTTransfer) Reset() { *m = MsgIFTTransfer{} } func (m *MsgIFTTransfer) String() string { return proto.CompactTextString(m) } func (*MsgIFTTransfer) ProtoMessage() {} func (*MsgIFTTransfer) Descriptor() ([]byte, []int) { - return fileDescriptor_c3924d107e50751d, []int{4} + return fileDescriptor_7297fb80c033062b, []int{4} } func (m *MsgIFTTransfer) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -339,6 +341,7 @@ func (m *MsgIFTTransfer) GetTimeoutTimestamp() uint64 { return 0 } +// MsgIFTTransferResponse is the response type for the IFTTransfer RPC method. type MsgIFTTransferResponse struct { // The sequence number of the IBC packet Sequence uint64 `protobuf:"varint,1,opt,name=sequence,proto3" json:"sequence,omitempty"` @@ -348,7 +351,7 @@ func (m *MsgIFTTransferResponse) Reset() { *m = MsgIFTTransferResponse{} func (m *MsgIFTTransferResponse) String() string { return proto.CompactTextString(m) } func (*MsgIFTTransferResponse) ProtoMessage() {} func (*MsgIFTTransferResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_c3924d107e50751d, []int{5} + return fileDescriptor_7297fb80c033062b, []int{5} } func (m *MsgIFTTransferResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -401,7 +404,7 @@ func (m *MsgIFTMint) Reset() { *m = MsgIFTMint{} } func (m *MsgIFTMint) String() string { return proto.CompactTextString(m) } func (*MsgIFTMint) ProtoMessage() {} func (*MsgIFTMint) Descriptor() ([]byte, []int) { - return fileDescriptor_c3924d107e50751d, []int{6} + return fileDescriptor_7297fb80c033062b, []int{6} } func (m *MsgIFTMint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -451,6 +454,7 @@ func (m *MsgIFTMint) GetReceiver() string { return "" } +// MsgIFTMintResponse is the response type for the IFTMint RPC method. type MsgIFTMintResponse struct { } @@ -458,7 +462,7 @@ func (m *MsgIFTMintResponse) Reset() { *m = MsgIFTMintResponse{} } func (m *MsgIFTMintResponse) String() string { return proto.CompactTextString(m) } func (*MsgIFTMintResponse) ProtoMessage() {} func (*MsgIFTMintResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_c3924d107e50751d, []int{7} + return fileDescriptor_7297fb80c033062b, []int{7} } func (m *MsgIFTMintResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -499,7 +503,7 @@ func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } func (*MsgUpdateParams) ProtoMessage() {} func (*MsgUpdateParams) Descriptor() ([]byte, []int) { - return fileDescriptor_c3924d107e50751d, []int{8} + return fileDescriptor_7297fb80c033062b, []int{8} } func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -542,6 +546,7 @@ func (m *MsgUpdateParams) GetParams() Params { return Params{} } +// MsgUpdateParamsResponse is the response type for the UpdateParams RPC method. type MsgUpdateParamsResponse struct { } @@ -549,7 +554,7 @@ func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateParamsResponse) ProtoMessage() {} func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_c3924d107e50751d, []int{9} + return fileDescriptor_7297fb80c033062b, []int{9} } func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -591,56 +596,60 @@ func init() { proto.RegisterType((*MsgUpdateParamsResponse)(nil), "ibc.applications.prototypes.ift.v1.MsgUpdateParamsResponse") } -func init() { proto.RegisterFile("ibc/applications/prototypes/ift/v1/tx.proto", fileDescriptor_c3924d107e50751d) } - -var fileDescriptor_c3924d107e50751d = []byte{ - // 723 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0x41, 0x4f, 0x1b, 0x39, - 0x18, 0xcd, 0x90, 0x90, 0x85, 0x2f, 0x2b, 0x58, 0x66, 0x03, 0x0c, 0x03, 0x4a, 0xd8, 0x6c, 0xa5, - 0x52, 0x28, 0x99, 0x42, 0x51, 0xd5, 0x72, 0x6b, 0x22, 0x21, 0xe5, 0x10, 0xb5, 0x1a, 0xd2, 0x4b, - 0x7b, 0x88, 0xcc, 0x8c, 0x33, 0x58, 0xcd, 0xd8, 0xa9, 0xed, 0x20, 0xb8, 0x55, 0x3d, 0xf4, 0xd4, - 0x03, 0x3f, 0x85, 0x03, 0xea, 0x6f, 0xe0, 0x88, 0x38, 0x55, 0x55, 0x85, 0x2a, 0x38, 0xf0, 0x2b, - 0x2a, 0x55, 0x33, 0xe3, 0x0c, 0x49, 0x48, 0x89, 0x54, 0x55, 0x9c, 0x12, 0x7f, 0xef, 0x7d, 0xcf, - 0xcf, 0xcf, 0xf6, 0x18, 0xb2, 0x02, 0x51, 0x77, 0x87, 0xed, 0x5b, 0xa4, 0x21, 0x2d, 0xb9, 0x5f, - 0x6c, 0x71, 0x26, 0x99, 0x9e, 0x51, 0xd5, 0x22, 0x69, 0x48, 0x73, 0xd6, 0x61, 0xc2, 0x67, 0xc2, - 0xf2, 0x85, 0x67, 0xed, 0xad, 0x05, 0x3f, 0x11, 0xcb, 0x9c, 0x8b, 0x80, 0x7a, 0x38, 0xb2, 0xa2, - 0x81, 0x82, 0xb2, 0x1e, 0xf3, 0x58, 0x54, 0x0f, 0xfe, 0xa9, 0xea, 0x74, 0xf7, 0x64, 0xa4, 0x21, - 0xa3, 0x72, 0xe1, 0x87, 0x06, 0xd9, 0xaa, 0xf0, 0x6c, 0xec, 0x11, 0x21, 0x31, 0xaf, 0x6c, 0xd5, - 0x4a, 0x9c, 0xb8, 0x1e, 0xd6, 0x1f, 0x41, 0x5a, 0x10, 0x8f, 0x62, 0x6e, 0x68, 0x8b, 0xda, 0xd2, - 0x78, 0xc9, 0x38, 0x3b, 0x5e, 0xcd, 0xaa, 0x79, 0x9e, 0xbb, 0x2e, 0xc7, 0x42, 0x6c, 0x4b, 0x4e, - 0xa8, 0x67, 0x2b, 0x9e, 0x9e, 0x85, 0x51, 0x17, 0x53, 0xe6, 0x1b, 0x23, 0x41, 0x83, 0x1d, 0x0d, - 0xf4, 0x79, 0x18, 0x77, 0x9a, 0x04, 0x53, 0x59, 0x27, 0xae, 0x91, 0x0c, 0x91, 0xb1, 0xa8, 0x50, - 0x71, 0xf5, 0xa7, 0x60, 0x38, 0xac, 0x4d, 0x25, 0xe6, 0x2d, 0xc4, 0xe5, 0x41, 0x9d, 0x34, 0x64, - 0x1d, 0x45, 0xe2, 0x46, 0x2a, 0xe4, 0xce, 0x74, 0xe3, 0x95, 0x86, 0x54, 0x53, 0xeb, 0xcf, 0x60, - 0x2e, 0x20, 0x0b, 0x4c, 0xdd, 0xba, 0x83, 0x9a, 0xcd, 0xba, 0xc3, 0xa8, 0x90, 0xbc, 0xed, 0x48, - 0xc6, 0x8d, 0xd1, 0xa8, 0x95, 0x34, 0xe4, 0x36, 0xa6, 0x6e, 0x19, 0x35, 0x9b, 0xe5, 0x6b, 0x74, - 0x33, 0xf3, 0xe1, 0xea, 0x68, 0x59, 0x99, 0x2e, 0xe4, 0x60, 0x61, 0xd0, 0xf2, 0x6d, 0x2c, 0x5a, - 0x8c, 0x0a, 0x5c, 0xf8, 0xa8, 0x81, 0x1e, 0x12, 0x7c, 0xb6, 0x87, 0xef, 0x36, 0x9d, 0x5e, 0xa3, - 0x0b, 0x60, 0xde, 0xf4, 0x11, 0xdb, 0x3c, 0x1c, 0x81, 0x89, 0xaa, 0xf0, 0x2a, 0x5b, 0xb5, 0x1a, - 0x47, 0x54, 0x34, 0x30, 0xbf, 0x9b, 0x0d, 0x34, 0x61, 0x8c, 0x63, 0x07, 0x93, 0x3d, 0xcc, 0xd5, - 0x86, 0xc5, 0x63, 0xbd, 0x0c, 0x69, 0xe4, 0x07, 0xbb, 0x17, 0xed, 0x47, 0x69, 0xe5, 0xe4, 0x3c, - 0x9f, 0xf8, 0x7a, 0x9e, 0x9f, 0x8e, 0x4c, 0x08, 0xf7, 0x6d, 0x91, 0x30, 0xcb, 0x47, 0x72, 0xb7, - 0x58, 0xa1, 0xf2, 0xec, 0x78, 0x15, 0x94, 0xbb, 0x0a, 0x95, 0xb6, 0x6a, 0xd5, 0x57, 0x60, 0x4a, - 0x12, 0x1f, 0xb3, 0xb6, 0xac, 0x07, 0xbf, 0x42, 0x22, 0xbf, 0x65, 0xa4, 0x17, 0xb5, 0xa5, 0x94, - 0xfd, 0x8f, 0x02, 0x6a, 0x9d, 0x7a, 0x6f, 0x60, 0x1b, 0x30, 0xd3, 0x9b, 0x48, 0x27, 0xac, 0xc0, - 0xb4, 0xc0, 0xef, 0xda, 0x98, 0x3a, 0x38, 0xcc, 0x26, 0x65, 0xc7, 0xe3, 0xc2, 0x37, 0x0d, 0x20, - 0x6a, 0xab, 0x12, 0x2a, 0xff, 0x58, 0x88, 0x1b, 0x5d, 0x39, 0x25, 0x87, 0x28, 0x0d, 0x4a, 0x30, - 0xf5, 0xdb, 0x09, 0xf6, 0x86, 0x92, 0x0d, 0x4f, 0xb3, 0x5a, 0x5d, 0x7c, 0x7a, 0x3e, 0x69, 0x30, - 0x59, 0x15, 0xde, 0xab, 0x96, 0x8b, 0x24, 0x7e, 0x89, 0x38, 0xf2, 0x85, 0xfe, 0x04, 0xc6, 0x51, - 0x5b, 0xee, 0x32, 0x4e, 0xe4, 0xc1, 0xd0, 0xc5, 0x5f, 0x53, 0xf5, 0x35, 0x48, 0xb7, 0x42, 0x85, - 0x30, 0x80, 0xcc, 0xfa, 0xbf, 0xc5, 0xae, 0xef, 0x59, 0x31, 0x12, 0x2f, 0xa5, 0x82, 0x85, 0xd8, - 0x8a, 0xb8, 0x39, 0x11, 0x38, 0xbc, 0x96, 0x28, 0xcc, 0xc1, 0x6c, 0x9f, 0x9b, 0x8e, 0xd3, 0xf5, - 0xcf, 0x49, 0x48, 0x56, 0x85, 0xa7, 0x23, 0x98, 0xba, 0xf9, 0xc9, 0xfa, 0xaf, 0x67, 0xaa, 0x41, - 0xd7, 0xda, 0x7c, 0x30, 0x94, 0x12, 0x9f, 0x92, 0x37, 0x30, 0xd9, 0x7f, 0xeb, 0xf3, 0x37, 0xbb, - 0x7b, 0x08, 0xe6, 0xfd, 0x21, 0x84, 0x58, 0xfc, 0x05, 0x64, 0xba, 0xef, 0xea, 0x7c, 0x7f, 0x5f, - 0x17, 0x68, 0xfe, 0x7f, 0x0b, 0x18, 0x0b, 0x96, 0xe1, 0xaf, 0xce, 0x99, 0x9d, 0x1d, 0xc0, 0x0f, - 0x00, 0x33, 0xff, 0x0b, 0x20, 0x16, 0xb1, 0xe1, 0xef, 0x9e, 0x33, 0xb0, 0xd0, 0xdf, 0xd0, 0x8d, - 0x9a, 0xf7, 0x6e, 0x43, 0x3b, 0x9a, 0xe6, 0xe8, 0xfb, 0xab, 0xa3, 0x65, 0xad, 0xb4, 0x75, 0x72, - 0x91, 0xd3, 0x4e, 0x2f, 0x72, 0xda, 0xf7, 0x8b, 0x9c, 0x76, 0x78, 0x99, 0x4b, 0x9c, 0x5e, 0xe6, - 0x12, 0x5f, 0x2e, 0x73, 0x89, 0xd7, 0x0f, 0x3d, 0x22, 0x77, 0xdb, 0x3b, 0x45, 0x87, 0xf9, 0xea, - 0x1d, 0xb3, 0x94, 0xee, 0x6a, 0x13, 0xbb, 0x1e, 0xe6, 0x96, 0x7a, 0x20, 0x0f, 0x5a, 0x58, 0xec, - 0xa4, 0xc3, 0x67, 0xeb, 0xf1, 0xcf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe8, 0x07, 0xf9, 0x07, 0x3c, - 0x07, 0x00, 0x00, +func init() { + proto.RegisterFile("ibc/applications/prototypes/ift/v1/tx.proto", fileDescriptor_7297fb80c033062b) +} + +var fileDescriptor_7297fb80c033062b = []byte{ + // 761 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0x4f, 0x4b, 0x1b, 0x41, + 0x14, 0xcf, 0x6a, 0x92, 0xea, 0xb3, 0x68, 0x5d, 0x52, 0x5d, 0xb7, 0x12, 0x25, 0x27, 0xd1, 0xba, + 0xdb, 0xa8, 0x88, 0xb5, 0x20, 0x6d, 0x04, 0x69, 0x0e, 0x81, 0xb2, 0xa6, 0x50, 0x7a, 0x09, 0x9b, + 0xdd, 0xc9, 0x3a, 0x34, 0x3b, 0xb3, 0xce, 0x4c, 0x42, 0x3d, 0x14, 0xa4, 0x87, 0x42, 0x4f, 0xf5, + 0x1b, 0xf4, 0xd0, 0x2f, 0xe0, 0xc1, 0x0f, 0xe1, 0x51, 0x3c, 0x95, 0x52, 0xa4, 0xe8, 0xc1, 0x4f, + 0x51, 0x28, 0xfb, 0x27, 0x9b, 0x44, 0x05, 0x63, 0x28, 0x9e, 0xb2, 0xf3, 0xde, 0xef, 0xf7, 0xde, + 0x6f, 0x7e, 0x33, 0x79, 0x03, 0x0b, 0xb8, 0x6a, 0xe9, 0xa6, 0xe7, 0xd5, 0xb1, 0x65, 0x0a, 0x4c, + 0x09, 0xd7, 0x3d, 0x46, 0x05, 0x15, 0x7b, 0x1e, 0xe2, 0x3a, 0xae, 0x09, 0xbd, 0x99, 0xd7, 0xc5, + 0x47, 0x2d, 0x08, 0xca, 0x39, 0x5c, 0xb5, 0xb4, 0x4e, 0xb0, 0xd6, 0x06, 0x6b, 0xb8, 0x26, 0xb4, + 0x66, 0x5e, 0x9d, 0xb4, 0x28, 0x77, 0x29, 0xd7, 0x5d, 0xee, 0xf8, 0x5c, 0x97, 0x3b, 0x21, 0x48, + 0x9d, 0x0a, 0x13, 0x95, 0x60, 0xa5, 0x87, 0x8b, 0x28, 0x95, 0x71, 0xa8, 0x43, 0xc3, 0xb8, 0xff, + 0x15, 0x45, 0x9f, 0xf6, 0x20, 0xcd, 0x6f, 0x1a, 0x44, 0x73, 0x7f, 0x25, 0xc8, 0x94, 0xb8, 0x63, + 0x20, 0x07, 0x73, 0x81, 0x58, 0x71, 0xab, 0x5c, 0x60, 0xd8, 0x76, 0x90, 0xfc, 0x0c, 0xd2, 0x1c, + 0x3b, 0x04, 0x31, 0x45, 0x9a, 0x95, 0xe6, 0x86, 0x0b, 0xca, 0xe9, 0xd1, 0x62, 0x26, 0x6a, 0xff, + 0xca, 0xb6, 0x19, 0xe2, 0x7c, 0x5b, 0x30, 0x4c, 0x1c, 0x23, 0xc2, 0xc9, 0x19, 0x48, 0xd9, 0x88, + 0x50, 0x57, 0x19, 0xf0, 0x09, 0x46, 0xb8, 0x90, 0x9f, 0xc0, 0xb0, 0x55, 0xc7, 0x88, 0x88, 0x0a, + 0xb6, 0x95, 0xc1, 0x20, 0x33, 0x14, 0x06, 0x8a, 0xb6, 0xbc, 0x06, 0x8a, 0x45, 0x1b, 0x44, 0x20, + 0xe6, 0x99, 0x4c, 0xec, 0x55, 0x70, 0x4d, 0x54, 0xcc, 0xb0, 0xb8, 0x92, 0x0c, 0xb0, 0x13, 0x9d, + 0xf9, 0x62, 0x4d, 0x44, 0xad, 0xe5, 0xe7, 0x30, 0xe5, 0x83, 0x39, 0x22, 0x76, 0xc5, 0x32, 0xeb, + 0xf5, 0x8a, 0x45, 0x09, 0x17, 0xac, 0x61, 0x09, 0xca, 0x94, 0x54, 0x48, 0xc5, 0x35, 0xb1, 0x8d, + 0x88, 0xbd, 0x69, 0xd6, 0xeb, 0x9b, 0xed, 0xec, 0xfa, 0xc8, 0xe7, 0xcb, 0xc3, 0xf9, 0x48, 0x74, + 0x2e, 0x0b, 0xd3, 0x37, 0x6d, 0xdf, 0x40, 0xdc, 0xa3, 0x84, 0xa3, 0xdc, 0x17, 0x09, 0xe4, 0x00, + 0xe0, 0xd2, 0x26, 0xba, 0x5f, 0x77, 0xba, 0x85, 0x4e, 0x83, 0x7a, 0x5d, 0x47, 0x2c, 0xf3, 0x60, + 0x00, 0x46, 0x4b, 0xdc, 0x29, 0x6e, 0x95, 0xcb, 0xcc, 0x24, 0xbc, 0x86, 0xd8, 0xfd, 0x1c, 0xa0, + 0x0a, 0x43, 0x0c, 0x59, 0x08, 0x37, 0x11, 0x8b, 0x0e, 0x2c, 0x5e, 0xcb, 0x9b, 0x90, 0x36, 0x5d, + 0xff, 0xf4, 0xc2, 0xf3, 0x28, 0x2c, 0x1c, 0x9f, 0xcd, 0x24, 0x7e, 0x9d, 0xcd, 0x3c, 0x0e, 0x45, + 0x70, 0xfb, 0x83, 0x86, 0xa9, 0xee, 0x9a, 0x62, 0x47, 0x2b, 0x12, 0x71, 0x7a, 0xb4, 0x08, 0x91, + 0xba, 0x22, 0x11, 0x46, 0x44, 0x95, 0x17, 0x60, 0x5c, 0x60, 0x17, 0xd1, 0x86, 0xa8, 0xf8, 0xbf, + 0x5c, 0x98, 0xae, 0xa7, 0xa4, 0x67, 0xa5, 0xb9, 0xa4, 0xf1, 0x28, 0x4a, 0x94, 0x5b, 0xf1, 0x6e, + 0xc3, 0x56, 0x60, 0xa2, 0xdb, 0x91, 0x96, 0x59, 0xbe, 0x68, 0x8e, 0x76, 0x1b, 0x88, 0x58, 0x28, + 0xf0, 0x26, 0x69, 0xc4, 0xeb, 0xdc, 0x6f, 0x09, 0x20, 0xa4, 0x95, 0x30, 0x11, 0xff, 0xcd, 0xc4, + 0x95, 0x0e, 0x9f, 0x06, 0x6f, 0xa9, 0x74, 0x93, 0x83, 0xc9, 0xbe, 0x1d, 0xec, 0x36, 0x25, 0x13, + 0xdc, 0xe6, 0x68, 0x77, 0xf1, 0xed, 0xf9, 0x21, 0xc1, 0x58, 0x89, 0x3b, 0x6f, 0x3d, 0xdb, 0x14, + 0xe8, 0x8d, 0xc9, 0x4c, 0x97, 0xcb, 0xab, 0x30, 0x6c, 0x36, 0xc4, 0x0e, 0x65, 0x58, 0xec, 0xdd, + 0xba, 0xf9, 0x36, 0x54, 0x7e, 0x0d, 0x69, 0x2f, 0xa8, 0x10, 0x18, 0x30, 0xb2, 0x34, 0xaf, 0xdd, + 0x3e, 0xfd, 0xb4, 0xb0, 0x67, 0x21, 0xe9, 0xef, 0xcf, 0x88, 0xf8, 0xeb, 0xa3, 0xbe, 0xf0, 0x76, + 0xe5, 0xdc, 0x14, 0x4c, 0x5e, 0x11, 0xd9, 0xda, 0xc0, 0xd2, 0xf7, 0x14, 0x0c, 0x96, 0xb8, 0x23, + 0x7f, 0x93, 0x60, 0xfc, 0xfa, 0x28, 0x5b, 0xeb, 0x45, 0xc2, 0x4d, 0x53, 0x40, 0x7d, 0xd9, 0x2f, + 0x33, 0xbe, 0x6b, 0x5f, 0x25, 0x18, 0xbb, 0x3a, 0x3c, 0x56, 0x7b, 0xae, 0xda, 0xc5, 0x53, 0x37, + 0xfa, 0xe3, 0xc5, 0x5a, 0x3e, 0xc1, 0x48, 0xe7, 0x80, 0x58, 0xea, 0xb1, 0x5c, 0x07, 0x47, 0x5d, + 0xbf, 0x3b, 0x27, 0x6e, 0xbf, 0x0b, 0x0f, 0x5a, 0x7f, 0x2b, 0xad, 0xf7, 0x32, 0x3e, 0x5e, 0x5d, + 0xbd, 0x1b, 0x3e, 0x6e, 0xb9, 0x2f, 0xc1, 0xc3, 0xae, 0x5b, 0xbd, 0xdc, 0x63, 0xa1, 0x4e, 0x92, + 0xfa, 0xa2, 0x0f, 0x52, 0x4b, 0x82, 0x9a, 0xda, 0xbf, 0x3c, 0x9c, 0x97, 0x0a, 0xef, 0x8e, 0xcf, + 0xb3, 0xd2, 0xc9, 0x79, 0x56, 0xfa, 0x73, 0x9e, 0x95, 0x0e, 0x2e, 0xb2, 0x89, 0x93, 0x8b, 0x6c, + 0xe2, 0xe7, 0x45, 0x36, 0xf1, 0x7e, 0xc3, 0xc1, 0x62, 0xa7, 0x51, 0xd5, 0x2c, 0xea, 0x46, 0xcf, + 0xbb, 0x8e, 0xab, 0xd6, 0xa2, 0x43, 0xf5, 0x66, 0x3e, 0xaf, 0xbb, 0xd4, 0x6e, 0xd4, 0x11, 0xf7, + 0x1f, 0xf4, 0x6b, 0x0f, 0x79, 0xf0, 0x55, 0x4d, 0x07, 0xd1, 0xe5, 0x7f, 0x01, 0x00, 0x00, 0xff, + 0xff, 0x33, 0xdf, 0x82, 0x81, 0x93, 0x08, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -677,7 +686,7 @@ func NewMsgClient(cc grpc1.ClientConn) MsgClient { func (c *msgClient) RegisterIFTBridge(ctx context.Context, in *MsgRegisterIFTBridge, opts ...grpc.CallOption) (*MsgRegisterIFTBridgeResponse, error) { out := new(MsgRegisterIFTBridgeResponse) - err := c.cc.Invoke(ctx, "/sandbox.ift.Msg/RegisterIFTBridge", in, out, opts...) + err := c.cc.Invoke(ctx, "/ibc.applications.prototypes.ift.v1.Msg/RegisterIFTBridge", in, out, opts...) if err != nil { return nil, err } @@ -686,7 +695,7 @@ func (c *msgClient) RegisterIFTBridge(ctx context.Context, in *MsgRegisterIFTBri func (c *msgClient) RemoveIFTBridge(ctx context.Context, in *MsgRemoveIFTBridge, opts ...grpc.CallOption) (*MsgRemoveIFTBridgeResponse, error) { out := new(MsgRemoveIFTBridgeResponse) - err := c.cc.Invoke(ctx, "/sandbox.ift.Msg/RemoveIFTBridge", in, out, opts...) + err := c.cc.Invoke(ctx, "/ibc.applications.prototypes.ift.v1.Msg/RemoveIFTBridge", in, out, opts...) if err != nil { return nil, err } @@ -695,7 +704,7 @@ func (c *msgClient) RemoveIFTBridge(ctx context.Context, in *MsgRemoveIFTBridge, func (c *msgClient) IFTTransfer(ctx context.Context, in *MsgIFTTransfer, opts ...grpc.CallOption) (*MsgIFTTransferResponse, error) { out := new(MsgIFTTransferResponse) - err := c.cc.Invoke(ctx, "/sandbox.ift.Msg/IFTTransfer", in, out, opts...) + err := c.cc.Invoke(ctx, "/ibc.applications.prototypes.ift.v1.Msg/IFTTransfer", in, out, opts...) if err != nil { return nil, err } @@ -704,7 +713,7 @@ func (c *msgClient) IFTTransfer(ctx context.Context, in *MsgIFTTransfer, opts .. func (c *msgClient) IFTMint(ctx context.Context, in *MsgIFTMint, opts ...grpc.CallOption) (*MsgIFTMintResponse, error) { out := new(MsgIFTMintResponse) - err := c.cc.Invoke(ctx, "/sandbox.ift.Msg/IFTMint", in, out, opts...) + err := c.cc.Invoke(ctx, "/ibc.applications.prototypes.ift.v1.Msg/IFTMint", in, out, opts...) if err != nil { return nil, err } @@ -713,7 +722,7 @@ func (c *msgClient) IFTMint(ctx context.Context, in *MsgIFTMint, opts ...grpc.Ca func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { out := new(MsgUpdateParamsResponse) - err := c.cc.Invoke(ctx, "/sandbox.ift.Msg/UpdateParams", in, out, opts...) + err := c.cc.Invoke(ctx, "/ibc.applications.prototypes.ift.v1.Msg/UpdateParams", in, out, opts...) if err != nil { return nil, err } @@ -768,7 +777,7 @@ func _Msg_RegisterIFTBridge_Handler(srv interface{}, ctx context.Context, dec fu } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/sandbox.ift.Msg/RegisterIFTBridge", + FullMethod: "/ibc.applications.prototypes.ift.v1.Msg/RegisterIFTBridge", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).RegisterIFTBridge(ctx, req.(*MsgRegisterIFTBridge)) @@ -786,7 +795,7 @@ func _Msg_RemoveIFTBridge_Handler(srv interface{}, ctx context.Context, dec func } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/sandbox.ift.Msg/RemoveIFTBridge", + FullMethod: "/ibc.applications.prototypes.ift.v1.Msg/RemoveIFTBridge", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).RemoveIFTBridge(ctx, req.(*MsgRemoveIFTBridge)) @@ -804,7 +813,7 @@ func _Msg_IFTTransfer_Handler(srv interface{}, ctx context.Context, dec func(int } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/sandbox.ift.Msg/IFTTransfer", + FullMethod: "/ibc.applications.prototypes.ift.v1.Msg/IFTTransfer", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).IFTTransfer(ctx, req.(*MsgIFTTransfer)) @@ -822,7 +831,7 @@ func _Msg_IFTMint_Handler(srv interface{}, ctx context.Context, dec func(interfa } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/sandbox.ift.Msg/IFTMint", + FullMethod: "/ibc.applications.prototypes.ift.v1.Msg/IFTMint", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).IFTMint(ctx, req.(*MsgIFTMint)) @@ -840,7 +849,7 @@ func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/sandbox.ift.Msg/UpdateParams", + FullMethod: "/ibc.applications.prototypes.ift.v1.Msg/UpdateParams", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) diff --git a/modules/apps/prototypes/tokenfactory/types/genesis.pb.go b/modules/apps/prototypes/tokenfactory/types/genesis.pb.go index 7071f4d54ba..1c63f8df4b2 100644 --- a/modules/apps/prototypes/tokenfactory/types/genesis.pb.go +++ b/modules/apps/prototypes/tokenfactory/types/genesis.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: ibc/applications/tokenfactory/v1/genesis.proto +// source: ibc/applications/prototypes/tokenfactory/v1/genesis.proto package types @@ -33,7 +33,7 @@ func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_3dab0b9f9ff24ee2, []int{0} + return fileDescriptor_46b125e8381e08cf, []int{0} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -86,7 +86,7 @@ func (m *GenesisDenom) Reset() { *m = GenesisDenom{} } func (m *GenesisDenom) String() string { return proto.CompactTextString(m) } func (*GenesisDenom) ProtoMessage() {} func (*GenesisDenom) Descriptor() ([]byte, []int) { - return fileDescriptor_3dab0b9f9ff24ee2, []int{1} + return fileDescriptor_46b125e8381e08cf, []int{1} } func (m *GenesisDenom) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -135,30 +135,32 @@ func init() { } func init() { - proto.RegisterFile("ibc/applications/prototypes/tokenfactory/v1/genesis.proto", fileDescriptor_3dab0b9f9ff24ee2) + proto.RegisterFile("ibc/applications/prototypes/tokenfactory/v1/genesis.proto", fileDescriptor_46b125e8381e08cf) } -var fileDescriptor_3dab0b9f9ff24ee2 = []byte{ - // 303 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2a, 0x4e, 0xcc, 0x4b, - 0x49, 0xca, 0xaf, 0xd0, 0x2f, 0xc9, 0xcf, 0x4e, 0xcd, 0x4b, 0x4b, 0x4c, 0x2e, 0xc9, 0x2f, 0xaa, - 0xd4, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, - 0x81, 0xaa, 0xd1, 0x43, 0x56, 0x23, 0x25, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x56, 0xa0, 0x0f, 0x62, - 0x41, 0xd4, 0x4a, 0xa9, 0x63, 0x35, 0x0f, 0x99, 0x03, 0x51, 0xa8, 0x34, 0x9b, 0x91, 0x8b, 0xc7, - 0x1d, 0x62, 0x4d, 0x70, 0x49, 0x62, 0x49, 0xaa, 0x90, 0x15, 0x17, 0x5b, 0x41, 0x62, 0x51, 0x62, - 0x6e, 0xb1, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0xb7, 0x91, 0x8c, 0x1e, 0x36, 0x6b, 0xf5, 0x02, 0xc0, - 0x6a, 0x9c, 0x58, 0x4e, 0xdc, 0x93, 0x67, 0x08, 0x82, 0xea, 0x10, 0xf2, 0xe7, 0xe2, 0x83, 0xca, - 0xc7, 0xa7, 0xa4, 0xe6, 0xe5, 0xe7, 0x16, 0x4b, 0x30, 0x29, 0x30, 0x6b, 0x70, 0x1b, 0x29, 0x61, - 0x37, 0x03, 0x6a, 0xaf, 0x0b, 0x48, 0x29, 0xd4, 0x24, 0x5e, 0xa8, 0x1c, 0x58, 0xac, 0x58, 0xa9, - 0x1d, 0xe1, 0x3a, 0xb0, 0x88, 0x90, 0x08, 0x17, 0x2b, 0xd8, 0x64, 0xb0, 0xe3, 0x38, 0x83, 0x20, - 0x1c, 0xa1, 0x44, 0x2e, 0xa1, 0xc4, 0xd2, 0x92, 0x8c, 0xfc, 0xa2, 0xcc, 0x92, 0xca, 0xf8, 0xdc, - 0xd4, 0x92, 0xc4, 0x94, 0xc4, 0x92, 0x44, 0x09, 0x26, 0xb0, 0xfb, 0x75, 0xb0, 0xdb, 0x0d, 0x36, - 0xce, 0x11, 0xa6, 0xc9, 0x17, 0xaa, 0x07, 0xea, 0x0a, 0xc1, 0x44, 0x0c, 0x09, 0xff, 0x13, 0x8f, - 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, - 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0x32, 0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, - 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xce, 0x2f, 0xce, 0xcd, 0x2f, 0xd6, 0x87, 0xda, 0xa8, 0x9b, 0x93, - 0x9a, 0x92, 0x9e, 0x5a, 0xa4, 0x8f, 0x1e, 0x0b, 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0xe0, 0xf0, - 0x37, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xa2, 0xaa, 0x67, 0xd0, 0xfa, 0x01, 0x00, 0x00, +var fileDescriptor_46b125e8381e08cf = []byte{ + // 334 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x51, 0x4f, 0x4b, 0x02, 0x41, + 0x14, 0xdf, 0xb5, 0x12, 0x5a, 0x2b, 0x68, 0xf1, 0x20, 0x1e, 0x36, 0xf1, 0x24, 0x44, 0x33, 0xac, + 0x9e, 0xbc, 0x04, 0xfd, 0x01, 0x4f, 0x41, 0xd9, 0xad, 0x8b, 0xcc, 0x8e, 0xe3, 0x3a, 0xe4, 0xec, + 0x5b, 0x76, 0x46, 0xc9, 0x6f, 0xd1, 0x27, 0xe8, 0xf3, 0xd8, 0xcd, 0x63, 0xa7, 0x08, 0xfd, 0x22, + 0xe1, 0xdb, 0x09, 0x8d, 0xe8, 0xb0, 0xb7, 0x99, 0xf7, 0xfb, 0xfb, 0x78, 0x5e, 0x57, 0x46, 0x9c, + 0xb2, 0x34, 0x9d, 0x48, 0xce, 0x8c, 0x84, 0x44, 0xd3, 0x34, 0x03, 0x03, 0x66, 0x9e, 0x0a, 0x4d, + 0x0d, 0x3c, 0x8b, 0x64, 0xc4, 0xb8, 0x81, 0x6c, 0x4e, 0x67, 0x21, 0x8d, 0x45, 0x22, 0xb4, 0xd4, + 0x04, 0x29, 0xfe, 0xb9, 0x8c, 0x38, 0xd9, 0x95, 0x92, 0xad, 0x94, 0xec, 0x4a, 0xc9, 0x2c, 0xac, + 0x57, 0x63, 0x88, 0x01, 0x71, 0xba, 0x79, 0xe5, 0xd4, 0xfa, 0x65, 0x91, 0xf4, 0x5f, 0x96, 0xc8, + 0x6b, 0xbe, 0xbb, 0xde, 0x51, 0x2f, 0x2f, 0xf5, 0x68, 0x98, 0x11, 0xfe, 0x83, 0x57, 0x4e, 0x59, + 0xc6, 0x94, 0xae, 0xb9, 0x0d, 0xb7, 0x55, 0x69, 0x77, 0x48, 0x81, 0x92, 0xe4, 0x1e, 0xa5, 0xd7, + 0xfb, 0x8b, 0xcf, 0x33, 0xa7, 0x6f, 0x8d, 0xfc, 0x91, 0x77, 0x62, 0x29, 0x83, 0xa1, 0x48, 0x40, + 0xe9, 0x5a, 0xa9, 0xb1, 0xd7, 0xaa, 0xb4, 0xbb, 0x85, 0xac, 0x6d, 0xcb, 0xdb, 0x8d, 0x83, 0x0d, + 0x38, 0xb6, 0x30, 0xce, 0x74, 0xf3, 0x6d, 0xbb, 0x0b, 0x4e, 0xfc, 0xaa, 0x77, 0x80, 0x81, 0xb8, + 0xca, 0x61, 0x3f, 0xff, 0xf8, 0x2f, 0x9e, 0xcf, 0xa6, 0x66, 0x0c, 0x99, 0x34, 0xf3, 0x81, 0x12, + 0x86, 0x0d, 0x99, 0x61, 0xb5, 0x12, 0x6e, 0x7b, 0x53, 0xa8, 0x12, 0xa6, 0x5c, 0xfd, 0x78, 0xdd, + 0x59, 0x2b, 0x5b, 0xee, 0x94, 0xfd, 0x01, 0xd8, 0x62, 0x15, 0xb8, 0xcb, 0x55, 0xe0, 0x7e, 0xad, + 0x02, 0xf7, 0x75, 0x1d, 0x38, 0xcb, 0x75, 0xe0, 0x7c, 0xac, 0x03, 0xe7, 0xa9, 0x17, 0x4b, 0x33, + 0x9e, 0x46, 0x84, 0x83, 0xa2, 0x1c, 0xb4, 0x02, 0x4d, 0x65, 0xc4, 0x2f, 0x62, 0xa0, 0xb3, 0x30, + 0xa4, 0x0a, 0x86, 0xd3, 0x89, 0xd0, 0x9b, 0x3b, 0xff, 0x7f, 0x5f, 0x1c, 0x45, 0x65, 0x84, 0x3b, + 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x97, 0xdb, 0xba, 0x04, 0x96, 0x02, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/modules/apps/prototypes/tokenfactory/types/query.pb.go b/modules/apps/prototypes/tokenfactory/types/query.pb.go index 4282d80503c..d4039460c70 100644 --- a/modules/apps/prototypes/tokenfactory/types/query.pb.go +++ b/modules/apps/prototypes/tokenfactory/types/query.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: ibc/applications/tokenfactory/v1/query.proto +// source: ibc/applications/prototypes/tokenfactory/v1/query.proto package types @@ -39,7 +39,7 @@ func (m *QueryDenomAuthorityMetadataRequest) Reset() { *m = QueryDenomAu func (m *QueryDenomAuthorityMetadataRequest) String() string { return proto.CompactTextString(m) } func (*QueryDenomAuthorityMetadataRequest) ProtoMessage() {} func (*QueryDenomAuthorityMetadataRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_488808f536ccac77, []int{0} + return fileDescriptor_da9e2a6f4df16a32, []int{0} } func (m *QueryDenomAuthorityMetadataRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -85,7 +85,7 @@ func (m *QueryDenomAuthorityMetadataResponse) Reset() { *m = QueryDenomA func (m *QueryDenomAuthorityMetadataResponse) String() string { return proto.CompactTextString(m) } func (*QueryDenomAuthorityMetadataResponse) ProtoMessage() {} func (*QueryDenomAuthorityMetadataResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_488808f536ccac77, []int{1} + return fileDescriptor_da9e2a6f4df16a32, []int{1} } func (m *QueryDenomAuthorityMetadataResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -131,7 +131,7 @@ func (m *QueryDenomsByCreatorRequest) Reset() { *m = QueryDenomsByCreato func (m *QueryDenomsByCreatorRequest) String() string { return proto.CompactTextString(m) } func (*QueryDenomsByCreatorRequest) ProtoMessage() {} func (*QueryDenomsByCreatorRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_488808f536ccac77, []int{2} + return fileDescriptor_da9e2a6f4df16a32, []int{2} } func (m *QueryDenomsByCreatorRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -177,7 +177,7 @@ func (m *QueryDenomsByCreatorResponse) Reset() { *m = QueryDenomsByCreat func (m *QueryDenomsByCreatorResponse) String() string { return proto.CompactTextString(m) } func (*QueryDenomsByCreatorResponse) ProtoMessage() {} func (*QueryDenomsByCreatorResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_488808f536ccac77, []int{3} + return fileDescriptor_da9e2a6f4df16a32, []int{3} } func (m *QueryDenomsByCreatorResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -221,7 +221,7 @@ func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } func (*QueryParamsRequest) ProtoMessage() {} func (*QueryParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_488808f536ccac77, []int{4} + return fileDescriptor_da9e2a6f4df16a32, []int{4} } func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -259,7 +259,7 @@ func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } func (*QueryParamsResponse) ProtoMessage() {} func (*QueryParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_488808f536ccac77, []int{5} + return fileDescriptor_da9e2a6f4df16a32, []int{5} } func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -304,41 +304,45 @@ func init() { proto.RegisterType((*QueryParamsResponse)(nil), "ibc.applications.prototypes.tokenfactory.v1.QueryParamsResponse") } -func init() { proto.RegisterFile("ibc/applications/prototypes/tokenfactory/v1/query.proto", fileDescriptor_488808f536ccac77) } - -var fileDescriptor_488808f536ccac77 = []byte{ - // 485 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x41, 0x6b, 0x13, 0x41, - 0x14, 0xce, 0x68, 0x1b, 0xe9, 0xf3, 0x20, 0x8e, 0xa1, 0x84, 0x35, 0xac, 0x61, 0x15, 0x8c, 0xa0, - 0x3b, 0x34, 0xa2, 0xb1, 0xbd, 0x88, 0xd1, 0xab, 0x68, 0x73, 0xf4, 0x22, 0x93, 0x64, 0xdc, 0x06, - 0xbb, 0xfb, 0xb6, 0x3b, 0x13, 0x70, 0x29, 0xbd, 0xe8, 0xc5, 0xa3, 0xe8, 0x2f, 0xf1, 0x5f, 0xf4, - 0x24, 0x05, 0x2f, 0x9e, 0x44, 0x12, 0x7f, 0x88, 0x64, 0xe6, 0x05, 0xdb, 0x74, 0x68, 0xb4, 0xa7, - 0xdd, 0x37, 0xef, 0xfb, 0xbe, 0xf9, 0xbe, 0x99, 0xc7, 0x40, 0x53, 0xcb, 0x6c, 0xd8, 0xc7, 0x77, - 0xc2, 0xe0, 0x5b, 0x95, 0xbd, 0x91, 0x03, 0x83, 0x45, 0x29, 0xf6, 0xc6, 0xaa, 0x28, 0xe3, 0xbc, - 0x40, 0x83, 0xbc, 0x46, 0x88, 0xf8, 0x38, 0x22, 0xa8, 0x25, 0x98, 0xa0, 0x05, 0x88, 0xd9, 0x9f, - 0xc3, 0x06, 0x8d, 0x04, 0x31, 0xd9, 0x55, 0x42, 0xe6, 0x23, 0x21, 0xb3, 0x0c, 0x8d, 0x34, 0x23, - 0xcc, 0x34, 0x75, 0x6f, 0x7b, 0xf7, 0x3a, 0x5e, 0x38, 0x60, 0xb4, 0x05, 0xd1, 0xf6, 0xcc, 0xc1, - 0x33, 0x95, 0x61, 0xfa, 0x64, 0x6c, 0x76, 0xb0, 0x18, 0x99, 0xf2, 0xb9, 0x32, 0x72, 0x28, 0x8d, - 0xec, 0xa9, 0xbd, 0xb1, 0xd2, 0x86, 0xd7, 0x60, 0x75, 0x38, 0x03, 0xd4, 0x59, 0x93, 0xb5, 0xd6, - 0x7a, 0xae, 0x88, 0x3e, 0x32, 0xb8, 0x79, 0x26, 0x59, 0xe7, 0x98, 0x69, 0xc5, 0x25, 0x70, 0x39, - 0x6f, 0xbe, 0x4e, 0xa9, 0x6b, 0xa5, 0x2e, 0xb7, 0xef, 0xc6, 0xbe, 0xcc, 0xb1, 0x5f, 0xb1, 0xbb, - 0x72, 0xf8, 0xf3, 0x46, 0xa5, 0x77, 0x55, 0x2e, 0x36, 0xa2, 0x0e, 0x5c, 0xff, 0xeb, 0x44, 0x77, - 0xcb, 0xa7, 0x85, 0x92, 0x06, 0x8b, 0xb9, 0xff, 0x3a, 0x5c, 0x1a, 0xb8, 0x15, 0x4a, 0x30, 0x2f, - 0xa3, 0x87, 0xd0, 0xf0, 0x13, 0xc9, 0xfb, 0x3a, 0x54, 0x6d, 0x58, 0x5d, 0x67, 0xcd, 0x8b, 0xad, - 0xb5, 0x1e, 0x55, 0x51, 0x0d, 0xb8, 0xe5, 0xbd, 0x94, 0x85, 0x4c, 0x35, 0xed, 0x13, 0x6d, 0xc3, - 0xb5, 0x13, 0xab, 0x24, 0xb2, 0x05, 0xd5, 0xdc, 0xae, 0x50, 0xe8, 0x86, 0x3f, 0xb4, 0x63, 0x51, - 0x48, 0x62, 0xb4, 0x3f, 0xaf, 0xc0, 0xaa, 0xd5, 0xe4, 0xdf, 0x18, 0xac, 0xfb, 0xcf, 0x85, 0x3f, - 0xf2, 0x0b, 0x2e, 0xbf, 0xd9, 0x60, 0xf3, 0x1c, 0x4c, 0x97, 0x2a, 0x7a, 0xfc, 0xfe, 0xfb, 0xef, - 0x2f, 0x17, 0x36, 0x79, 0x47, 0x78, 0x87, 0xcd, 0x1d, 0x94, 0xd8, 0xb7, 0xdf, 0x03, 0x71, 0x7a, - 0x02, 0xf8, 0x57, 0x06, 0x57, 0x16, 0xce, 0x9d, 0x6f, 0x2c, 0xf3, 0x73, 0xea, 0x72, 0x83, 0xf6, - 0xff, 0x50, 0xc8, 0x7b, 0xc7, 0x7a, 0xdf, 0xe0, 0xc2, 0xef, 0x9d, 0xa6, 0x43, 0x8b, 0x7d, 0xfa, - 0x3b, 0xa0, 0x38, 0xfc, 0x03, 0x83, 0xaa, 0xbb, 0x27, 0xde, 0x3a, 0x63, 0xdf, 0x13, 0x63, 0x11, - 0xdc, 0xf9, 0x07, 0x24, 0x19, 0xbb, 0x65, 0x8d, 0x85, 0xbc, 0xe1, 0x37, 0xe6, 0x86, 0xa2, 0xfb, - 0xe2, 0x70, 0x12, 0xb2, 0xa3, 0x49, 0xc8, 0x7e, 0x4d, 0x42, 0xf6, 0x69, 0x1a, 0x56, 0x8e, 0xa6, - 0x61, 0xe5, 0xc7, 0x34, 0xac, 0xbc, 0x7a, 0x90, 0x8c, 0xcc, 0xce, 0xb8, 0x1f, 0x0f, 0x30, 0x15, - 0x03, 0xd4, 0x29, 0xea, 0xb9, 0xd0, 0xbd, 0x5d, 0x35, 0x4c, 0x54, 0x21, 0x16, 0xdf, 0x84, 0x32, - 0x57, 0xba, 0x5f, 0xb5, 0xaf, 0xc1, 0xfd, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x72, 0x91, 0xa4, - 0x56, 0xa4, 0x04, 0x00, 0x00, +func init() { + proto.RegisterFile("ibc/applications/prototypes/tokenfactory/v1/query.proto", fileDescriptor_da9e2a6f4df16a32) +} + +var fileDescriptor_da9e2a6f4df16a32 = []byte{ + // 520 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x52, 0x4d, 0x6f, 0xd3, 0x40, + 0x10, 0xcd, 0x16, 0x12, 0xd4, 0xe5, 0x80, 0x58, 0xa2, 0x2a, 0x32, 0x95, 0xa9, 0xcc, 0xa5, 0x12, + 0xc2, 0xab, 0x34, 0x82, 0x4a, 0x20, 0xf1, 0x91, 0x22, 0x28, 0x07, 0x4a, 0x9a, 0x03, 0x07, 0x2e, + 0x68, 0xed, 0x2c, 0x8e, 0x45, 0xec, 0x71, 0xbd, 0xeb, 0x08, 0xab, 0xea, 0x85, 0x5f, 0x80, 0xd4, + 0x1f, 0xc0, 0xdf, 0xc9, 0xb1, 0x12, 0x17, 0x4e, 0x08, 0x12, 0x7e, 0x03, 0x67, 0xe4, 0xf5, 0x46, + 0x4d, 0xda, 0x00, 0xda, 0x2a, 0x27, 0x7b, 0x77, 0x66, 0xde, 0x9b, 0xf7, 0xf6, 0xe1, 0xed, 0xd0, + 0xf3, 0x29, 0x4b, 0x92, 0x41, 0xe8, 0x33, 0x19, 0x42, 0x2c, 0x68, 0x92, 0x82, 0x04, 0x99, 0x27, + 0x5c, 0x50, 0x09, 0x1f, 0x78, 0xfc, 0x9e, 0xf9, 0x12, 0xd2, 0x9c, 0x0e, 0x9b, 0xf4, 0x20, 0xe3, + 0x69, 0xee, 0xaa, 0x06, 0x72, 0x27, 0xf4, 0x7c, 0x77, 0x76, 0xd0, 0x3d, 0x1d, 0x74, 0x67, 0x07, + 0xdd, 0x61, 0xd3, 0xaa, 0x07, 0x10, 0x80, 0xaa, 0xd3, 0xe2, 0xaf, 0x6c, 0xb5, 0xd6, 0x03, 0x80, + 0x60, 0xc0, 0x29, 0x4b, 0x42, 0xca, 0xe2, 0x18, 0xe4, 0x2c, 0x90, 0xf5, 0xc8, 0x64, 0xb3, 0x39, + 0x42, 0xd5, 0xe7, 0x3c, 0xc0, 0xce, 0x7e, 0xb1, 0xef, 0x33, 0x1e, 0x43, 0xf4, 0x34, 0x93, 0x7d, + 0x48, 0x43, 0x99, 0xbf, 0xe2, 0x92, 0xf5, 0x98, 0x64, 0x5d, 0x7e, 0x90, 0x71, 0x21, 0x49, 0x1d, + 0x57, 0x7b, 0x45, 0x43, 0x03, 0x6d, 0xa0, 0xcd, 0xd5, 0x6e, 0x79, 0x70, 0xbe, 0x20, 0x7c, 0xfb, + 0x9f, 0xc3, 0x22, 0x81, 0x58, 0x70, 0xf2, 0x11, 0x13, 0x36, 0x2d, 0xbe, 0x8b, 0x74, 0x55, 0x41, + 0x5d, 0xdd, 0xda, 0x71, 0x0d, 0x1c, 0x72, 0x17, 0x13, 0xb5, 0x2f, 0x8f, 0xbe, 0xdf, 0xaa, 0x74, + 0xaf, 0xb3, 0xb3, 0x05, 0x67, 0x1b, 0xdf, 0x3c, 0x5d, 0x50, 0xb4, 0xf3, 0x9d, 0x94, 0x33, 0x09, + 0xe9, 0x54, 0x56, 0x03, 0x5f, 0xf1, 0xcb, 0x1b, 0x2d, 0x6c, 0x7a, 0x74, 0xee, 0xe3, 0xf5, 0xc5, + 0x83, 0x5a, 0xd2, 0x1a, 0xae, 0x29, 0x0f, 0x44, 0x03, 0x6d, 0x5c, 0xda, 0x5c, 0xed, 0xea, 0x93, + 0x53, 0xc7, 0x44, 0xcd, 0x75, 0x58, 0xca, 0x22, 0xa1, 0x79, 0x9c, 0x3e, 0xbe, 0x31, 0x77, 0xab, + 0x41, 0xf6, 0x71, 0x2d, 0x51, 0x37, 0xda, 0x8b, 0x96, 0x91, 0x17, 0x25, 0x98, 0xd6, 0xae, 0x81, + 0xb6, 0x7e, 0x56, 0x71, 0x55, 0x51, 0x91, 0xe3, 0x15, 0xbc, 0xb6, 0xd8, 0x2e, 0xf2, 0xda, 0x88, + 0xe7, 0xff, 0xf1, 0xb0, 0x3a, 0xcb, 0x03, 0x2c, 0xad, 0x71, 0xde, 0x7c, 0xfa, 0xfa, 0xeb, 0x78, + 0xa5, 0x43, 0xf6, 0xa8, 0x49, 0xbe, 0xcb, 0x47, 0xa0, 0x87, 0xea, 0x7b, 0x44, 0xcf, 0x87, 0x8e, + 0xfc, 0x46, 0xf8, 0xda, 0x99, 0x37, 0x25, 0xbb, 0x17, 0xdc, 0xfe, 0x5c, 0x9e, 0xac, 0x97, 0x4b, + 0x40, 0xd2, 0x06, 0xec, 0x29, 0x03, 0x76, 0xc9, 0x73, 0x23, 0x03, 0x74, 0x7c, 0x05, 0x3d, 0xd4, + 0x7f, 0x47, 0xda, 0x13, 0x32, 0x42, 0xb8, 0x56, 0x26, 0x86, 0x3c, 0x36, 0xdf, 0x72, 0x2e, 0xce, + 0xd6, 0x93, 0x8b, 0x03, 0x68, 0x75, 0x0f, 0x95, 0xba, 0x7b, 0xa4, 0x65, 0xa4, 0xae, 0xcc, 0x78, + 0x9b, 0x8d, 0xc6, 0x36, 0x3a, 0x19, 0xdb, 0xe8, 0xc7, 0xd8, 0x46, 0x9f, 0x27, 0x76, 0xe5, 0x64, + 0x62, 0x57, 0xbe, 0x4d, 0xec, 0xca, 0xdb, 0x17, 0x41, 0x28, 0xfb, 0x99, 0xe7, 0xfa, 0x10, 0x51, + 0x1f, 0x44, 0x04, 0xa2, 0xc0, 0xbf, 0x1b, 0x00, 0x1d, 0x36, 0x9b, 0x34, 0x82, 0x5e, 0x36, 0xe0, + 0xa2, 0xa0, 0xfb, 0x3b, 0x8d, 0xba, 0xf2, 0x6a, 0xaa, 0xdc, 0xfa, 0x13, 0x00, 0x00, 0xff, 0xff, + 0x69, 0x9a, 0x68, 0x21, 0xf8, 0x05, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -371,7 +375,7 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { func (c *queryClient) DenomAuthorityMetadata(ctx context.Context, in *QueryDenomAuthorityMetadataRequest, opts ...grpc.CallOption) (*QueryDenomAuthorityMetadataResponse, error) { out := new(QueryDenomAuthorityMetadataResponse) - err := c.cc.Invoke(ctx, "/sandbox.tokenfactory.Query/DenomAuthorityMetadata", in, out, opts...) + err := c.cc.Invoke(ctx, "/ibc.applications.prototypes.tokenfactory.v1.Query/DenomAuthorityMetadata", in, out, opts...) if err != nil { return nil, err } @@ -380,7 +384,7 @@ func (c *queryClient) DenomAuthorityMetadata(ctx context.Context, in *QueryDenom func (c *queryClient) DenomsByCreator(ctx context.Context, in *QueryDenomsByCreatorRequest, opts ...grpc.CallOption) (*QueryDenomsByCreatorResponse, error) { out := new(QueryDenomsByCreatorResponse) - err := c.cc.Invoke(ctx, "/sandbox.tokenfactory.Query/DenomsByCreator", in, out, opts...) + err := c.cc.Invoke(ctx, "/ibc.applications.prototypes.tokenfactory.v1.Query/DenomsByCreator", in, out, opts...) if err != nil { return nil, err } @@ -389,7 +393,7 @@ func (c *queryClient) DenomsByCreator(ctx context.Context, in *QueryDenomsByCrea func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { out := new(QueryParamsResponse) - err := c.cc.Invoke(ctx, "/sandbox.tokenfactory.Query/Params", in, out, opts...) + err := c.cc.Invoke(ctx, "/ibc.applications.prototypes.tokenfactory.v1.Query/Params", in, out, opts...) if err != nil { return nil, err } @@ -434,7 +438,7 @@ func _Query_DenomAuthorityMetadata_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/sandbox.tokenfactory.Query/DenomAuthorityMetadata", + FullMethod: "/ibc.applications.prototypes.tokenfactory.v1.Query/DenomAuthorityMetadata", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).DenomAuthorityMetadata(ctx, req.(*QueryDenomAuthorityMetadataRequest)) @@ -452,7 +456,7 @@ func _Query_DenomsByCreator_Handler(srv interface{}, ctx context.Context, dec fu } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/sandbox.tokenfactory.Query/DenomsByCreator", + FullMethod: "/ibc.applications.prototypes.tokenfactory.v1.Query/DenomsByCreator", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).DenomsByCreator(ctx, req.(*QueryDenomsByCreatorRequest)) @@ -470,7 +474,7 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/sandbox.tokenfactory.Query/Params", + FullMethod: "/ibc.applications.prototypes.tokenfactory.v1.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) diff --git a/modules/apps/prototypes/tokenfactory/types/query.pb.gw.go b/modules/apps/prototypes/tokenfactory/types/query.pb.gw.go index 86449576e91..b1b1b01f434 100644 --- a/modules/apps/prototypes/tokenfactory/types/query.pb.gw.go +++ b/modules/apps/prototypes/tokenfactory/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: ibc/applications/tokenfactory/v1/query.proto +// source: ibc/applications/prototypes/tokenfactory/v1/query.proto /* Package types is a reverse proxy. @@ -339,11 +339,11 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_DenomAuthorityMetadata_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"sandbox", "tokenfactory", "denoms", "denom", "authority_metadata"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_DenomAuthorityMetadata_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7}, []string{"ibc", "applications", "prototypes", "tokenfactory", "v1", "denoms", "denom", "authority_metadata"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_DenomsByCreator_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"sandbox", "tokenfactory", "creators", "creator", "denoms"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_DenomsByCreator_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5, 1, 0, 4, 1, 5, 6, 2, 7}, []string{"ibc", "applications", "prototypes", "tokenfactory", "v1", "creators", "creator", "denoms"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"sandbox", "tokenfactory", "params"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5}, []string{"ibc", "applications", "prototypes", "tokenfactory", "v1", "params"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( diff --git a/modules/apps/prototypes/tokenfactory/types/tokenfactory.pb.go b/modules/apps/prototypes/tokenfactory/types/tokenfactory.pb.go index fdbccea4ffa..43218b2302f 100644 --- a/modules/apps/prototypes/tokenfactory/types/tokenfactory.pb.go +++ b/modules/apps/prototypes/tokenfactory/types/tokenfactory.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: ibc/applications/tokenfactory/v1/tokenfactory.proto +// source: ibc/applications/prototypes/tokenfactory/v1/tokenfactory.proto package types @@ -31,7 +31,7 @@ func (m *Params) Reset() { *m = Params{} } func (m *Params) String() string { return proto.CompactTextString(m) } func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_17f074b5b5a22274, []int{0} + return fileDescriptor_12fe4c3fd7057686, []int{0} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -69,7 +69,7 @@ func (m *DenomAuthorityMetadata) Reset() { *m = DenomAuthorityMetadata{} func (m *DenomAuthorityMetadata) String() string { return proto.CompactTextString(m) } func (*DenomAuthorityMetadata) ProtoMessage() {} func (*DenomAuthorityMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_17f074b5b5a22274, []int{1} + return fileDescriptor_12fe4c3fd7057686, []int{1} } func (m *DenomAuthorityMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -111,24 +111,26 @@ func init() { } func init() { - proto.RegisterFile("ibc/applications/prototypes/tokenfactory/v1/tokenfactory.proto", fileDescriptor_17f074b5b5a22274) + proto.RegisterFile("ibc/applications/prototypes/tokenfactory/v1/tokenfactory.proto", fileDescriptor_12fe4c3fd7057686) } -var fileDescriptor_17f074b5b5a22274 = []byte{ - // 203 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2f, 0x4e, 0xcc, 0x4b, - 0x49, 0xca, 0xaf, 0xd0, 0x2f, 0xc9, 0xcf, 0x4e, 0xcd, 0x4b, 0x4b, 0x4c, 0x2e, 0xc9, 0x2f, 0xaa, - 0x44, 0xe1, 0xe8, 0x15, 0x14, 0xe5, 0x97, 0xe4, 0x0b, 0x89, 0x40, 0x15, 0xea, 0x21, 0xcb, 0x49, - 0x09, 0x26, 0xe6, 0x66, 0xe6, 0xe5, 0xeb, 0x83, 0x49, 0x88, 0x42, 0x25, 0x0e, 0x2e, 0xb6, 0x80, - 0xc4, 0xa2, 0xc4, 0xdc, 0x62, 0x25, 0x53, 0x2e, 0x31, 0x97, 0xd4, 0xbc, 0xfc, 0x5c, 0xc7, 0xd2, - 0x92, 0x8c, 0xfc, 0xa2, 0xcc, 0x92, 0x4a, 0xdf, 0xd4, 0x92, 0xc4, 0x94, 0xc4, 0x92, 0x44, 0x21, - 0x69, 0x2e, 0xd6, 0xc4, 0x94, 0xdc, 0xcc, 0x3c, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x4e, 0x27, 0xd6, - 0x15, 0xcf, 0x37, 0x68, 0x31, 0x06, 0x41, 0xc4, 0x9c, 0xfc, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, - 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, - 0xf1, 0x58, 0x8e, 0x21, 0xca, 0x34, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, - 0x3f, 0x39, 0xbf, 0x38, 0x37, 0xbf, 0x58, 0x1f, 0xea, 0x2a, 0xdd, 0x9c, 0xd4, 0x94, 0xf4, 0xd4, - 0x22, 0x7d, 0x74, 0x7f, 0x54, 0x16, 0xa4, 0x16, 0x27, 0xb1, 0x81, 0x1d, 0x66, 0x0c, 0x08, 0x00, - 0x00, 0xff, 0xff, 0xf0, 0x16, 0x0d, 0xb5, 0xec, 0x00, 0x00, 0x00, +var fileDescriptor_12fe4c3fd7057686 = []byte{ + // 240 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xb2, 0xcb, 0x4c, 0x4a, 0xd6, + 0x4f, 0x2c, 0x28, 0xc8, 0xc9, 0x4c, 0x4e, 0x2c, 0xc9, 0xcc, 0xcf, 0x2b, 0xd6, 0x2f, 0x28, 0xca, + 0x2f, 0xc9, 0x2f, 0xa9, 0x2c, 0x48, 0x2d, 0xd6, 0x2f, 0xc9, 0xcf, 0x4e, 0xcd, 0x4b, 0x4b, 0x4c, + 0x2e, 0xc9, 0x2f, 0xaa, 0xd4, 0x2f, 0x33, 0x44, 0xe1, 0xeb, 0x81, 0xd5, 0x09, 0x69, 0x67, 0x26, + 0x25, 0xeb, 0x21, 0xeb, 0xd7, 0x43, 0xe8, 0xd7, 0x43, 0x51, 0x5f, 0x66, 0x28, 0x25, 0x98, 0x98, + 0x9b, 0x99, 0x97, 0xaf, 0x0f, 0x26, 0x21, 0xea, 0x94, 0x38, 0xb8, 0xd8, 0x02, 0x12, 0x8b, 0x12, + 0x73, 0x8b, 0x95, 0x4c, 0xb9, 0xc4, 0x5c, 0x52, 0xf3, 0xf2, 0x73, 0x1d, 0x4b, 0x4b, 0x32, 0xf2, + 0x8b, 0x32, 0x4b, 0x2a, 0x7d, 0x53, 0x4b, 0x12, 0x53, 0x12, 0x4b, 0x12, 0x85, 0xa4, 0xb9, 0x58, + 0x13, 0x53, 0x72, 0x33, 0xf3, 0x24, 0x18, 0x15, 0x18, 0x35, 0x38, 0x9d, 0x58, 0x57, 0x3c, 0xdf, + 0xa0, 0xc5, 0x18, 0x04, 0x11, 0x73, 0x4a, 0x3c, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, + 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, + 0x86, 0x28, 0xf7, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0xe4, 0xfc, + 0xe2, 0xdc, 0xfc, 0x62, 0xfd, 0xcc, 0xa4, 0x64, 0xdd, 0xf4, 0x7c, 0xfd, 0x32, 0x43, 0x43, 0xfd, + 0xdc, 0xfc, 0x94, 0xd2, 0x9c, 0xd4, 0x62, 0x90, 0xdf, 0x71, 0xfb, 0x19, 0x2c, 0x94, 0xc4, 0x06, + 0x96, 0x36, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0xb8, 0x91, 0x96, 0x3f, 0x2c, 0x01, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { diff --git a/modules/apps/prototypes/tokenfactory/types/tx.pb.go b/modules/apps/prototypes/tokenfactory/types/tx.pb.go index 67ee914ed0d..f2796372193 100644 --- a/modules/apps/prototypes/tokenfactory/types/tx.pb.go +++ b/modules/apps/prototypes/tokenfactory/types/tx.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: ibc/applications/tokenfactory/v1/tx.proto +// source: ibc/applications/prototypes/tokenfactory/v1/tx.proto package types @@ -42,7 +42,7 @@ func (m *MsgCreateDenom) Reset() { *m = MsgCreateDenom{} } func (m *MsgCreateDenom) String() string { return proto.CompactTextString(m) } func (*MsgCreateDenom) ProtoMessage() {} func (*MsgCreateDenom) Descriptor() ([]byte, []int) { - return fileDescriptor_5a175bee69e54b5d, []int{0} + return fileDescriptor_154b804e6d2be4ac, []int{0} } func (m *MsgCreateDenom) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -93,7 +93,7 @@ func (m *MsgCreateDenomResponse) Reset() { *m = MsgCreateDenomResponse{} func (m *MsgCreateDenomResponse) String() string { return proto.CompactTextString(m) } func (*MsgCreateDenomResponse) ProtoMessage() {} func (*MsgCreateDenomResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5a175bee69e54b5d, []int{1} + return fileDescriptor_154b804e6d2be4ac, []int{1} } func (m *MsgCreateDenomResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -133,7 +133,7 @@ func (m *MsgMint) Reset() { *m = MsgMint{} } func (m *MsgMint) String() string { return proto.CompactTextString(m) } func (*MsgMint) ProtoMessage() {} func (*MsgMint) Descriptor() ([]byte, []int) { - return fileDescriptor_5a175bee69e54b5d, []int{2} + return fileDescriptor_154b804e6d2be4ac, []int{2} } func (m *MsgMint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -170,7 +170,7 @@ func (m *MsgMintResponse) Reset() { *m = MsgMintResponse{} } func (m *MsgMintResponse) String() string { return proto.CompactTextString(m) } func (*MsgMintResponse) ProtoMessage() {} func (*MsgMintResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5a175bee69e54b5d, []int{3} + return fileDescriptor_154b804e6d2be4ac, []int{3} } func (m *MsgMintResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -209,7 +209,7 @@ func (m *MsgBurn) Reset() { *m = MsgBurn{} } func (m *MsgBurn) String() string { return proto.CompactTextString(m) } func (*MsgBurn) ProtoMessage() {} func (*MsgBurn) Descriptor() ([]byte, []int) { - return fileDescriptor_5a175bee69e54b5d, []int{4} + return fileDescriptor_154b804e6d2be4ac, []int{4} } func (m *MsgBurn) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -246,7 +246,7 @@ func (m *MsgBurnResponse) Reset() { *m = MsgBurnResponse{} } func (m *MsgBurnResponse) String() string { return proto.CompactTextString(m) } func (*MsgBurnResponse) ProtoMessage() {} func (*MsgBurnResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5a175bee69e54b5d, []int{5} + return fileDescriptor_154b804e6d2be4ac, []int{5} } func (m *MsgBurnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -286,7 +286,7 @@ func (m *MsgChangeAdmin) Reset() { *m = MsgChangeAdmin{} } func (m *MsgChangeAdmin) String() string { return proto.CompactTextString(m) } func (*MsgChangeAdmin) ProtoMessage() {} func (*MsgChangeAdmin) Descriptor() ([]byte, []int) { - return fileDescriptor_5a175bee69e54b5d, []int{6} + return fileDescriptor_154b804e6d2be4ac, []int{6} } func (m *MsgChangeAdmin) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -344,7 +344,7 @@ func (m *MsgChangeAdminResponse) Reset() { *m = MsgChangeAdminResponse{} func (m *MsgChangeAdminResponse) String() string { return proto.CompactTextString(m) } func (*MsgChangeAdminResponse) ProtoMessage() {} func (*MsgChangeAdminResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5a175bee69e54b5d, []int{7} + return fileDescriptor_154b804e6d2be4ac, []int{7} } func (m *MsgChangeAdminResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -384,7 +384,7 @@ func (m *MsgRenounceAdmin) Reset() { *m = MsgRenounceAdmin{} } func (m *MsgRenounceAdmin) String() string { return proto.CompactTextString(m) } func (*MsgRenounceAdmin) ProtoMessage() {} func (*MsgRenounceAdmin) Descriptor() ([]byte, []int) { - return fileDescriptor_5a175bee69e54b5d, []int{8} + return fileDescriptor_154b804e6d2be4ac, []int{8} } func (m *MsgRenounceAdmin) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -435,7 +435,7 @@ func (m *MsgRenounceAdminResponse) Reset() { *m = MsgRenounceAdminRespon func (m *MsgRenounceAdminResponse) String() string { return proto.CompactTextString(m) } func (*MsgRenounceAdminResponse) ProtoMessage() {} func (*MsgRenounceAdminResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5a175bee69e54b5d, []int{9} + return fileDescriptor_154b804e6d2be4ac, []int{9} } func (m *MsgRenounceAdminResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -477,49 +477,53 @@ func init() { proto.RegisterType((*MsgRenounceAdminResponse)(nil), "ibc.applications.prototypes.tokenfactory.v1.MsgRenounceAdminResponse") } -func init() { proto.RegisterFile("ibc/applications/prototypes/tokenfactory/v1/tx.proto", fileDescriptor_5a175bee69e54b5d) } - -var fileDescriptor_5a175bee69e54b5d = []byte{ - // 612 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xcd, 0x6e, 0xd3, 0x4c, - 0x14, 0xb5, 0x9b, 0x34, 0xfd, 0x3a, 0xd5, 0x07, 0xd4, 0x8a, 0xc0, 0xb5, 0xa8, 0x53, 0x05, 0x8a, - 0xaa, 0xa8, 0xb5, 0x49, 0xaa, 0x08, 0x29, 0xbb, 0xa6, 0x2c, 0x89, 0x90, 0xc2, 0x8e, 0x4d, 0x35, - 0x89, 0xa7, 0x53, 0x0b, 0x3c, 0x13, 0x79, 0x26, 0xfd, 0xd9, 0x21, 0x56, 0x08, 0x09, 0x09, 0xde, - 0xa0, 0x0b, 0x1e, 0x20, 0x0b, 0x1e, 0x81, 0x45, 0x97, 0x15, 0x1b, 0xba, 0x42, 0x28, 0x59, 0x84, - 0xc7, 0x40, 0x33, 0x9e, 0xfc, 0x38, 0xd4, 0xa6, 0x95, 0xca, 0x26, 0x99, 0xb9, 0xe7, 0xdc, 0x7b, - 0xcf, 0xc9, 0xdc, 0xc9, 0x80, 0x55, 0x06, 0x89, 0xd7, 0xa2, 0xc7, 0x2e, 0xa7, 0xaf, 0x10, 0xd9, - 0x87, 0x6d, 0x4e, 0xc3, 0x13, 0x97, 0x1f, 0x3b, 0x9d, 0x90, 0x72, 0x6a, 0xe4, 0x15, 0xec, 0x4c, - 0xc3, 0xd6, 0x32, 0x0c, 0x7c, 0x42, 0x5d, 0xf9, 0x19, 0x11, 0x2d, 0xbb, 0x4d, 0x59, 0x40, 0x99, - 0xdb, 0x82, 0x0c, 0xb9, 0x87, 0xe5, 0x16, 0xe2, 0xb0, 0xec, 0xb6, 0xa9, 0x4f, 0x14, 0x7e, 0x4f, - 0xe1, 0x01, 0xc3, 0xee, 0x61, 0x59, 0x7c, 0x29, 0x60, 0x25, 0x02, 0xf6, 0xe4, 0xce, 0x8d, 0x36, - 0x0a, 0xca, 0x63, 0x8a, 0x69, 0x14, 0x17, 0xab, 0x28, 0x5a, 0xfc, 0xa0, 0x83, 0x5b, 0x0d, 0x86, - 0x77, 0x43, 0x04, 0x39, 0x7a, 0x8a, 0x08, 0x0d, 0x8c, 0xc7, 0x20, 0xc7, 0x10, 0xf1, 0x50, 0x68, - 0xea, 0x6b, 0xfa, 0xc6, 0x62, 0xdd, 0xfc, 0xf6, 0x65, 0x2b, 0xaf, 0x4a, 0xed, 0x78, 0x5e, 0x88, - 0x18, 0x7b, 0xc1, 0x43, 0x9f, 0xe0, 0xa6, 0xe2, 0x19, 0x79, 0x30, 0xef, 0x89, 0x54, 0x73, 0x4e, - 0x24, 0x34, 0xa3, 0x4d, 0x6d, 0xfb, 0xed, 0xb0, 0x57, 0x52, 0x94, 0xf7, 0xc3, 0x5e, 0xe9, 0xc1, - 0xa5, 0x3f, 0x4e, 0xbc, 0x79, 0xd1, 0x04, 0x77, 0xe3, 0x91, 0x26, 0x62, 0x1d, 0x4a, 0x18, 0x2a, - 0x5e, 0xe8, 0x60, 0xa1, 0xc1, 0x70, 0xc3, 0x27, 0xdc, 0xd8, 0x04, 0xd9, 0xfd, 0x90, 0x06, 0x7f, - 0x15, 0x28, 0x59, 0x46, 0x05, 0x2c, 0xc0, 0x28, 0x1c, 0x09, 0x4c, 0x49, 0x18, 0x11, 0x8d, 0x27, - 0x20, 0x07, 0x03, 0xda, 0x25, 0xdc, 0xcc, 0xac, 0xe9, 0x1b, 0x4b, 0x95, 0x15, 0x47, 0xf1, 0xc5, - 0x91, 0x38, 0xea, 0x48, 0x9c, 0x5d, 0xea, 0x93, 0x7a, 0xf6, 0xec, 0x47, 0x41, 0x6b, 0x2a, 0x7a, - 0xad, 0xf2, 0xee, 0xb4, 0xa0, 0xfd, 0x3a, 0x2d, 0x68, 0xc2, 0xbd, 0xec, 0x2f, 0xbc, 0xdf, 0x4f, - 0xf2, 0x2e, 0xec, 0x14, 0x97, 0xc1, 0x6d, 0xb5, 0x1c, 0xbb, 0xfd, 0x1c, 0xb9, 0xad, 0x77, 0x43, - 0x72, 0x4d, 0xb7, 0x13, 0xe5, 0x73, 0xff, 0x54, 0xb9, 0x90, 0xa6, 0x94, 0x8b, 0xe5, 0x58, 0xf9, - 0x57, 0x35, 0x51, 0x07, 0x90, 0x60, 0xb4, 0xe3, 0x05, 0x3e, 0xb9, 0xa9, 0x89, 0x32, 0xaa, 0x60, - 0x91, 0xa0, 0xa3, 0x3d, 0x28, 0x8a, 0xca, 0x73, 0x49, 0x2b, 0xf5, 0x1f, 0x41, 0x47, 0xb2, 0xfd, - 0x35, 0x06, 0x71, 0xa2, 0x79, 0x34, 0x88, 0x93, 0xc8, 0xd8, 0xe0, 0x27, 0x1d, 0xdc, 0x69, 0x30, - 0xdc, 0x44, 0x84, 0x76, 0x49, 0xfb, 0x66, 0x2d, 0xd6, 0xaa, 0x33, 0x5a, 0xd7, 0x93, 0xb4, 0xc6, - 0xda, 0x17, 0x2d, 0x60, 0xce, 0xc6, 0x46, 0x7a, 0x2b, 0xdf, 0x33, 0x20, 0xd3, 0x60, 0xd8, 0x80, - 0x60, 0x69, 0xfa, 0x9a, 0x3f, 0x74, 0x2e, 0xfb, 0x37, 0x72, 0xe2, 0xb7, 0xcf, 0xda, 0xbc, 0x0a, - 0x6b, 0xd4, 0xca, 0x78, 0x06, 0xb2, 0xf2, 0x7e, 0xae, 0x26, 0x66, 0x09, 0xd8, 0x5a, 0x4f, 0x85, - 0xa7, 0xab, 0xc9, 0xf9, 0x4f, 0xae, 0x26, 0xe0, 0x94, 0x6a, 0xd3, 0x73, 0x29, 0xed, 0x4f, 0xcd, - 0x64, 0x8a, 0xfd, 0x09, 0x2b, 0xcd, 0xfe, 0x9f, 0x93, 0x61, 0x60, 0xf0, 0x7f, 0x7c, 0x2a, 0x1e, - 0x25, 0xa6, 0xc7, 0x78, 0x96, 0x73, 0x35, 0xde, 0xa8, 0x91, 0x35, 0xff, 0x66, 0xd8, 0x2b, 0xe9, - 0xf5, 0xe7, 0x67, 0x7d, 0x5b, 0x3f, 0xef, 0xdb, 0xfa, 0xcf, 0xbe, 0xad, 0x7f, 0x1c, 0xd8, 0xda, - 0xf9, 0xc0, 0xd6, 0x2e, 0x06, 0xb6, 0xf6, 0xb2, 0x8a, 0x7d, 0x7e, 0xd0, 0x6d, 0x39, 0x6d, 0x1a, - 0xa8, 0x57, 0xc0, 0x55, 0x1d, 0xb6, 0x5e, 0x23, 0x0f, 0xa3, 0xd0, 0x9d, 0x7d, 0xa3, 0x4e, 0x3a, - 0x88, 0xb5, 0x72, 0xf2, 0x51, 0xd8, 0xfe, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xe4, 0x49, 0xa5, 0x0a, - 0xc8, 0x06, 0x00, 0x00, +func init() { + proto.RegisterFile("ibc/applications/prototypes/tokenfactory/v1/tx.proto", fileDescriptor_154b804e6d2be4ac) +} + +var fileDescriptor_154b804e6d2be4ac = []byte{ + // 646 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x55, 0xbf, 0x4f, 0x14, 0x4f, + 0x14, 0xbf, 0xe1, 0xe7, 0x97, 0x21, 0x5f, 0x95, 0xcd, 0x45, 0x97, 0x35, 0x2e, 0xe4, 0x2a, 0x72, + 0xc8, 0x8e, 0x8b, 0x18, 0x13, 0xd4, 0x82, 0x43, 0x63, 0x75, 0xcd, 0xd9, 0xd9, 0x90, 0xd9, 0xdd, + 0x61, 0x98, 0xc8, 0xce, 0x5c, 0x76, 0xe6, 0x0e, 0xb1, 0x32, 0x26, 0x26, 0x6a, 0xa3, 0x8d, 0x9d, + 0x05, 0x7f, 0x02, 0x85, 0xa5, 0x85, 0x25, 0x25, 0xb1, 0xb2, 0x32, 0x06, 0x0a, 0xfc, 0x33, 0xcc, + 0xec, 0xce, 0x71, 0xbb, 0x67, 0x44, 0x17, 0xb0, 0xb9, 0xcc, 0xbc, 0xf7, 0x3e, 0xef, 0x7d, 0x3e, + 0xf7, 0xde, 0xdb, 0x81, 0x4b, 0x2c, 0x08, 0x11, 0x6e, 0xb7, 0x37, 0x59, 0x88, 0x15, 0x13, 0x5c, + 0xa2, 0x76, 0x22, 0x94, 0x50, 0xdb, 0x6d, 0x22, 0x91, 0x12, 0x4f, 0x08, 0x5f, 0xc7, 0xa1, 0x12, + 0xc9, 0x36, 0xea, 0xfa, 0x48, 0x3d, 0xf5, 0x52, 0xaf, 0x35, 0xcf, 0x82, 0xd0, 0xcb, 0xa3, 0xbc, + 0x3e, 0xca, 0xcb, 0xa3, 0xbc, 0xae, 0xef, 0x4c, 0xe1, 0x98, 0x71, 0x81, 0xd2, 0xdf, 0x2c, 0xce, + 0x71, 0x43, 0x21, 0x63, 0x21, 0x51, 0x80, 0x25, 0x41, 0x5d, 0x3f, 0x20, 0x0a, 0xfb, 0x28, 0x14, + 0x8c, 0x1b, 0xff, 0x15, 0xe3, 0x8f, 0x25, 0xd5, 0x75, 0x63, 0x49, 0x8d, 0x63, 0x3a, 0x73, 0xac, + 0xa5, 0x37, 0x94, 0x5d, 0x8c, 0xab, 0x4a, 0x05, 0x15, 0x99, 0x5d, 0x9f, 0x32, 0x6b, 0xed, 0x25, + 0x80, 0x17, 0x9a, 0x92, 0xae, 0x26, 0x04, 0x2b, 0x72, 0x9f, 0x70, 0x11, 0x5b, 0x37, 0xe0, 0x98, + 0x24, 0x3c, 0x22, 0x89, 0x0d, 0x66, 0xc1, 0xdc, 0x44, 0xc3, 0xfe, 0xf2, 0x71, 0xa1, 0x6a, 0x52, + 0xad, 0x44, 0x51, 0x42, 0xa4, 0x7c, 0xa4, 0x12, 0xc6, 0x69, 0xcb, 0xc4, 0x59, 0x55, 0x38, 0x1a, + 0x69, 0xa8, 0x3d, 0xa4, 0x01, 0xad, 0xec, 0xb2, 0x3c, 0xff, 0xe2, 0x68, 0xb7, 0x6e, 0x42, 0xde, + 0x1c, 0xed, 0xd6, 0xaf, 0x16, 0xfe, 0xae, 0x62, 0xd1, 0x9a, 0x0d, 0x2f, 0x17, 0x2d, 0x2d, 0x22, + 0xdb, 0x82, 0x4b, 0x52, 0xdb, 0x07, 0x70, 0xbc, 0x29, 0x69, 0x93, 0x71, 0x65, 0x5d, 0x87, 0x23, + 0xeb, 0x89, 0x88, 0xff, 0x48, 0x2c, 0x8d, 0xb2, 0x16, 0xe1, 0x38, 0xce, 0xcc, 0x19, 0xb1, 0x13, + 0x00, 0xbd, 0x40, 0xeb, 0x36, 0x1c, 0xc3, 0xb1, 0xe8, 0x70, 0x65, 0x0f, 0xcf, 0x82, 0xb9, 0xc9, + 0xc5, 0x69, 0xcf, 0xc4, 0xeb, 0x56, 0x78, 0xa6, 0x15, 0xde, 0xaa, 0x60, 0xbc, 0x31, 0xb2, 0xf7, + 0x6d, 0xa6, 0xd2, 0x32, 0xe1, 0xcb, 0xf5, 0x57, 0x3b, 0x33, 0x95, 0x1f, 0x3b, 0x33, 0x15, 0xad, + 0x3a, 0xad, 0xaf, 0x35, 0x57, 0x07, 0x35, 0x6b, 0x19, 0xb5, 0x29, 0x78, 0xd1, 0x1c, 0x8f, 0x55, + 0x7e, 0xc8, 0x54, 0x36, 0x3a, 0x09, 0x2f, 0xa9, 0xb2, 0xcf, 0x78, 0xe8, 0x9f, 0x30, 0xd6, 0x94, + 0x0c, 0x63, 0x7d, 0x3c, 0x66, 0xfc, 0xc9, 0x4c, 0xce, 0x06, 0xe6, 0x94, 0xac, 0x44, 0x31, 0xe3, + 0xe7, 0x35, 0x39, 0xd6, 0x2d, 0x38, 0xc1, 0xc9, 0xd6, 0x1a, 0xd6, 0x49, 0xd3, 0x3e, 0x9c, 0x94, + 0xea, 0x3f, 0x4e, 0xb6, 0xd2, 0xf2, 0x7f, 0x31, 0x70, 0x7d, 0xae, 0xbd, 0x81, 0xeb, 0x5b, 0x8e, + 0x85, 0xbd, 0x06, 0xf0, 0x52, 0x53, 0xd2, 0x16, 0xe1, 0xa2, 0xc3, 0xc3, 0xf3, 0x95, 0xb6, 0xbc, + 0x30, 0xc0, 0xf1, 0xda, 0x20, 0xc7, 0x42, 0xd9, 0x9a, 0x03, 0xed, 0x41, 0x5b, 0x8f, 0xe7, 0xe2, + 0xe7, 0x51, 0x38, 0xdc, 0x94, 0xd4, 0x7a, 0x0b, 0xe0, 0x64, 0x7e, 0x7f, 0xef, 0x78, 0x25, 0xbe, + 0x3e, 0x5e, 0x71, 0xeb, 0x9c, 0xd5, 0x33, 0x80, 0x7b, 0xcc, 0xac, 0x67, 0x70, 0x24, 0x5d, 0xd7, + 0xa5, 0xb2, 0xc9, 0x34, 0xca, 0xb9, 0x7b, 0x1a, 0x54, 0xbe, 0x76, 0xba, 0x44, 0xa5, 0x6b, 0x6b, + 0x54, 0xf9, 0xda, 0xf9, 0x95, 0xc8, 0x3a, 0x91, 0xdb, 0x87, 0xf2, 0x9d, 0xe8, 0x83, 0x4f, 0xd1, + 0x89, 0x5f, 0x67, 0xd9, 0x7a, 0x0f, 0xe0, 0xff, 0xc5, 0x41, 0xbe, 0x57, 0x36, 0x6d, 0x01, 0xee, + 0x3c, 0x38, 0x13, 0xbc, 0xc7, 0xcb, 0x19, 0x7d, 0x7e, 0xb4, 0x5b, 0x07, 0x0d, 0xbc, 0x77, 0xe0, + 0x82, 0xfd, 0x03, 0x17, 0x7c, 0x3f, 0x70, 0xc1, 0xbb, 0x43, 0xb7, 0xb2, 0x7f, 0xe8, 0x56, 0xbe, + 0x1e, 0xba, 0x95, 0xc7, 0x0f, 0x29, 0x53, 0x1b, 0x9d, 0xc0, 0x0b, 0x45, 0x6c, 0x9e, 0x31, 0xc4, + 0x82, 0x70, 0x81, 0x0a, 0xd4, 0xf5, 0x7d, 0x14, 0x8b, 0xa8, 0xb3, 0x49, 0xa4, 0x7e, 0x98, 0x7f, + 0xff, 0x20, 0xa7, 0xa6, 0x60, 0x2c, 0x75, 0xdf, 0xfc, 0x19, 0x00, 0x00, 0xff, 0xff, 0xe8, 0xda, + 0x98, 0xda, 0xc9, 0x07, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -556,7 +560,7 @@ func NewMsgClient(cc grpc1.ClientConn) MsgClient { func (c *msgClient) CreateDenom(ctx context.Context, in *MsgCreateDenom, opts ...grpc.CallOption) (*MsgCreateDenomResponse, error) { out := new(MsgCreateDenomResponse) - err := c.cc.Invoke(ctx, "/sandbox.tokenfactory.Msg/CreateDenom", in, out, opts...) + err := c.cc.Invoke(ctx, "/ibc.applications.prototypes.tokenfactory.v1.Msg/CreateDenom", in, out, opts...) if err != nil { return nil, err } @@ -565,7 +569,7 @@ func (c *msgClient) CreateDenom(ctx context.Context, in *MsgCreateDenom, opts .. func (c *msgClient) Mint(ctx context.Context, in *MsgMint, opts ...grpc.CallOption) (*MsgMintResponse, error) { out := new(MsgMintResponse) - err := c.cc.Invoke(ctx, "/sandbox.tokenfactory.Msg/Mint", in, out, opts...) + err := c.cc.Invoke(ctx, "/ibc.applications.prototypes.tokenfactory.v1.Msg/Mint", in, out, opts...) if err != nil { return nil, err } @@ -574,7 +578,7 @@ func (c *msgClient) Mint(ctx context.Context, in *MsgMint, opts ...grpc.CallOpti func (c *msgClient) Burn(ctx context.Context, in *MsgBurn, opts ...grpc.CallOption) (*MsgBurnResponse, error) { out := new(MsgBurnResponse) - err := c.cc.Invoke(ctx, "/sandbox.tokenfactory.Msg/Burn", in, out, opts...) + err := c.cc.Invoke(ctx, "/ibc.applications.prototypes.tokenfactory.v1.Msg/Burn", in, out, opts...) if err != nil { return nil, err } @@ -583,7 +587,7 @@ func (c *msgClient) Burn(ctx context.Context, in *MsgBurn, opts ...grpc.CallOpti func (c *msgClient) ChangeAdmin(ctx context.Context, in *MsgChangeAdmin, opts ...grpc.CallOption) (*MsgChangeAdminResponse, error) { out := new(MsgChangeAdminResponse) - err := c.cc.Invoke(ctx, "/sandbox.tokenfactory.Msg/ChangeAdmin", in, out, opts...) + err := c.cc.Invoke(ctx, "/ibc.applications.prototypes.tokenfactory.v1.Msg/ChangeAdmin", in, out, opts...) if err != nil { return nil, err } @@ -592,7 +596,7 @@ func (c *msgClient) ChangeAdmin(ctx context.Context, in *MsgChangeAdmin, opts .. func (c *msgClient) RenounceAdmin(ctx context.Context, in *MsgRenounceAdmin, opts ...grpc.CallOption) (*MsgRenounceAdminResponse, error) { out := new(MsgRenounceAdminResponse) - err := c.cc.Invoke(ctx, "/sandbox.tokenfactory.Msg/RenounceAdmin", in, out, opts...) + err := c.cc.Invoke(ctx, "/ibc.applications.prototypes.tokenfactory.v1.Msg/RenounceAdmin", in, out, opts...) if err != nil { return nil, err } @@ -647,7 +651,7 @@ func _Msg_CreateDenom_Handler(srv interface{}, ctx context.Context, dec func(int } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/sandbox.tokenfactory.Msg/CreateDenom", + FullMethod: "/ibc.applications.prototypes.tokenfactory.v1.Msg/CreateDenom", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).CreateDenom(ctx, req.(*MsgCreateDenom)) @@ -665,7 +669,7 @@ func _Msg_Mint_Handler(srv interface{}, ctx context.Context, dec func(interface{ } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/sandbox.tokenfactory.Msg/Mint", + FullMethod: "/ibc.applications.prototypes.tokenfactory.v1.Msg/Mint", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).Mint(ctx, req.(*MsgMint)) @@ -683,7 +687,7 @@ func _Msg_Burn_Handler(srv interface{}, ctx context.Context, dec func(interface{ } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/sandbox.tokenfactory.Msg/Burn", + FullMethod: "/ibc.applications.prototypes.tokenfactory.v1.Msg/Burn", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).Burn(ctx, req.(*MsgBurn)) @@ -701,7 +705,7 @@ func _Msg_ChangeAdmin_Handler(srv interface{}, ctx context.Context, dec func(int } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/sandbox.tokenfactory.Msg/ChangeAdmin", + FullMethod: "/ibc.applications.prototypes.tokenfactory.v1.Msg/ChangeAdmin", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).ChangeAdmin(ctx, req.(*MsgChangeAdmin)) @@ -719,7 +723,7 @@ func _Msg_RenounceAdmin_Handler(srv interface{}, ctx context.Context, dec func(i } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/sandbox.tokenfactory.Msg/RenounceAdmin", + FullMethod: "/ibc.applications.prototypes.tokenfactory.v1.Msg/RenounceAdmin", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).RenounceAdmin(ctx, req.(*MsgRenounceAdmin)) From 998a8c78e533524185cc470510973bea94e1a920 Mon Sep 17 00:00:00 2001 From: Diana Borbe Date: Tue, 5 May 2026 15:17:28 +0200 Subject: [PATCH 11/11] Update tokenfactory --- .../prototypes/tokenfactory/keeper/mint_burn.go | 15 --------------- .../prototypes/tokenfactory/keeper/msg_server.go | 12 +++--------- .../apps/prototypes/tokenfactory/types/denom.go | 13 ++++++++++++- .../apps/prototypes/tokenfactory/types/msgs.go | 8 ++++---- 4 files changed, 19 insertions(+), 29 deletions(-) diff --git a/modules/apps/prototypes/tokenfactory/keeper/mint_burn.go b/modules/apps/prototypes/tokenfactory/keeper/mint_burn.go index ebebd2477cd..9356f4f541b 100644 --- a/modules/apps/prototypes/tokenfactory/keeper/mint_burn.go +++ b/modules/apps/prototypes/tokenfactory/keeper/mint_burn.go @@ -14,10 +14,6 @@ import ( // MintTo mints tokens of denom to address. // MUST fail if denom is not recognized or not authorized for minting. func (k Keeper) MintTo(ctx context.Context, denom string, amount math.Int, to sdk.AccAddress) error { - if err := types.ValidateTokenFactoryDenom(denom); err != nil { - return err - } - coin := sdk.NewCoin(denom, amount) if err := k.bankKeeper.MintCoins(ctx, types.ModuleName, sdk.NewCoins(coin)); err != nil { return err @@ -43,10 +39,6 @@ func (k Keeper) MintTo(ctx context.Context, denom string, amount math.Int, to sd // BurnFrom burns tokens of denom from address. // MUST fail if address does not have enough balance or burn is not permitted. func (k Keeper) BurnFrom(ctx context.Context, denom string, amount math.Int, from sdk.AccAddress) error { - if err := types.ValidateTokenFactoryDenom(denom); err != nil { - return err - } - coin := sdk.NewCoin(denom, amount) if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, from, types.ModuleName, sdk.NewCoins(coin)); err != nil { return err @@ -71,9 +63,6 @@ func (k Keeper) BurnFrom(ctx context.Context, denom string, amount math.Int, fro // HasDenom checks if a denom exists in the token factory. func (k Keeper) HasDenom(ctx context.Context, denom string) bool { - if err := types.ValidateTokenFactoryDenom(denom); err != nil { - return false - } has, err := k.DenomAuthorityMetadataStore.Has(ctx, denom) if err != nil { return false @@ -129,10 +118,6 @@ func (k Keeper) burnFromWithAdmin(ctx context.Context, from sdk.AccAddress, amou } func (k Keeper) validateMintBurnPermission(ctx context.Context, admin, denom string) error { - if err := types.ValidateTokenFactoryDenom(denom); err != nil { - return err - } - md, err := k.GetAuthorityMetadata(ctx, denom) if err != nil { return errorsmod.Wrapf(types.ErrDenomNotFound, "denom %s not found", denom) diff --git a/modules/apps/prototypes/tokenfactory/keeper/msg_server.go b/modules/apps/prototypes/tokenfactory/keeper/msg_server.go index 1b2ac09273a..4812e6dbee6 100644 --- a/modules/apps/prototypes/tokenfactory/keeper/msg_server.go +++ b/modules/apps/prototypes/tokenfactory/keeper/msg_server.go @@ -2,6 +2,7 @@ package keeper import ( "context" + "fmt" "github.com/cosmos/ibc-go/v11/modules/apps/prototypes/tokenfactory/types" @@ -30,7 +31,8 @@ func (k msgServer) CreateDenom(goCtx context.Context, msg *types.MsgCreateDenom) return nil, errorsmod.Wrapf(types.ErrInvalidAddress, "error: %s", err.Error()) } - if err := k.Keeper.CreateDenom(ctx, msg.Sender, msg.Denom); err != nil { + fullDenom := fmt.Sprintf("factory/%s/%s", msg.Sender, msg.Denom) + if err := k.Keeper.CreateDenom(ctx, msg.Sender, fullDenom); err != nil { return nil, err } @@ -92,10 +94,6 @@ func (k msgServer) ChangeAdmin(ctx context.Context, msg *types.MsgChangeAdmin) ( return nil, errorsmod.Wrapf(types.ErrInvalidAddress, "invalid new admin: %s", err.Error()) } - if err := types.ValidateTokenFactoryDenom(msg.Denom); err != nil { - return nil, err - } - if err := k.Keeper.ChangeAdmin(ctx, msg.Denom, msg.Sender, msg.NewAdmin); err != nil { return nil, err } @@ -109,10 +107,6 @@ func (k msgServer) RenounceAdmin(ctx context.Context, msg *types.MsgRenounceAdmi return nil, errorsmod.Wrapf(types.ErrInvalidAddress, "invalid sender: %s", err.Error()) } - if err := types.ValidateTokenFactoryDenom(msg.Denom); err != nil { - return nil, err - } - if err := k.Keeper.RenounceAdmin(ctx, msg.Denom, msg.Sender); err != nil { return nil, err } diff --git a/modules/apps/prototypes/tokenfactory/types/denom.go b/modules/apps/prototypes/tokenfactory/types/denom.go index 4eaea2ff840..39d9d05b8b5 100644 --- a/modules/apps/prototypes/tokenfactory/types/denom.go +++ b/modules/apps/prototypes/tokenfactory/types/denom.go @@ -2,6 +2,7 @@ package types import ( "regexp" + "strings" errorsmod "cosmossdk.io/errors" ) @@ -9,7 +10,7 @@ import ( // precompiled for performance var denomRegex = regexp.MustCompile(`^[a-zA-Z0-9]+$`) -// ValidateTokenFactoryDenom validates that a denom is a valid tokenfactory denom +// ValidateTokenFactoryDenom validates a subdenom (used as input to MsgCreateDenom). func ValidateTokenFactoryDenom(denom string) error { if len(denom) == 0 || len(denom) > 20 { return errorsmod.Wrapf(ErrInvalidDenom, "invalid denom, must be between 1 and 20 characters: %s", denom) @@ -19,3 +20,13 @@ func ValidateTokenFactoryDenom(denom string) error { } return nil } + +// ValidateFullTokenFactoryDenom validates a full tokenfactory denom of the form +// factory//. +func ValidateFullTokenFactoryDenom(denom string) error { + parts := strings.SplitN(denom, "/", 3) + if len(parts) != 3 || parts[0] != "factory" || parts[1] == "" { + return errorsmod.Wrapf(ErrInvalidDenom, "invalid tokenfactory denom, expected factory//, got: %s", denom) + } + return ValidateTokenFactoryDenom(parts[2]) +} diff --git a/modules/apps/prototypes/tokenfactory/types/msgs.go b/modules/apps/prototypes/tokenfactory/types/msgs.go index 0fe8c3b095f..80b2a30a35d 100644 --- a/modules/apps/prototypes/tokenfactory/types/msgs.go +++ b/modules/apps/prototypes/tokenfactory/types/msgs.go @@ -54,7 +54,7 @@ func (msg MsgMint) ValidateBasic() error { return errorsmod.Wrapf(ErrInvalidAmount, "amount: %s", msg.Amount.String()) } - return ValidateTokenFactoryDenom(msg.Amount.Denom) + return ValidateFullTokenFactoryDenom(msg.Amount.Denom) } // NewMsgBurn creates a new MsgBurn instance @@ -75,7 +75,7 @@ func (msg MsgBurn) ValidateBasic() error { return errorsmod.Wrapf(ErrInvalidAmount, "amount: %s", msg.Amount.String()) } - return ValidateTokenFactoryDenom(msg.Amount.Denom) + return ValidateFullTokenFactoryDenom(msg.Amount.Denom) } // NewMsgChangeAdmin creates a new MsgChangeAdmin instance @@ -97,7 +97,7 @@ func (msg MsgChangeAdmin) ValidateBasic() error { return errorsmod.Wrapf(ErrInvalidAddress, "new_admin: %s, error: %s", msg.NewAdmin, err.Error()) } - return ValidateTokenFactoryDenom(msg.Denom) + return ValidateFullTokenFactoryDenom(msg.Denom) } // NewMsgRenounceAdmin creates a new MsgRenounceAdmin instance @@ -114,5 +114,5 @@ func (msg MsgRenounceAdmin) ValidateBasic() error { return errorsmod.Wrapf(ErrInvalidAddress, "sender: %s, error: %s", msg.Sender, err.Error()) } - return ValidateTokenFactoryDenom(msg.Denom) + return ValidateFullTokenFactoryDenom(msg.Denom) }