Skip to content
This repository has been archived by the owner on Feb 23, 2024. It is now read-only.

Retry and refund flows #33

Merged
merged 27 commits into from
Nov 2, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
285bd94
Add retry and refund flows
agouin Sep 24, 2022
fe8b41b
Use new SendPacketTransfer keeper method
agouin Sep 24, 2022
f5c57c0
Add debug logs
agouin Sep 24, 2022
189b839
Add debug log after getting sequence
agouin Sep 25, 2022
23a8fbf
Add error debug log
agouin Sep 25, 2022
a09b626
Use 0-0 for default timeout height
agouin Sep 25, 2022
b18f900
Add timeout to receiver. Use 28 day timeout for refunds
agouin Sep 25, 2022
12aa364
Remove handled packets from store
agouin Sep 25, 2022
5efdecf
Add more error logs
agouin Sep 25, 2022
9d8a0ee
handle timeout before retry
agouin Sep 25, 2022
e05de2d
log error for failed refund
agouin Sep 25, 2022
6fd07ab
Fix sender
agouin Sep 25, 2022
e3be996
remove dashes in module name
agouin Sep 25, 2022
24d26cb
IBCDenom for timeout
agouin Sep 25, 2022
ee7a368
Add inFlightPackets to genesis
agouin Sep 25, 2022
67b24b1
refund for failed initial transfers
agouin Sep 25, 2022
cacac9c
refund on OnAcknowledgement error
agouin Sep 25, 2022
24821c0
Unmarshal ack to check for err
agouin Sep 25, 2022
d081fe4
Simplify retries by counting down
agouin Sep 25, 2022
15795cb
Remove inFlightPacket on ack without error
agouin Sep 25, 2022
dd15ad7
Bring back go.sum
agouin Sep 25, 2022
1951fad
Wire in retries and timeouts through NewAppModule. Use SendTransferWi…
agouin Sep 25, 2022
b54824e
Bring back ability to configure forward timeout and retries, but fix …
agouin Sep 25, 2022
4e8ce0f
Use Transfer RPC module due to SendTransfer becoming private in near …
agouin Sep 26, 2022
359f810
Wrap SDK context
agouin Sep 26, 2022
75e74c1
Updates for v6
agouin Sep 27, 2022
fbbb046
Add comments and use interface for ack success
agouin Nov 2, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ Contributing to this repo can mean many things such as participating in
discussion or proposing code changes. To ensure a smooth workflow for all
contributors, the general procedure for contributing has been established:

1. Either [open](https://github.com/cosmos/ibc-go/v5/issues/new/choose) or
[find](https://github.com/cosmos/ibc-go/v5/issues) an issue you'd like to help with
1. Either [open](https://github.com/cosmos/ibc-go/issues/new/choose) or
[find](https://github.com/cosmos/ibc-go/issues) an issue you'd like to help with
2. Participate in thoughtful discussion on that issue
3. If you would like to contribute:
1. If the issue is a proposal, ensure that the proposal has been accepted
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ cosmovisor:
mocks: $(MOCKS_DIR)
mockgen -package=mock -destination=./test/mock/transfer_keeper.go $(GOMOD)/router/types TransferKeeper
mockgen -package=mock -destination=./test/mock/distribution_keeper.go $(GOMOD)/router/types DistributionKeeper
mockgen -package=mock -destination=./test/mock/ibc_module.go github.com/cosmos/ibc-go/v5/modules/core/05-port/types IBCModule
mockgen -package=mock -destination=./test/mock/ibc_module.go github.com/cosmos/ibc-go/v6/modules/core/05-port/types IBCModule

.PHONY: mocks

Expand Down
16 changes: 9 additions & 7 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
go 1.18

module github.com/strangelove-ventures/packet-forward-middleware/v2
module github.com/strangelove-ventures/packet-forward-middleware/v6

replace github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1

require (
cosmossdk.io/math v1.0.0-beta.3
github.com/armon/go-metrics v0.4.0
github.com/armon/go-metrics v0.4.1
github.com/cosmos/cosmos-sdk v0.46.1
github.com/cosmos/ibc-go/v5 v5.0.0-rc1
github.com/cosmos/ibc-go/v6 v6.0.0
github.com/gogo/protobuf v1.3.3
github.com/golang/mock v1.6.0
github.com/golang/protobuf v1.5.2
Expand Down Expand Up @@ -77,7 +77,7 @@ require (
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/mtibben/percent v0.2.1 // indirect
github.com/pelletier/go-toml v1.9.5 // indirect
github.com/pelletier/go-toml/v2 v2.0.2 // indirect
github.com/pelletier/go-toml/v2 v2.0.5 // indirect
github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
Expand All @@ -92,8 +92,8 @@ require (
github.com/spf13/cast v1.5.0 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/viper v1.12.0 // indirect
github.com/subosito/gotenv v1.4.0 // indirect
github.com/spf13/viper v1.13.0 // indirect
github.com/subosito/gotenv v1.4.1 // indirect
github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect
github.com/tendermint/btcd v0.1.1 // indirect
github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 // indirect
Expand All @@ -107,8 +107,10 @@ require (
golang.org/x/term v0.0.0-20220722155259-a9ba230a4035 // indirect
golang.org/x/text v0.3.7 // indirect
google.golang.org/protobuf v1.28.1 // indirect
gopkg.in/ini.v1 v1.66.6 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
sigs.k8s.io/yaml v1.3.0 // indirect
)

replace github.com/cosmos/ibc-go/v6 => github.com/strangelove-ventures/ibc-go/v6 v6.0.0-20220927150238-37bc0935e989
2,359 changes: 2,352 additions & 7 deletions go.sum

Large diffs are not rendered by default.

23 changes: 21 additions & 2 deletions proto/router/v1/genesis.proto
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,22 @@ syntax = "proto3";

package router.v1;

option go_package = "github.com/strangelove-ventures/packet-forward-middleware/v2/router/types";
option go_package = "github.com/strangelove-ventures/packet-forward-middleware/v6/router/types";

import "gogoproto/gogo.proto";

// GenesisState defines the router genesis state
message GenesisState { Params params = 1 [ (gogoproto.nullable) = false ]; }

message GenesisState {
Params params = 1 [ (gogoproto.nullable) = false ];

// key - information about forwarded packet: src_channel (parsedReceiver.Channel), src_port (parsedReceiver.Port), sequence
// value - information about original packet for refunding if necessary: retries, srcPacketSender, srcPacket.DestinationChannel, srcPacket.DestinationPort
map<string, InFlightPacket> in_flight_packets = 2 [
(gogoproto.moretags) = "yaml:\"in_flight_packets\"",
(gogoproto.nullable) = false
];
}

// Params defines the set of IBC router parameters.
message Params {
Expand All @@ -17,3 +27,12 @@ message Params {
(gogoproto.nullable) = false
];
}

// InFlightPacket contains information about original packet for refunding if necessary.
message InFlightPacket {
string original_sender_address = 1;
string refund_channel_id = 2;
string refund_port_id = 3;
int32 retries_remaining = 4;
uint64 timeout = 5;
}
3 changes: 1 addition & 2 deletions proto/router/v1/query.proto
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ import "gogoproto/gogo.proto";
import "router/v1/genesis.proto";
import "google/api/annotations.proto";


option go_package = "github.com/strangelove-ventures/packet-forward-middleware/v2/router/types";
option go_package = "github.com/strangelove-ventures/packet-forward-middleware/v6/router/types";

// Query provides defines the gRPC querier service.
service Query {
Expand Down
2 changes: 1 addition & 1 deletion router/client/cli/cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/cosmos/cosmos-sdk/version"
"github.com/spf13/cobra"
"github.com/strangelove-ventures/packet-forward-middleware/v2/router/types"
"github.com/strangelove-ventures/packet-forward-middleware/v6/router/types"
)

// GetQueryCmd returns the query commands for router
Expand Down
21 changes: 19 additions & 2 deletions router/keeper/genesis.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,32 @@ package keeper

import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/strangelove-ventures/packet-forward-middleware/v2/router/types"
"github.com/strangelove-ventures/packet-forward-middleware/v6/router/types"
)

// InitGenesis
func (k Keeper) InitGenesis(ctx sdk.Context, state types.GenesisState) {
k.SetParams(ctx, state.Params)

// Initialize store refund path for forwarded packets in genesis state that have not yet been acked.
store := ctx.KVStore(k.storeKey)
for key, value := range state.InFlightPackets {
bz := k.cdc.MustMarshal(&value)
store.Set([]byte(key), bz)
}
}

// ExportGenesis
func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState {
return &types.GenesisState{Params: k.GetParams(ctx)}
store := ctx.KVStore(k.storeKey)

inFlightPackets := make(map[string]types.InFlightPacket)

itr := store.Iterator(nil, nil)
for ; itr.Valid(); itr.Next() {
var inFlightPacket types.InFlightPacket
k.cdc.MustUnmarshal(itr.Value(), &inFlightPacket)
inFlightPackets[string(itr.Key())] = inFlightPacket
}
return &types.GenesisState{Params: k.GetParams(ctx), InFlightPackets: inFlightPackets}
}
2 changes: 1 addition & 1 deletion router/keeper/grpc_query.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"context"

sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/strangelove-ventures/packet-forward-middleware/v2/router/types"
"github.com/strangelove-ventures/packet-forward-middleware/v6/router/types"
)

var _ types.QueryServer = Keeper{}
Expand Down
Loading