mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-11-04 03:07:28 +00:00 
			
		
		
		
	Add ibc packet forward middleware for ibc transfer (#1839)
* Add ibc packet forward middleware for ibc transfer * Update changelog for ibc packet forwarding
This commit is contained in:
		
							parent
							
								
									322f2ac056
								
							
						
					
					
						commit
						5c0f27b952
					
				@ -44,6 +44,7 @@ Ref: https://keepachangelog.com/en/1.0.0/
 | 
			
		||||
- (cosmos-sdk) [#1811] Upgrades app to cosmos-sdk v0.47.7
 | 
			
		||||
- (validator-vesting) [#1832] Add grpc query service to replace removed legacy querier
 | 
			
		||||
- (incentive) [#1836] Update x/incentive cli to use grpc query client
 | 
			
		||||
- (ibc) [#1839] Add ibc packet forward middleware for ibc transfers
 | 
			
		||||
 | 
			
		||||
## [v0.25.0]
 | 
			
		||||
 | 
			
		||||
@ -326,6 +327,7 @@ the [changelog](https://github.com/cosmos/cosmos-sdk/blob/v0.38.4/CHANGELOG.md).
 | 
			
		||||
- [#257](https://github.com/Kava-Labs/kava/pulls/257) Include scripts to run
 | 
			
		||||
  large-scale simulations remotely using aws-batch
 | 
			
		||||
 | 
			
		||||
[#1839]: https://github.com/Kava-Labs/kava/pull/1839
 | 
			
		||||
[#1836]: https://github.com/Kava-Labs/kava/pull/1836
 | 
			
		||||
[#1832]: https://github.com/Kava-Labs/kava/pull/1832
 | 
			
		||||
[#1811]: https://github.com/Kava-Labs/kava/pull/1811
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										48
									
								
								app/app.go
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								app/app.go
									
									
									
									
									
								
							@ -79,6 +79,9 @@ import (
 | 
			
		||||
	upgradeclient "github.com/cosmos/cosmos-sdk/x/upgrade/client"
 | 
			
		||||
	upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper"
 | 
			
		||||
	upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
 | 
			
		||||
	"github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward"
 | 
			
		||||
	packetforwardkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/keeper"
 | 
			
		||||
	packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types"
 | 
			
		||||
	transfer "github.com/cosmos/ibc-go/v7/modules/apps/transfer"
 | 
			
		||||
	ibctransferkeeper "github.com/cosmos/ibc-go/v7/modules/apps/transfer/keeper"
 | 
			
		||||
	ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types"
 | 
			
		||||
@ -86,7 +89,7 @@ import (
 | 
			
		||||
	ibcclient "github.com/cosmos/ibc-go/v7/modules/core/02-client"
 | 
			
		||||
	ibcclientclient "github.com/cosmos/ibc-go/v7/modules/core/02-client/client"
 | 
			
		||||
	ibcclienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types"
 | 
			
		||||
	porttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types"
 | 
			
		||||
	ibcporttypes "github.com/cosmos/ibc-go/v7/modules/core/05-port/types"
 | 
			
		||||
	ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported"
 | 
			
		||||
	ibckeeper "github.com/cosmos/ibc-go/v7/modules/core/keeper"
 | 
			
		||||
	solomachine "github.com/cosmos/ibc-go/v7/modules/light-clients/06-solomachine"
 | 
			
		||||
@ -199,6 +202,7 @@ var (
 | 
			
		||||
		ibc.AppModuleBasic{},
 | 
			
		||||
		ibctm.AppModuleBasic{},
 | 
			
		||||
		solomachine.AppModuleBasic{},
 | 
			
		||||
		packetforward.AppModuleBasic{},
 | 
			
		||||
		upgrade.AppModuleBasic{},
 | 
			
		||||
		evidence.AppModuleBasic{},
 | 
			
		||||
		authzmodule.AppModuleBasic{},
 | 
			
		||||
@ -307,6 +311,7 @@ type App struct {
 | 
			
		||||
	crisisKeeper          crisiskeeper.Keeper
 | 
			
		||||
	slashingKeeper        slashingkeeper.Keeper
 | 
			
		||||
	ibcKeeper             *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly
 | 
			
		||||
	packetForwardKeeper   *packetforwardkeeper.Keeper
 | 
			
		||||
	evmKeeper             *evmkeeper.Keeper
 | 
			
		||||
	evmutilKeeper         evmutilkeeper.Keeper
 | 
			
		||||
	feeMarketKeeper       feemarketkeeper.Keeper
 | 
			
		||||
@ -375,7 +380,7 @@ func NewApp(
 | 
			
		||||
 | 
			
		||||
	keys := sdk.NewKVStoreKeys(
 | 
			
		||||
		authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey,
 | 
			
		||||
		distrtypes.StoreKey, slashingtypes.StoreKey,
 | 
			
		||||
		distrtypes.StoreKey, slashingtypes.StoreKey, packetforwardtypes.StoreKey,
 | 
			
		||||
		govtypes.StoreKey, paramstypes.StoreKey, ibcexported.StoreKey,
 | 
			
		||||
		upgradetypes.StoreKey, evidencetypes.StoreKey, ibctransfertypes.StoreKey,
 | 
			
		||||
		evmtypes.StoreKey, feemarkettypes.StoreKey, authzkeeper.StoreKey,
 | 
			
		||||
@ -429,6 +434,7 @@ func NewApp(
 | 
			
		||||
	savingsSubspace := app.paramsKeeper.Subspace(savingstypes.ModuleName)
 | 
			
		||||
	ibcSubspace := app.paramsKeeper.Subspace(ibcexported.ModuleName)
 | 
			
		||||
	ibctransferSubspace := app.paramsKeeper.Subspace(ibctransfertypes.ModuleName)
 | 
			
		||||
	packetforwardSubspace := app.paramsKeeper.Subspace(packetforwardtypes.ModuleName).WithKeyTable(packetforwardtypes.ParamKeyTable())
 | 
			
		||||
	feemarketSubspace := app.paramsKeeper.Subspace(feemarkettypes.ModuleName)
 | 
			
		||||
	evmSubspace := app.paramsKeeper.Subspace(evmtypes.ModuleName)
 | 
			
		||||
	evmutilSubspace := app.paramsKeeper.Subspace(evmutiltypes.ModuleName)
 | 
			
		||||
@ -551,23 +557,49 @@ func NewApp(
 | 
			
		||||
 | 
			
		||||
	app.evmutilKeeper.SetEvmKeeper(app.evmKeeper)
 | 
			
		||||
 | 
			
		||||
	// It's important to note that the PFM Keeper must be initialized before the Transfer Keeper
 | 
			
		||||
	app.packetForwardKeeper = packetforwardkeeper.NewKeeper(
 | 
			
		||||
		appCodec,
 | 
			
		||||
		keys[packetforwardtypes.StoreKey],
 | 
			
		||||
		nil, // will be zero-value here, reference is set later on with SetTransferKeeper.
 | 
			
		||||
		app.ibcKeeper.ChannelKeeper,
 | 
			
		||||
		app.distrKeeper,
 | 
			
		||||
		app.bankKeeper,
 | 
			
		||||
		app.ibcKeeper.ChannelKeeper,
 | 
			
		||||
		govAuthAddrStr,
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	app.transferKeeper = ibctransferkeeper.NewKeeper(
 | 
			
		||||
		appCodec,
 | 
			
		||||
		keys[ibctransfertypes.StoreKey],
 | 
			
		||||
		ibctransferSubspace,
 | 
			
		||||
		app.ibcKeeper.ChannelKeeper,
 | 
			
		||||
		app.packetForwardKeeper,
 | 
			
		||||
		app.ibcKeeper.ChannelKeeper,
 | 
			
		||||
		&app.ibcKeeper.PortKeeper,
 | 
			
		||||
		app.accountKeeper,
 | 
			
		||||
		app.bankKeeper,
 | 
			
		||||
		scopedTransferKeeper,
 | 
			
		||||
	)
 | 
			
		||||
	app.packetForwardKeeper.SetTransferKeeper(app.transferKeeper)
 | 
			
		||||
	transferModule := transfer.NewAppModule(app.transferKeeper)
 | 
			
		||||
	transferIBCModule := transfer.NewIBCModule(app.transferKeeper)
 | 
			
		||||
 | 
			
		||||
	// allow ibc packet forwarding for ibc transfers.
 | 
			
		||||
	// transfer stack contains (from top to bottom):
 | 
			
		||||
	// - Packet Forward Middleware
 | 
			
		||||
	// - Transfer
 | 
			
		||||
	var transferStack ibcporttypes.IBCModule
 | 
			
		||||
	transferStack = transfer.NewIBCModule(app.transferKeeper)
 | 
			
		||||
	transferStack = packetforward.NewIBCMiddleware(
 | 
			
		||||
		transferStack,
 | 
			
		||||
		app.packetForwardKeeper,
 | 
			
		||||
		0, // retries on timeout
 | 
			
		||||
		packetforwardkeeper.DefaultForwardTransferPacketTimeoutTimestamp,
 | 
			
		||||
		packetforwardkeeper.DefaultRefundTransferPacketTimeoutTimestamp,
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	// Create static IBC router, add transfer route, then set and seal it
 | 
			
		||||
	ibcRouter := porttypes.NewRouter()
 | 
			
		||||
	ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferIBCModule)
 | 
			
		||||
	ibcRouter := ibcporttypes.NewRouter()
 | 
			
		||||
	ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferStack)
 | 
			
		||||
	app.ibcKeeper.SetRouter(ibcRouter)
 | 
			
		||||
 | 
			
		||||
	app.auctionKeeper = auctionkeeper.NewKeeper(
 | 
			
		||||
@ -789,6 +821,7 @@ func NewApp(
 | 
			
		||||
		slashing.NewAppModule(appCodec, app.slashingKeeper, app.accountKeeper, app.bankKeeper, app.stakingKeeper, slashingSubspace),
 | 
			
		||||
		consensus.NewAppModule(appCodec, app.consensusParamsKeeper),
 | 
			
		||||
		ibc.NewAppModule(app.ibcKeeper),
 | 
			
		||||
		packetforward.NewAppModule(app.packetForwardKeeper, packetforwardSubspace),
 | 
			
		||||
		evm.NewAppModule(app.evmKeeper, app.accountKeeper),
 | 
			
		||||
		feemarket.NewAppModule(app.feeMarketKeeper, feemarketSubspace),
 | 
			
		||||
		upgrade.NewAppModule(&app.upgradeKeeper),
 | 
			
		||||
@ -870,6 +903,7 @@ func NewApp(
 | 
			
		||||
		earntypes.ModuleName,
 | 
			
		||||
		routertypes.ModuleName,
 | 
			
		||||
		consensusparamtypes.ModuleName,
 | 
			
		||||
		packetforwardtypes.ModuleName,
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	// Warning: Some end blockers must run before others. Ensure the dependencies are understood before modifying this list.
 | 
			
		||||
@ -914,6 +948,7 @@ func NewApp(
 | 
			
		||||
		communitytypes.ModuleName,
 | 
			
		||||
		metricstypes.ModuleName,
 | 
			
		||||
		consensusparamtypes.ModuleName,
 | 
			
		||||
		packetforwardtypes.ModuleName,
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	// Warning: Some init genesis methods must run before others. Ensure the dependencies are understood before modifying this list
 | 
			
		||||
@ -956,6 +991,7 @@ func NewApp(
 | 
			
		||||
		routertypes.ModuleName,
 | 
			
		||||
		metricstypes.ModuleName,
 | 
			
		||||
		consensusparamtypes.ModuleName,
 | 
			
		||||
		packetforwardtypes.ModuleName,
 | 
			
		||||
		crisistypes.ModuleName, // runs the invariants at genesis, should run after other modules
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6
									
								
								ci/env/kava-protonet/genesis.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								ci/env/kava-protonet/genesis.json
									
									
									
									
										vendored
									
									
								
							@ -3000,6 +3000,12 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "params": null,
 | 
			
		||||
    "packetfowardmiddleware": {
 | 
			
		||||
      "params": {
 | 
			
		||||
        "fee_percentage": "0.000000000000000000"
 | 
			
		||||
      },
 | 
			
		||||
      "in_flight_packets": {}
 | 
			
		||||
    },
 | 
			
		||||
    "pricefeed": {
 | 
			
		||||
      "params": {
 | 
			
		||||
        "markets": [
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
									
									
									
									
								
							@ -13,6 +13,7 @@ require (
 | 
			
		||||
	github.com/cosmos/cosmos-sdk v0.47.7
 | 
			
		||||
	github.com/cosmos/go-bip39 v1.0.0
 | 
			
		||||
	github.com/cosmos/gogoproto v1.4.10
 | 
			
		||||
	github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.2
 | 
			
		||||
	github.com/cosmos/ibc-go/v7 v7.3.1
 | 
			
		||||
	github.com/ethereum/go-ethereum v1.10.26
 | 
			
		||||
	github.com/evmos/ethermint v0.21.0
 | 
			
		||||
@ -133,6 +134,7 @@ require (
 | 
			
		||||
	github.com/holiman/uint256 v1.2.1 // indirect
 | 
			
		||||
	github.com/huandu/skiplist v1.2.0 // indirect
 | 
			
		||||
	github.com/huin/goupnp v1.0.3 // indirect
 | 
			
		||||
	github.com/iancoleman/orderedmap v0.2.0 // indirect
 | 
			
		||||
	github.com/improbable-eng/grpc-web v0.15.0 // indirect
 | 
			
		||||
	github.com/inconshreveable/mousetrap v1.1.0 // indirect
 | 
			
		||||
	github.com/jackpal/go-nat-pmp v1.0.2 // indirect
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										6
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								go.sum
									
									
									
									
									
								
							@ -416,6 +416,8 @@ github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoK
 | 
			
		||||
github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek=
 | 
			
		||||
github.com/cosmos/iavl v0.20.1 h1:rM1kqeG3/HBT85vsZdoSNsehciqUQPWrR4BYmqE2+zg=
 | 
			
		||||
github.com/cosmos/iavl v0.20.1/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A=
 | 
			
		||||
github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.2 h1:6zjj+yIpMbCTRI2eJ2fXuflElENs3mrUSLH/TSWL8fk=
 | 
			
		||||
github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.1.2/go.mod h1:UvDmcGIWJPIytq+Q78/ff5NTOsuX/7IrNgEugTW5i0s=
 | 
			
		||||
github.com/cosmos/ibc-go/v7 v7.3.1 h1:bil1IjnHdyWDASFYKfwdRiNtFP6WK3osW7QFEAgU4I8=
 | 
			
		||||
github.com/cosmos/ibc-go/v7 v7.3.1/go.mod h1:wvx4pPBofe5ZdMNV3OFRxSI4auEP5Qfqf8JXLLNV04g=
 | 
			
		||||
github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM=
 | 
			
		||||
@ -813,6 +815,8 @@ github.com/huin/goupnp v1.0.3-0.20220313090229-ca81a64b4204/go.mod h1:ZxNlw5WqJj
 | 
			
		||||
github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ=
 | 
			
		||||
github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y=
 | 
			
		||||
github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o=
 | 
			
		||||
github.com/iancoleman/orderedmap v0.2.0 h1:sq1N/TFpYH++aViPcaKjys3bDClUEU7s5B+z6jq8pNA=
 | 
			
		||||
github.com/iancoleman/orderedmap v0.2.0/go.mod h1:N0Wam8K1arqPXNWjMo21EXnBPOPp36vB07FNRdD2geA=
 | 
			
		||||
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
 | 
			
		||||
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=
 | 
			
		||||
@ -1292,6 +1296,8 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe
 | 
			
		||||
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/mock v0.2.0 h1:TaP3xedm7JaAgScZO7tlvlKrqT0p7I6OsdGB5YNSMDU=
 | 
			
		||||
go.uber.org/mock v0.2.0/go.mod h1:J0y0rp9L3xiff1+ZBfKxlC1fz2+aO16tw0tsDOixfuM=
 | 
			
		||||
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/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user