@agoric/cosmos 0.35.0-upgrade-14-dev-0169c7e.0 → 0.35.0-upgrade-16-dev-07b0130.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/CHANGELOG.md +121 -77
  2. package/MAINTAINERS.md +3 -0
  3. package/Makefile +49 -26
  4. package/ante/ante.go +11 -11
  5. package/ante/inbound_test.go +3 -2
  6. package/ante/vm_admission.go +2 -1
  7. package/app/app.go +260 -175
  8. package/app/export.go +13 -6
  9. package/app/upgrade.go +76 -0
  10. package/cmd/agd/agvm.go +42 -0
  11. package/cmd/agd/main.go +132 -11
  12. package/cmd/libdaemon/main.go +67 -53
  13. package/cmd/libdaemon/main_test.go +2 -1
  14. package/daemon/cmd/genaccounts.go +13 -9
  15. package/daemon/cmd/root.go +186 -73
  16. package/daemon/cmd/root_test.go +190 -2
  17. package/daemon/cmd/testnet.go +17 -6
  18. package/daemon/main.go +6 -3
  19. package/e2e_test/Makefile +29 -0
  20. package/e2e_test/README.md +100 -0
  21. package/e2e_test/go.mod +217 -0
  22. package/e2e_test/go.sum +1323 -0
  23. package/e2e_test/ibc_conformance_test.go +56 -0
  24. package/e2e_test/pfm_test.go +613 -0
  25. package/e2e_test/util.go +271 -0
  26. package/git-revision.txt +1 -1
  27. package/go.mod +110 -68
  28. package/go.sum +601 -248
  29. package/package.json +9 -5
  30. package/proto/agoric/swingset/genesis.proto +4 -0
  31. package/proto/agoric/swingset/swingset.proto +1 -1
  32. package/proto/agoric/vlocalchain/.clang-format +7 -0
  33. package/proto/agoric/vlocalchain/vlocalchain.proto +31 -0
  34. package/proto/agoric/vstorage/query.proto +53 -1
  35. package/proto/agoric/vtransfer/genesis.proto +18 -0
  36. package/scripts/protocgen.sh +16 -6
  37. package/third_party/proto/buf.yaml +1 -0
  38. package/third_party/proto/cosmos/base/query/v1beta1/pagination.proto +4 -1
  39. package/third_party/proto/cosmos/base/v1beta1/coin.proto +7 -4
  40. package/third_party/proto/cosmos/upgrade/v1beta1/upgrade.proto +16 -6
  41. package/third_party/proto/cosmos_proto/cosmos.proto +97 -0
  42. package/third_party/proto/google/api/annotations.proto +1 -1
  43. package/third_party/proto/google/api/http.proto +181 -120
  44. package/third_party/proto/google/api/httpbody.proto +9 -6
  45. package/third_party/proto/google/protobuf/any.proto +1 -7
  46. package/third_party/proto/ibc/core/channel/v1/channel.proto +15 -1
  47. package/third_party/proto/ibc/core/client/v1/client.proto +9 -6
  48. package/types/kv_entry_helpers.go +42 -0
  49. package/upgradegaia.sh +21 -12
  50. package/vm/action.go +28 -24
  51. package/vm/action_test.go +36 -16
  52. package/vm/client.go +113 -0
  53. package/vm/client_test.go +182 -0
  54. package/vm/controller.go +18 -42
  55. package/vm/core_proposals.go +22 -2
  56. package/vm/jsonrpcconn/jsonrpcconn.go +160 -0
  57. package/vm/jsonrpcconn/jsonrpcconn_test.go +126 -0
  58. package/vm/proto_json.go +38 -0
  59. package/vm/proto_json_test.go +103 -0
  60. package/vm/server.go +124 -0
  61. package/x/swingset/abci.go +10 -10
  62. package/x/swingset/alias.go +2 -0
  63. package/x/swingset/client/cli/query.go +2 -2
  64. package/x/swingset/client/cli/tx.go +52 -33
  65. package/x/swingset/client/proposal_handler.go +2 -17
  66. package/x/swingset/genesis.go +84 -24
  67. package/x/swingset/handler.go +2 -1
  68. package/x/swingset/keeper/extension_snapshotter.go +2 -2
  69. package/x/swingset/keeper/keeper.go +21 -36
  70. package/x/swingset/keeper/keeper_test.go +1 -1
  71. package/x/swingset/keeper/msg_server.go +20 -22
  72. package/x/swingset/keeper/proposal.go +13 -3
  73. package/x/swingset/keeper/querier.go +23 -14
  74. package/x/swingset/keeper/swing_store_exports_handler.go +21 -6
  75. package/x/swingset/keeper/test_utils.go +16 -0
  76. package/x/swingset/module.go +7 -7
  77. package/x/swingset/proposal_handler.go +5 -4
  78. package/x/swingset/swingset.go +4 -2
  79. package/x/swingset/testing/queue.go +17 -0
  80. package/x/swingset/types/codec.go +2 -2
  81. package/x/swingset/types/default-params.go +1 -1
  82. package/x/swingset/types/expected_keepers.go +3 -2
  83. package/x/swingset/types/genesis.pb.go +78 -25
  84. package/x/swingset/types/msgs.go +44 -24
  85. package/x/swingset/types/msgs.pb.go +16 -16
  86. package/x/swingset/types/params.go +2 -1
  87. package/x/swingset/types/proposal.go +10 -9
  88. package/x/swingset/types/swingset.pb.go +1 -1
  89. package/x/swingset/types/types.go +30 -28
  90. package/x/vbank/genesis.go +0 -2
  91. package/x/vbank/handler.go +2 -1
  92. package/x/vbank/keeper/keeper.go +3 -2
  93. package/x/vbank/keeper/querier.go +9 -4
  94. package/x/vbank/keeper/rewards.go +1 -1
  95. package/x/vbank/module.go +0 -5
  96. package/x/vbank/types/msgs.go +0 -12
  97. package/x/vbank/vbank.go +20 -19
  98. package/x/vbank/vbank_test.go +10 -10
  99. package/x/vibc/alias.go +3 -0
  100. package/x/vibc/handler.go +16 -9
  101. package/x/vibc/keeper/keeper.go +112 -74
  102. package/x/vibc/keeper/triggers.go +101 -0
  103. package/x/vibc/module.go +5 -8
  104. package/x/vibc/types/expected_keepers.go +26 -5
  105. package/x/vibc/types/ibc_module.go +336 -0
  106. package/x/vibc/types/msgs.go +1 -1
  107. package/x/vibc/types/msgs.pb.go +1 -1
  108. package/x/vibc/types/receiver.go +170 -0
  109. package/x/vlocalchain/alias.go +19 -0
  110. package/x/vlocalchain/handler.go +21 -0
  111. package/x/vlocalchain/keeper/keeper.go +279 -0
  112. package/x/vlocalchain/keeper/keeper_test.go +97 -0
  113. package/x/vlocalchain/types/codec.go +34 -0
  114. package/x/vlocalchain/types/key.go +27 -0
  115. package/x/vlocalchain/types/msgs.go +16 -0
  116. package/x/vlocalchain/types/vlocalchain.pb.go +1072 -0
  117. package/x/vlocalchain/vlocalchain.go +114 -0
  118. package/x/vlocalchain/vlocalchain_test.go +434 -0
  119. package/x/vstorage/README.md +138 -0
  120. package/x/vstorage/capdata/capdata.go +298 -0
  121. package/x/vstorage/capdata/capdata_test.go +352 -0
  122. package/x/vstorage/client/cli/query.go +51 -4
  123. package/x/vstorage/handler.go +2 -1
  124. package/x/vstorage/keeper/grpc_query.go +220 -0
  125. package/x/vstorage/keeper/keeper.go +16 -22
  126. package/x/vstorage/keeper/keeper_grpc_test.go +300 -0
  127. package/x/vstorage/keeper/keeper_test.go +1 -1
  128. package/x/vstorage/keeper/querier.go +11 -6
  129. package/x/vstorage/keeper/querier_test.go +4 -3
  130. package/x/vstorage/module.go +0 -5
  131. package/x/vstorage/testing/queue.go +27 -0
  132. package/x/vstorage/types/query.pb.go +646 -36
  133. package/x/vstorage/types/query.pb.gw.go +119 -0
  134. package/x/vstorage/vstorage.go +16 -15
  135. package/x/vstorage/vstorage_test.go +5 -5
  136. package/x/vtransfer/alias.go +13 -0
  137. package/x/vtransfer/genesis.go +39 -0
  138. package/x/vtransfer/genesis_test.go +12 -0
  139. package/x/vtransfer/handler.go +20 -0
  140. package/x/vtransfer/ibc_middleware.go +186 -0
  141. package/x/vtransfer/ibc_middleware_test.go +448 -0
  142. package/x/vtransfer/keeper/keeper.go +281 -0
  143. package/x/vtransfer/module.go +124 -0
  144. package/x/vtransfer/types/expected_keepers.go +38 -0
  145. package/x/vtransfer/types/genesis.pb.go +327 -0
  146. package/x/vtransfer/types/key.go +9 -0
  147. package/x/vtransfer/types/msgs.go +9 -0
  148. package/ante/fee.go +0 -96
  149. package/proto/agoric/lien/genesis.proto +0 -25
  150. package/proto/agoric/lien/lien.proto +0 -25
  151. package/x/lien/alias.go +0 -17
  152. package/x/lien/genesis.go +0 -58
  153. package/x/lien/genesis_test.go +0 -101
  154. package/x/lien/keeper/account.go +0 -290
  155. package/x/lien/keeper/keeper.go +0 -254
  156. package/x/lien/keeper/keeper_test.go +0 -623
  157. package/x/lien/lien.go +0 -203
  158. package/x/lien/lien_test.go +0 -529
  159. package/x/lien/module.go +0 -115
  160. package/x/lien/spec/01_concepts.md +0 -146
  161. package/x/lien/spec/02_messages.md +0 -96
  162. package/x/lien/types/accountkeeper.go +0 -81
  163. package/x/lien/types/accountstate.go +0 -27
  164. package/x/lien/types/expected_keepers.go +0 -18
  165. package/x/lien/types/genesis.pb.go +0 -567
  166. package/x/lien/types/key.go +0 -25
  167. package/x/lien/types/lien.pb.go +0 -403
  168. package/x/vibc/ibc.go +0 -393
  169. /package/{src/index.cjs → index.cjs} +0 -0
package/app/app.go CHANGED
@@ -1,6 +1,7 @@
1
1
  package gaia
2
2
 
3
3
  import (
4
+ "context"
4
5
  "encoding/json"
5
6
  "fmt"
6
7
  "io"
@@ -11,10 +12,11 @@ import (
11
12
  "runtime/debug"
12
13
  "time"
13
14
 
15
+ sdkioerrors "cosmossdk.io/errors"
14
16
  "github.com/cosmos/cosmos-sdk/baseapp"
15
17
  "github.com/cosmos/cosmos-sdk/client"
18
+ nodeservice "github.com/cosmos/cosmos-sdk/client/grpc/node"
16
19
  "github.com/cosmos/cosmos-sdk/client/grpc/tmservice"
17
- "github.com/cosmos/cosmos-sdk/client/rpc"
18
20
  "github.com/cosmos/cosmos-sdk/codec"
19
21
  "github.com/cosmos/cosmos-sdk/codec/types"
20
22
  "github.com/cosmos/cosmos-sdk/server/api"
@@ -23,12 +25,10 @@ import (
23
25
  "github.com/cosmos/cosmos-sdk/simapp"
24
26
  storetypes "github.com/cosmos/cosmos-sdk/store/types"
25
27
  sdk "github.com/cosmos/cosmos-sdk/types"
26
- "github.com/cosmos/cosmos-sdk/types/errors"
27
28
  "github.com/cosmos/cosmos-sdk/types/module"
28
29
  "github.com/cosmos/cosmos-sdk/version"
29
30
  "github.com/cosmos/cosmos-sdk/x/auth"
30
31
  "github.com/cosmos/cosmos-sdk/x/auth/ante"
31
- authrest "github.com/cosmos/cosmos-sdk/x/auth/client/rest"
32
32
  authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper"
33
33
  authsims "github.com/cosmos/cosmos-sdk/x/auth/simulation"
34
34
  authtx "github.com/cosmos/cosmos-sdk/x/auth/tx"
@@ -44,7 +44,6 @@ import (
44
44
  "github.com/cosmos/cosmos-sdk/x/capability"
45
45
  capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper"
46
46
  capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types"
47
- crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types"
48
47
  distr "github.com/cosmos/cosmos-sdk/x/distribution"
49
48
  distrclient "github.com/cosmos/cosmos-sdk/x/distribution/client"
50
49
  distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper"
@@ -58,8 +57,11 @@ import (
58
57
  "github.com/cosmos/cosmos-sdk/x/genutil"
59
58
  genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
60
59
  "github.com/cosmos/cosmos-sdk/x/gov"
60
+ govclient "github.com/cosmos/cosmos-sdk/x/gov/client"
61
61
  govkeeper "github.com/cosmos/cosmos-sdk/x/gov/keeper"
62
62
  govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
63
+ govtypesv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
64
+ govv1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
63
65
  "github.com/cosmos/cosmos-sdk/x/mint"
64
66
  mintkeeper "github.com/cosmos/cosmos-sdk/x/mint/keeper"
65
67
  minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
@@ -78,22 +80,22 @@ import (
78
80
  upgradeclient "github.com/cosmos/cosmos-sdk/x/upgrade/client"
79
81
  upgradekeeper "github.com/cosmos/cosmos-sdk/x/upgrade/keeper"
80
82
  upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
81
- ica "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts"
82
-
83
- icahost "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/host"
84
- icahostkeeper "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/host/keeper"
85
- icahosttypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/host/types"
86
- icatypes "github.com/cosmos/ibc-go/v4/modules/apps/27-interchain-accounts/types"
87
- "github.com/cosmos/ibc-go/v4/modules/apps/transfer"
88
- ibctransferkeeper "github.com/cosmos/ibc-go/v4/modules/apps/transfer/keeper"
89
- ibctransfertypes "github.com/cosmos/ibc-go/v4/modules/apps/transfer/types"
90
- ibc "github.com/cosmos/ibc-go/v4/modules/core"
91
- ibcclient "github.com/cosmos/ibc-go/v4/modules/core/02-client"
92
- ibcclientclient "github.com/cosmos/ibc-go/v4/modules/core/02-client/client"
93
- ibcclienttypes "github.com/cosmos/ibc-go/v4/modules/core/02-client/types"
94
- porttypes "github.com/cosmos/ibc-go/v4/modules/core/05-port/types"
95
- ibchost "github.com/cosmos/ibc-go/v4/modules/core/24-host"
96
- ibckeeper "github.com/cosmos/ibc-go/v4/modules/core/keeper"
83
+ ica "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts"
84
+
85
+ icahost "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts/host"
86
+ icahostkeeper "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts/host/keeper"
87
+ icahosttypes "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts/host/types"
88
+ icatypes "github.com/cosmos/ibc-go/v6/modules/apps/27-interchain-accounts/types"
89
+ ibctransfer "github.com/cosmos/ibc-go/v6/modules/apps/transfer"
90
+ ibctransferkeeper "github.com/cosmos/ibc-go/v6/modules/apps/transfer/keeper"
91
+ ibctransfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types"
92
+ ibc "github.com/cosmos/ibc-go/v6/modules/core"
93
+ ibcclient "github.com/cosmos/ibc-go/v6/modules/core/02-client"
94
+ ibcclientclient "github.com/cosmos/ibc-go/v6/modules/core/02-client/client"
95
+ ibcclienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types"
96
+ ibcporttypes "github.com/cosmos/ibc-go/v6/modules/core/05-port/types"
97
+ ibchost "github.com/cosmos/ibc-go/v6/modules/core/24-host"
98
+ ibckeeper "github.com/cosmos/ibc-go/v6/modules/core/keeper"
97
99
  "github.com/gorilla/mux"
98
100
  "github.com/rakyll/statik/fs"
99
101
  "github.com/spf13/cast"
@@ -108,8 +110,9 @@ import (
108
110
 
109
111
  appante "github.com/Agoric/agoric-sdk/golang/cosmos/ante"
110
112
  agorictypes "github.com/Agoric/agoric-sdk/golang/cosmos/types"
113
+
114
+ // conv "github.com/Agoric/agoric-sdk/golang/cosmos/types/conv"
111
115
  "github.com/Agoric/agoric-sdk/golang/cosmos/vm"
112
- "github.com/Agoric/agoric-sdk/golang/cosmos/x/lien"
113
116
  "github.com/Agoric/agoric-sdk/golang/cosmos/x/swingset"
114
117
  swingsetclient "github.com/Agoric/agoric-sdk/golang/cosmos/x/swingset/client"
115
118
  swingsetkeeper "github.com/Agoric/agoric-sdk/golang/cosmos/x/swingset/keeper"
@@ -117,7 +120,16 @@ import (
117
120
  "github.com/Agoric/agoric-sdk/golang/cosmos/x/vbank"
118
121
  vbanktypes "github.com/Agoric/agoric-sdk/golang/cosmos/x/vbank/types"
119
122
  "github.com/Agoric/agoric-sdk/golang/cosmos/x/vibc"
123
+ "github.com/Agoric/agoric-sdk/golang/cosmos/x/vlocalchain"
120
124
  "github.com/Agoric/agoric-sdk/golang/cosmos/x/vstorage"
125
+ "github.com/Agoric/agoric-sdk/golang/cosmos/x/vtransfer"
126
+ vtransferkeeper "github.com/Agoric/agoric-sdk/golang/cosmos/x/vtransfer/keeper"
127
+ testtypes "github.com/cosmos/ibc-go/v6/testing/types"
128
+
129
+ // Import the packet forward middleware
130
+ packetforward "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v6/packetforward"
131
+ packetforwardkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v6/packetforward/keeper"
132
+ packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v6/packetforward/types"
121
133
 
122
134
  // unnamed import of statik for swagger UI support
123
135
  _ "github.com/cosmos/cosmos-sdk/client/docs/statik"
@@ -148,15 +160,15 @@ var (
148
160
  staking.AppModuleBasic{},
149
161
  mint.AppModuleBasic{},
150
162
  distr.AppModuleBasic{},
151
- gov.NewAppModuleBasic(
163
+ gov.NewAppModuleBasic([]govclient.ProposalHandler{
152
164
  paramsclient.ProposalHandler,
153
165
  distrclient.ProposalHandler,
154
- upgradeclient.ProposalHandler,
155
- upgradeclient.CancelProposalHandler,
166
+ upgradeclient.LegacyProposalHandler,
167
+ upgradeclient.LegacyCancelProposalHandler,
156
168
  ibcclientclient.UpdateClientProposalHandler,
157
169
  ibcclientclient.UpgradeProposalHandler,
158
170
  swingsetclient.CoreEvalProposalHandler,
159
- ),
171
+ }),
160
172
  params.AppModuleBasic{},
161
173
  slashing.AppModuleBasic{},
162
174
  feegrantmodule.AppModuleBasic{},
@@ -164,14 +176,15 @@ var (
164
176
  ibc.AppModuleBasic{},
165
177
  upgrade.AppModuleBasic{},
166
178
  evidence.AppModuleBasic{},
167
- transfer.AppModuleBasic{},
179
+ ibctransfer.AppModuleBasic{},
168
180
  vesting.AppModuleBasic{},
169
181
  ica.AppModuleBasic{},
182
+ packetforward.AppModuleBasic{},
170
183
  swingset.AppModuleBasic{},
171
184
  vstorage.AppModuleBasic{},
172
185
  vibc.AppModuleBasic{},
173
186
  vbank.AppModuleBasic{},
174
- lien.AppModuleBasic{},
187
+ vtransfer.AppModuleBasic{},
175
188
  )
176
189
 
177
190
  // module account permissions
@@ -207,20 +220,24 @@ type GaiaApp struct { // nolint: golint
207
220
 
208
221
  controllerInited bool
209
222
  bootstrapNeeded bool
210
- lienPort int
211
223
  swingsetPort int
212
224
  vbankPort int
213
225
  vibcPort int
214
226
  vstoragePort int
227
+ vlocalchainPort int
228
+ vtransferPort int
215
229
 
216
230
  upgradeDetails *upgradeDetails
217
231
 
218
232
  invCheckPeriod uint
219
233
 
220
234
  // keys to access the substores
221
- keys map[string]*sdk.KVStoreKey
222
- tkeys map[string]*sdk.TransientStoreKey
223
- memKeys map[string]*sdk.MemoryStoreKey
235
+ keys map[string]*storetypes.KVStoreKey
236
+ tkeys map[string]*storetypes.TransientStoreKey
237
+ memKeys map[string]*storetypes.MemoryStoreKey
238
+
239
+ // manage communication from the VM to the ABCI app
240
+ AgdServer *vm.AgdServer
224
241
 
225
242
  // keepers
226
243
  AccountKeeper authkeeper.AccountKeeper
@@ -234,12 +251,13 @@ type GaiaApp struct { // nolint: golint
234
251
  UpgradeKeeper upgradekeeper.Keeper
235
252
  ParamsKeeper paramskeeper.Keeper
236
253
  // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly
237
- IBCKeeper *ibckeeper.Keeper
238
- ICAHostKeeper icahostkeeper.Keeper
239
- EvidenceKeeper evidencekeeper.Keeper
240
- TransferKeeper ibctransferkeeper.Keeper
241
- FeeGrantKeeper feegrantkeeper.Keeper
242
- AuthzKeeper authzkeeper.Keeper
254
+ IBCKeeper *ibckeeper.Keeper
255
+ ICAHostKeeper icahostkeeper.Keeper
256
+ PacketForwardKeeper *packetforwardkeeper.Keeper
257
+ EvidenceKeeper evidencekeeper.Keeper
258
+ TransferKeeper ibctransferkeeper.Keeper
259
+ FeeGrantKeeper feegrantkeeper.Keeper
260
+ AuthzKeeper authzkeeper.Keeper
243
261
 
244
262
  SwingStoreExportsHandler swingset.SwingStoreExportsHandler
245
263
  SwingSetSnapshotter swingset.ExtensionSnapshotter
@@ -247,7 +265,8 @@ type GaiaApp struct { // nolint: golint
247
265
  VstorageKeeper vstorage.Keeper
248
266
  VibcKeeper vibc.Keeper
249
267
  VbankKeeper vbank.Keeper
250
- LienKeeper lien.Keeper
268
+ VlocalchainKeeper vlocalchain.Keeper
269
+ VtransferKeeper vtransferkeeper.Keeper
251
270
 
252
271
  // make scoped keepers public for test purposes
253
272
  ScopedIBCKeeper capabilitykeeper.ScopedKeeper
@@ -284,19 +303,18 @@ func NewGaiaApp(
284
303
  appOpts servertypes.AppOptions,
285
304
  baseAppOptions ...func(*baseapp.BaseApp),
286
305
  ) *GaiaApp {
287
- defaultController := func(needReply bool, str string) (string, error) {
288
- fmt.Fprintln(os.Stderr, "FIXME: Would upcall to controller with", str)
289
- return "", nil
306
+ var defaultController vm.Sender = func(ctx context.Context, needReply bool, jsonRequest string) (jsonReply string, err error) {
307
+ return "", fmt.Errorf("unexpected VM upcall with no controller: %s", jsonRequest)
290
308
  }
291
309
  return NewAgoricApp(
292
- defaultController,
310
+ defaultController, vm.NewAgdServer(),
293
311
  logger, db, traceStore, loadLatest, skipUpgradeHeights,
294
312
  homePath, invCheckPeriod, encodingConfig, appOpts, baseAppOptions...,
295
313
  )
296
314
  }
297
315
 
298
316
  func NewAgoricApp(
299
- sendToController func(bool, string) (string, error),
317
+ sendToController vm.Sender, agdServer *vm.AgdServer,
300
318
  logger log.Logger, db dbm.DB, traceStore io.Writer, loadLatest bool, skipUpgradeHeights map[int64]bool,
301
319
  homePath string, invCheckPeriod uint, encodingConfig gaiaappparams.EncodingConfig, appOpts servertypes.AppOptions, baseAppOptions ...func(*baseapp.BaseApp),
302
320
  ) *GaiaApp {
@@ -313,15 +331,17 @@ func NewAgoricApp(
313
331
  authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey,
314
332
  minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey,
315
333
  govtypes.StoreKey, paramstypes.StoreKey, ibchost.StoreKey, upgradetypes.StoreKey,
316
- evidencetypes.StoreKey, ibctransfertypes.StoreKey,
334
+ evidencetypes.StoreKey, ibctransfertypes.StoreKey, packetforwardtypes.StoreKey,
317
335
  capabilitytypes.StoreKey, feegrant.StoreKey, authzkeeper.StoreKey, icahosttypes.StoreKey,
318
- swingset.StoreKey, vstorage.StoreKey, vibc.StoreKey, vbank.StoreKey, lien.StoreKey,
336
+ swingset.StoreKey, vstorage.StoreKey, vibc.StoreKey,
337
+ vlocalchain.StoreKey, vtransfer.StoreKey, vbank.StoreKey,
319
338
  )
320
339
  tkeys := sdk.NewTransientStoreKeys(paramstypes.TStoreKey)
321
340
  memKeys := sdk.NewMemoryStoreKeys(capabilitytypes.MemStoreKey)
322
341
 
323
342
  app := &GaiaApp{
324
343
  BaseApp: bApp,
344
+ AgdServer: agdServer,
325
345
  legacyAmino: legacyAmino,
326
346
  appCodec: appCodec,
327
347
  interfaceRegistry: interfaceRegistry,
@@ -340,7 +360,7 @@ func NewAgoricApp(
340
360
 
341
361
  // set the BaseApp's parameter store
342
362
  bApp.SetParamStore(
343
- app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramskeeper.ConsensusParamsKeyTable()),
363
+ app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramstypes.ConsensusParamsKeyTable()),
344
364
  )
345
365
 
346
366
  // add capability keeper and ScopeToModule for ibc module
@@ -352,15 +372,15 @@ func NewAgoricApp(
352
372
  app.CapabilityKeeper.Seal()
353
373
 
354
374
  // add keepers
355
- innerAk := authkeeper.NewAccountKeeper(
375
+ app.AccountKeeper = authkeeper.NewAccountKeeper(
356
376
  appCodec,
357
377
  keys[authtypes.StoreKey],
358
378
  app.GetSubspace(authtypes.ModuleName),
359
379
  authtypes.ProtoBaseAccount,
360
380
  maccPerms,
381
+ appName,
361
382
  )
362
- wrappedAccountKeeper := lien.NewWrappedAccountKeeper(innerAk)
363
- app.AccountKeeper = wrappedAccountKeeper
383
+
364
384
  app.BankKeeper = bankkeeper.NewBaseKeeper(
365
385
  appCodec,
366
386
  keys[banktypes.StoreKey],
@@ -372,6 +392,7 @@ func NewAgoricApp(
372
392
  keys[authzkeeper.StoreKey],
373
393
  appCodec,
374
394
  app.BaseApp.MsgServiceRouter(),
395
+ app.AccountKeeper,
375
396
  )
376
397
  app.FeeGrantKeeper = feegrantkeeper.NewKeeper(
377
398
  appCodec,
@@ -403,7 +424,6 @@ func NewAgoricApp(
403
424
  &stakingKeeper,
404
425
  // This is the pool to distribute from immediately. DO NOT ALTER.
405
426
  vbanktypes.GiveawayPoolName,
406
- app.ModuleAccountAddrs(),
407
427
  )
408
428
  app.SlashingKeeper = slashingkeeper.NewKeeper(
409
429
  appCodec,
@@ -417,6 +437,7 @@ func NewAgoricApp(
417
437
  appCodec,
418
438
  homePath,
419
439
  app.BaseApp,
440
+ authtypes.NewModuleAddress(govtypes.ModuleName).String(),
420
441
  )
421
442
 
422
443
  // register the staking hooks
@@ -436,11 +457,11 @@ func NewAgoricApp(
436
457
  )
437
458
 
438
459
  // This function is tricky to get right, so we build it ourselves.
439
- callToController := func(ctx sdk.Context, str string) (string, error) {
460
+ callToController := func(ctx sdk.Context, jsonRequest string) (jsonReply string, err error) {
440
461
  app.CheckControllerInited(true)
441
462
  // We use SwingSet-level metering to charge the user for the call.
442
- defer vm.SetControllerContext(ctx)()
443
- return sendToController(true, str)
463
+ defer app.AgdServer.SetControllerContext(ctx)()
464
+ return sendToController(sdk.WrapSDKContext(ctx), true, jsonRequest)
444
465
  }
445
466
 
446
467
  setBootstrapNeeded := func() {
@@ -450,7 +471,7 @@ func NewAgoricApp(
450
471
  app.VstorageKeeper = vstorage.NewKeeper(
451
472
  keys[vstorage.StoreKey],
452
473
  )
453
- app.vstoragePort = vm.RegisterPortHandler("vstorage", vstorage.NewStorageHandler(app.VstorageKeeper))
474
+ app.vstoragePort = app.AgdServer.MustRegisterPortHandler("vstorage", vstorage.NewStorageHandler(app.VstorageKeeper))
454
475
 
455
476
  // The SwingSetKeeper is the Keeper from the SwingSet module
456
477
  app.SwingSetKeeper = swingset.NewKeeper(
@@ -459,7 +480,7 @@ func NewAgoricApp(
459
480
  app.VstorageKeeper, vbanktypes.ReservePoolName,
460
481
  callToController,
461
482
  )
462
- app.swingsetPort = vm.RegisterPortHandler("swingset", swingset.NewPortHandler(app.SwingSetKeeper))
483
+ app.swingsetPort = app.AgdServer.MustRegisterPortHandler("swingset", swingset.NewPortHandler(app.SwingSetKeeper))
463
484
 
464
485
  app.SwingStoreExportsHandler = *swingsetkeeper.NewSwingStoreExportsHandler(
465
486
  app.Logger(),
@@ -472,7 +493,7 @@ func NewAgoricApp(
472
493
  if err != nil {
473
494
  return "", err
474
495
  }
475
- return sendToController(true, string(bz))
496
+ return sendToController(context.Background(), true, string(bz))
476
497
  },
477
498
  )
478
499
 
@@ -492,16 +513,26 @@ func NewAgoricApp(
492
513
  )
493
514
 
494
515
  app.VibcKeeper = vibc.NewKeeper(
495
- appCodec, keys[vibc.StoreKey],
516
+ appCodec,
496
517
  app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper,
497
- app.BankKeeper,
498
- scopedVibcKeeper,
518
+ ).WithScope(keys[vibc.StoreKey], scopedVibcKeeper, app.SwingSetKeeper.PushAction)
519
+
520
+ vibcModule := vibc.NewAppModule(app.VibcKeeper, app.BankKeeper)
521
+ vibcIBCModule := vibc.NewIBCModule(app.VibcKeeper)
522
+ app.vibcPort = app.AgdServer.MustRegisterPortHandler("vibc", vibc.NewReceiver(app.VibcKeeper))
523
+
524
+ app.VtransferKeeper = vtransferkeeper.NewKeeper(
525
+ appCodec,
526
+ keys[vtransfer.StoreKey],
527
+ app.VibcKeeper,
528
+ scopedTransferKeeper,
499
529
  app.SwingSetKeeper.PushAction,
500
530
  )
501
531
 
502
- vibcModule := vibc.NewAppModule(app.VibcKeeper)
503
- vibcIBCModule := vibc.NewIBCModule(app.VibcKeeper)
504
- app.vibcPort = vm.RegisterPortHandler("vibc", vibcIBCModule)
532
+ vtransferModule := vtransfer.NewAppModule(app.VtransferKeeper)
533
+ app.vtransferPort = app.AgdServer.MustRegisterPortHandler("vtransfer",
534
+ vibc.NewReceiver(app.VtransferKeeper),
535
+ )
505
536
 
506
537
  app.VbankKeeper = vbank.NewKeeper(
507
538
  appCodec, keys[vbank.StoreKey], app.GetSubspace(vbank.ModuleName),
@@ -509,27 +540,18 @@ func NewAgoricApp(
509
540
  app.SwingSetKeeper.PushAction,
510
541
  )
511
542
  vbankModule := vbank.NewAppModule(app.VbankKeeper)
512
- app.vbankPort = vm.RegisterPortHandler("bank", vbank.NewPortHandler(vbankModule, app.VbankKeeper))
513
-
514
- // Lien keeper, and circular reference back to wrappedAccountKeeper
515
- app.LienKeeper = lien.NewKeeper(
516
- appCodec, keys[lien.StoreKey],
517
- wrappedAccountKeeper, app.BankKeeper, app.StakingKeeper,
518
- app.SwingSetKeeper.PushAction,
519
- )
520
- wrappedAccountKeeper.SetWrapper(app.LienKeeper.GetAccountWrapper())
521
- lienModule := lien.NewAppModule(app.LienKeeper)
522
- app.lienPort = vm.RegisterPortHandler("lien", lien.NewPortHandler(app.LienKeeper))
543
+ app.vbankPort = app.AgdServer.MustRegisterPortHandler("bank", vbank.NewPortHandler(vbankModule, app.VbankKeeper))
523
544
 
524
545
  // register the proposal types
525
- govRouter := govtypes.NewRouter()
546
+ govRouter := govv1beta1.NewRouter()
526
547
  govRouter.
527
- AddRoute(govtypes.RouterKey, govtypes.ProposalHandler).
548
+ AddRoute(govtypes.RouterKey, govv1beta1.ProposalHandler).
528
549
  AddRoute(paramproposal.RouterKey, params.NewParamChangeProposalHandler(app.ParamsKeeper)).
529
550
  AddRoute(distrtypes.RouterKey, distr.NewCommunityPoolSpendProposalHandler(app.DistrKeeper)).
530
551
  AddRoute(upgradetypes.RouterKey, upgrade.NewSoftwareUpgradeProposalHandler(app.UpgradeKeeper)).
531
552
  AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(app.IBCKeeper.ClientKeeper)).
532
553
  AddRoute(swingsettypes.RouterKey, swingset.NewSwingSetProposalHandler(app.SwingSetKeeper))
554
+ govConfig := govtypes.DefaultConfig()
533
555
 
534
556
  app.GovKeeper = govkeeper.NewKeeper(
535
557
  appCodec,
@@ -539,43 +561,95 @@ func NewAgoricApp(
539
561
  app.BankKeeper,
540
562
  &stakingKeeper,
541
563
  govRouter,
564
+ app.BaseApp.MsgServiceRouter(),
565
+ govConfig,
566
+ )
567
+
568
+ // Initialize the packet forward middleware Keeper
569
+ // It's important to note that the PFM Keeper must be initialized before the Transfer Keeper
570
+ app.PacketForwardKeeper = packetforwardkeeper.NewKeeper(
571
+ appCodec,
572
+ keys[packetforwardtypes.StoreKey],
573
+ app.GetSubspace(packetforwardtypes.ModuleName),
574
+ app.TransferKeeper, // will be zero-value here, reference is set later on with SetTransferKeeper.
575
+ app.IBCKeeper.ChannelKeeper,
576
+ app.DistrKeeper,
577
+ app.BankKeeper,
578
+ // Make vtransfer the middleware wrapper for the IBCKeeper.
579
+ app.VtransferKeeper.GetICS4Wrapper(),
542
580
  )
543
581
 
544
582
  app.TransferKeeper = ibctransferkeeper.NewKeeper(
545
583
  appCodec,
546
584
  keys[ibctransfertypes.StoreKey],
547
585
  app.GetSubspace(ibctransfertypes.ModuleName),
548
- app.IBCKeeper.ChannelKeeper,
586
+ app.PacketForwardKeeper, // Wire in the middleware ICS4Wrapper.
549
587
  app.IBCKeeper.ChannelKeeper,
550
588
  &app.IBCKeeper.PortKeeper,
551
589
  app.AccountKeeper,
552
590
  app.BankKeeper,
553
591
  scopedTransferKeeper,
554
592
  )
555
- transferModule := transfer.NewAppModule(app.TransferKeeper)
556
- transferIBCModule := transfer.NewIBCModule(app.TransferKeeper)
557
593
 
594
+ app.PacketForwardKeeper.SetTransferKeeper(app.TransferKeeper)
595
+
596
+ // NewAppModule uses a pointer to the host keeper in case there's a need to
597
+ // tie a circular knot with IBC middleware before icahostkeeper.NewKeeper
598
+ // can be called.
558
599
  app.ICAHostKeeper = icahostkeeper.NewKeeper(
559
600
  appCodec, keys[icahosttypes.StoreKey],
560
601
  app.GetSubspace(icahosttypes.SubModuleName),
602
+ app.IBCKeeper.ChannelKeeper, // This is where middleware binding would happen.
561
603
  app.IBCKeeper.ChannelKeeper,
562
604
  &app.IBCKeeper.PortKeeper,
563
605
  app.AccountKeeper,
564
606
  scopedICAHostKeeper,
565
607
  app.MsgServiceRouter(),
566
608
  )
567
- icaModule := ica.NewAppModule(nil, &app.ICAHostKeeper)
568
609
  icaHostIBCModule := icahost.NewIBCModule(app.ICAHostKeeper)
610
+ icaModule := ica.NewAppModule(nil, &app.ICAHostKeeper)
611
+
612
+ ics20TransferModule := ibctransfer.NewAppModule(app.TransferKeeper)
613
+
614
+ // Create the IBC router, which maps *module names* (not PortIDs) to modules.
615
+ ibcRouter := ibcporttypes.NewRouter()
569
616
 
570
- // create static IBC router, add transfer route, then set and seal it
571
- // FIXME: Don't be confused by the name! The port router maps *module names* (not PortIDs) to modules.
572
- ibcRouter := porttypes.NewRouter()
573
- ibcRouter.AddRoute(icahosttypes.SubModuleName, icaHostIBCModule).
574
- AddRoute(ibctransfertypes.ModuleName, transferIBCModule).
575
- AddRoute(vibc.ModuleName, vibcIBCModule)
617
+ // Add an IBC route for the ICA Host.
618
+ ibcRouter.AddRoute(icahosttypes.SubModuleName, icaHostIBCModule)
576
619
 
620
+ // Add an IBC route for vIBC.
621
+ ibcRouter.AddRoute(vibc.ModuleName, vibcIBCModule)
622
+
623
+ // Add an IBC route for ICS-20 fungible token transfers, wrapping base
624
+ // Cosmos functionality with middleware (from the inside out, Cosmos
625
+ // packet-forwarding and then our own "vtransfer").
626
+ var ics20TransferIBCModule ibcporttypes.IBCModule = ibctransfer.NewIBCModule(app.TransferKeeper)
627
+ ics20TransferIBCModule = packetforward.NewIBCMiddleware(
628
+ ics20TransferIBCModule,
629
+ app.PacketForwardKeeper,
630
+ 0, // retries on timeout
631
+ packetforwardkeeper.DefaultForwardTransferPacketTimeoutTimestamp, // forward timeout
632
+ packetforwardkeeper.DefaultRefundTransferPacketTimeoutTimestamp, // refund timeout
633
+ )
634
+ ics20TransferIBCModule = vtransfer.NewIBCMiddleware(ics20TransferIBCModule, app.VtransferKeeper)
635
+ ibcRouter.AddRoute(ibctransfertypes.ModuleName, ics20TransferIBCModule)
636
+
637
+ // Seal the router
577
638
  app.IBCKeeper.SetRouter(ibcRouter)
578
639
 
640
+ // The local chain keeper provides ICA/ICQ-like support for the VM to
641
+ // control a fresh account and/or query this Cosmos-SDK instance.
642
+ app.VlocalchainKeeper = vlocalchain.NewKeeper(
643
+ appCodec,
644
+ keys[vlocalchain.StoreKey],
645
+ app.BaseApp.MsgServiceRouter(),
646
+ app.BaseApp.GRPCQueryRouter(),
647
+ )
648
+ app.vlocalchainPort = app.AgdServer.MustRegisterPortHandler(
649
+ "vlocalchain",
650
+ vlocalchain.NewReceiver(app.VlocalchainKeeper),
651
+ )
652
+
579
653
  // create evidence keeper with router
580
654
  evidenceKeeper := evidencekeeper.NewKeeper(
581
655
  appCodec,
@@ -602,7 +676,7 @@ func NewAgoricApp(
602
676
  bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper),
603
677
  capability.NewAppModule(appCodec, *app.CapabilityKeeper),
604
678
  gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper),
605
- mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper),
679
+ mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper, nil),
606
680
  slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper),
607
681
  distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper),
608
682
  staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper),
@@ -612,13 +686,14 @@ func NewAgoricApp(
612
686
  authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry),
613
687
  ibc.NewAppModule(app.IBCKeeper),
614
688
  params.NewAppModule(app.ParamsKeeper),
615
- transferModule,
689
+ ics20TransferModule,
616
690
  icaModule,
691
+ packetforward.NewAppModule(app.PacketForwardKeeper),
617
692
  vstorage.NewAppModule(app.VstorageKeeper),
618
693
  swingset.NewAppModule(app.SwingSetKeeper, &app.SwingStoreExportsHandler, setBootstrapNeeded, app.ensureControllerInited, swingStoreExportDir),
619
694
  vibcModule,
620
695
  vbankModule,
621
- lienModule,
696
+ vtransferModule,
622
697
  )
623
698
 
624
699
  // During begin block slashing happens after distr.BeginBlocker so that
@@ -627,14 +702,19 @@ func NewAgoricApp(
627
702
  // NOTE: staking module is required if HistoricalEntries param > 0
628
703
  // NOTE: capability module's beginblocker must come before any modules using capabilities (e.g. IBC)
629
704
  app.mm.SetOrderBeginBlockers(
705
+ // Cosmos-SDK modules appear roughly in the order used by simapp and gaiad.
630
706
  // upgrades should be run first
631
707
  upgradetypes.ModuleName,
632
708
  capabilitytypes.ModuleName,
709
+ // params influence many other modules, so it should be near the top.
710
+ paramstypes.ModuleName,
633
711
  govtypes.ModuleName,
634
712
  stakingtypes.ModuleName,
713
+ // ibc apps are grouped together
635
714
  ibctransfertypes.ModuleName,
636
715
  ibchost.ModuleName,
637
716
  icatypes.ModuleName,
717
+ packetforwardtypes.ModuleName,
638
718
  authtypes.ModuleName,
639
719
  banktypes.ModuleName,
640
720
  distrtypes.ModuleName,
@@ -644,7 +724,6 @@ func NewAgoricApp(
644
724
  evidencetypes.ModuleName,
645
725
  authz.ModuleName,
646
726
  feegrant.ModuleName,
647
- paramstypes.ModuleName,
648
727
  vestingtypes.ModuleName,
649
728
  vstorage.ModuleName,
650
729
  // This will cause the swingset controller to init if it hadn't yet, passing
@@ -652,17 +731,19 @@ func NewAgoricApp(
652
731
  swingset.ModuleName,
653
732
  vibc.ModuleName,
654
733
  vbank.ModuleName,
655
- lien.ModuleName,
734
+ vtransfer.ModuleName,
656
735
  )
657
736
  app.mm.SetOrderEndBlockers(
658
- vibc.ModuleName,
659
- vbank.ModuleName,
660
- lien.ModuleName,
737
+ // Cosmos-SDK modules appear roughly in the order used by simapp and gaiad.
661
738
  govtypes.ModuleName,
662
739
  stakingtypes.ModuleName,
740
+ // vibc is an Agoric-specific IBC app, so group it here with other IBC apps.
741
+ vibc.ModuleName,
742
+ vtransfer.ModuleName,
663
743
  ibctransfertypes.ModuleName,
664
744
  ibchost.ModuleName,
665
745
  icatypes.ModuleName,
746
+ packetforwardtypes.ModuleName,
666
747
  feegrant.ModuleName,
667
748
  authz.ModuleName,
668
749
  capabilitytypes.ModuleName,
@@ -676,7 +757,11 @@ func NewAgoricApp(
676
757
  paramstypes.ModuleName,
677
758
  upgradetypes.ModuleName,
678
759
  vestingtypes.ModuleName,
679
- // SwingSet needs to be last, for it to capture all the pushed actions.
760
+ // Putting vbank before SwingSet VM will enable vbank to capture all event
761
+ // history that was produced all the other modules, and push those balance
762
+ // changes on the VM's actionQueue.
763
+ vbank.ModuleName,
764
+ // SwingSet VM needs to be last, for it to capture all the pushed actions.
680
765
  swingset.ModuleName,
681
766
  // And then vstorage, to produce SwingSet-induced events.
682
767
  vstorage.ModuleName,
@@ -693,26 +778,28 @@ func NewAgoricApp(
693
778
  capabilitytypes.ModuleName,
694
779
  authtypes.ModuleName,
695
780
  banktypes.ModuleName,
781
+ paramstypes.ModuleName,
696
782
  distrtypes.ModuleName,
697
783
  stakingtypes.ModuleName,
698
784
  slashingtypes.ModuleName,
699
785
  govtypes.ModuleName,
700
786
  minttypes.ModuleName,
701
787
  ibctransfertypes.ModuleName,
788
+ packetforwardtypes.ModuleName,
702
789
  ibchost.ModuleName,
703
790
  icatypes.ModuleName,
704
791
  evidencetypes.ModuleName,
705
792
  feegrant.ModuleName,
706
793
  authz.ModuleName,
707
794
  genutiltypes.ModuleName,
708
- paramstypes.ModuleName,
709
795
  upgradetypes.ModuleName,
710
796
  vestingtypes.ModuleName,
797
+ // Agoric-specific modules go last since they may rely on other SDK modules.
711
798
  vstorage.ModuleName,
712
799
  vbank.ModuleName,
713
800
  vibc.ModuleName,
801
+ vtransfer.ModuleName,
714
802
  swingset.ModuleName,
715
- lien.ModuleName,
716
803
  }
717
804
 
718
805
  app.mm.SetOrderInitGenesis(moduleOrderForGenesisAndUpgrade...)
@@ -734,14 +821,14 @@ func NewAgoricApp(
734
821
  feegrantmodule.NewAppModule(appCodec, app.AccountKeeper, app.BankKeeper, app.FeeGrantKeeper, app.interfaceRegistry),
735
822
  authzmodule.NewAppModule(appCodec, app.AuthzKeeper, app.AccountKeeper, app.BankKeeper, app.interfaceRegistry),
736
823
  gov.NewAppModule(appCodec, app.GovKeeper, app.AccountKeeper, app.BankKeeper),
737
- mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper),
824
+ mint.NewAppModule(appCodec, app.MintKeeper, app.AccountKeeper, nil),
738
825
  staking.NewAppModule(appCodec, app.StakingKeeper, app.AccountKeeper, app.BankKeeper),
739
826
  distr.NewAppModule(appCodec, app.DistrKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper),
740
827
  slashing.NewAppModule(appCodec, app.SlashingKeeper, app.AccountKeeper, app.BankKeeper, app.StakingKeeper),
741
828
  params.NewAppModule(app.ParamsKeeper),
742
829
  evidence.NewAppModule(app.EvidenceKeeper),
743
830
  ibc.NewAppModule(app.IBCKeeper),
744
- transferModule,
831
+ ics20TransferModule,
745
832
  )
746
833
 
747
834
  app.sm.RegisterStoreDecoders()
@@ -775,28 +862,26 @@ func NewAgoricApp(
775
862
  app.SetBeginBlocker(app.BeginBlocker)
776
863
  app.SetEndBlocker(app.EndBlocker)
777
864
 
778
- const (
779
- upgradeName = "agoric-upgrade-14"
780
- upgradeNameTest = "agorictest-upgrade-14"
781
- )
782
-
783
- app.UpgradeKeeper.SetUpgradeHandler(
784
- upgradeName,
785
- upgrade14Handler(app, upgradeName),
786
- )
787
- app.UpgradeKeeper.SetUpgradeHandler(
788
- upgradeNameTest,
789
- upgrade14Handler(app, upgradeNameTest),
790
- )
865
+ for name := range upgradeNamesOfThisVersion {
866
+ app.UpgradeKeeper.SetUpgradeHandler(
867
+ name,
868
+ upgrade16Handler(app, name),
869
+ )
870
+ }
791
871
 
792
872
  upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk()
793
873
  if err != nil {
794
874
  panic(err)
795
875
  }
796
- if (upgradeInfo.Name == upgradeName || upgradeInfo.Name == upgradeNameTest) && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) {
876
+ if upgradeNamesOfThisVersion[upgradeInfo.Name] && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) {
797
877
  storeUpgrades := storetypes.StoreUpgrades{
878
+ Added: []string{
879
+ packetforwardtypes.ModuleName, // Added PFM
880
+ vlocalchain.ModuleName, // Agoric added vlocalchain
881
+ vtransfer.ModuleName, // Agoric added vtransfer
882
+ },
798
883
  Deleted: []string{
799
- crisistypes.ModuleName, // The SDK discontinued the crisis module in v0.51.0
884
+ "lien", // Agoric removed the lien module
800
885
  },
801
886
  }
802
887
 
@@ -824,45 +909,6 @@ func NewAgoricApp(
824
909
  return app
825
910
  }
826
911
 
827
- // upgrade14Handler performs standard upgrade actions plus custom actions for upgrade-14.
828
- func upgrade14Handler(app *GaiaApp, targetUpgrade string) func(sdk.Context, upgradetypes.Plan, module.VersionMap) (module.VersionMap, error) {
829
- return func(ctx sdk.Context, plan upgradetypes.Plan, fromVm module.VersionMap) (module.VersionMap, error) {
830
- app.CheckControllerInited(false)
831
-
832
- // Each CoreProposalStep runs sequentially, and can be constructed from
833
- // one or more modules executing in parallel within the step.
834
- CoreProposalSteps := []vm.CoreProposalStep{
835
- // First, upgrade wallet factory
836
- vm.CoreProposalStepForModules("@agoric/vats/scripts/build-wallet-factory2-upgrade.js"),
837
- // Then, upgrade Zoe and ZCF
838
- vm.CoreProposalStepForModules("@agoric/vats/scripts/replace-zoe.js"),
839
- }
840
-
841
- app.upgradeDetails = &upgradeDetails{
842
- // Record the plan to send to SwingSet
843
- Plan: plan,
844
- // Core proposals that should run during the upgrade block
845
- // These will be merged with any coreProposals specified in the
846
- // upgradeInfo field of the upgrade plan ran as subsequent steps
847
- CoreProposals: vm.CoreProposalsFromSteps(CoreProposalSteps...),
848
- }
849
-
850
- // Always run module migrations
851
- mvm, err := app.mm.RunMigrations(ctx, app.configurator, fromVm)
852
- if err != nil {
853
- return mvm, err
854
- }
855
-
856
- m := swingsetkeeper.NewMigrator(app.SwingSetKeeper)
857
- err = m.MigrateParams(ctx)
858
- if err != nil {
859
- return mvm, err
860
- }
861
-
862
- return mvm, nil
863
- }
864
- }
865
-
866
912
  // normalizeModuleAccount ensures that the given account is a module account,
867
913
  // initializing or updating it if necessary. The account name must be listed in maccPerms.
868
914
  func normalizeModuleAccount(ctx sdk.Context, ak authkeeper.AccountKeeper, name string) {
@@ -892,11 +938,14 @@ type cosmosInitAction struct {
892
938
  UpgradeDetails *upgradeDetails `json:"upgradeDetails,omitempty"`
893
939
  Params swingset.Params `json:"params"`
894
940
  SupplyCoins sdk.Coins `json:"supplyCoins"`
895
- LienPort int `json:"lienPort"`
896
- StoragePort int `json:"storagePort"`
897
- SwingsetPort int `json:"swingsetPort"`
898
- VbankPort int `json:"vbankPort"`
899
- VibcPort int `json:"vibcPort"`
941
+ // CAVEAT: Every property ending in "Port" is saved in chain-main.js/portNums
942
+ // with a key consisting of this name with the "Port" stripped.
943
+ StoragePort int `json:"storagePort"`
944
+ SwingsetPort int `json:"swingsetPort"`
945
+ VbankPort int `json:"vbankPort"`
946
+ VibcPort int `json:"vibcPort"`
947
+ VlocalchainPort int `json:"vlocalchainPort"`
948
+ VtransferPort int `json:"vtransferPort"`
900
949
  }
901
950
 
902
951
  // Name returns the name of the App
@@ -926,11 +975,13 @@ func (app *GaiaApp) initController(ctx sdk.Context, bootstrap bool) {
926
975
  Params: app.SwingSetKeeper.GetParams(ctx),
927
976
  SupplyCoins: sdk.NewCoins(app.BankKeeper.GetSupply(ctx, "uist")),
928
977
  UpgradeDetails: app.upgradeDetails,
929
- LienPort: app.lienPort,
930
- StoragePort: app.vstoragePort,
931
- SwingsetPort: app.swingsetPort,
932
- VbankPort: app.vbankPort,
933
- VibcPort: app.vibcPort,
978
+ // See CAVEAT in cosmosInitAction.
979
+ StoragePort: app.vstoragePort,
980
+ SwingsetPort: app.swingsetPort,
981
+ VbankPort: app.vbankPort,
982
+ VibcPort: app.vibcPort,
983
+ VlocalchainPort: app.vlocalchainPort,
984
+ VtransferPort: app.vtransferPort,
934
985
  }
935
986
  // This uses `BlockingSend` as a friendly wrapper for `sendToController`
936
987
  //
@@ -942,12 +993,12 @@ func (app *GaiaApp) initController(ctx sdk.Context, bootstrap bool) {
942
993
  // fmt.Fprintf(os.Stderr, "AG_COSMOS_INIT Returned from SwingSet: %s, %v\n", out, err)
943
994
 
944
995
  if err != nil {
945
- panic(errors.Wrap(err, "cannot initialize Controller"))
996
+ panic(sdkioerrors.Wrap(err, "cannot initialize Controller"))
946
997
  }
947
998
  var res bool
948
999
  err = json.Unmarshal([]byte(out), &res)
949
1000
  if err != nil {
950
- panic(errors.Wrapf(err, "cannot unmarshal Controller init response: %s", out))
1001
+ panic(sdkioerrors.Wrapf(err, "cannot unmarshal Controller init response: %s", out))
951
1002
  }
952
1003
  if !res {
953
1004
  panic(fmt.Errorf("controller negative init response"))
@@ -1100,21 +1151,21 @@ func (app *GaiaApp) InterfaceRegistry() types.InterfaceRegistry {
1100
1151
  // GetKey returns the KVStoreKey for the provided store key.
1101
1152
  //
1102
1153
  // NOTE: This is solely to be used for testing purposes.
1103
- func (app *GaiaApp) GetKey(storeKey string) *sdk.KVStoreKey {
1154
+ func (app *GaiaApp) GetKey(storeKey string) *storetypes.KVStoreKey {
1104
1155
  return app.keys[storeKey]
1105
1156
  }
1106
1157
 
1107
1158
  // GetTKey returns the TransientStoreKey for the provided store key.
1108
1159
  //
1109
1160
  // NOTE: This is solely to be used for testing purposes.
1110
- func (app *GaiaApp) GetTKey(storeKey string) *sdk.TransientStoreKey {
1161
+ func (app *GaiaApp) GetTKey(storeKey string) *storetypes.TransientStoreKey {
1111
1162
  return app.tkeys[storeKey]
1112
1163
  }
1113
1164
 
1114
1165
  // GetMemKey returns the MemStoreKey for the provided mem key.
1115
1166
  //
1116
1167
  // NOTE: This is solely used for testing purposes.
1117
- func (app *GaiaApp) GetMemKey(storeKey string) *sdk.MemoryStoreKey {
1168
+ func (app *GaiaApp) GetMemKey(storeKey string) *storetypes.MemoryStoreKey {
1118
1169
  return app.memKeys[storeKey]
1119
1170
  }
1120
1171
 
@@ -1135,16 +1186,16 @@ func (app *GaiaApp) SimulationManager() *module.SimulationManager {
1135
1186
  // API server.
1136
1187
  func (app *GaiaApp) RegisterAPIRoutes(apiSvr *api.Server, apiConfig config.APIConfig) {
1137
1188
  clientCtx := apiSvr.ClientCtx
1138
- rpc.RegisterRoutes(clientCtx, apiSvr.Router)
1139
- // Register legacy tx routes.
1140
- authrest.RegisterTxRoutes(clientCtx, apiSvr.Router)
1141
1189
  // Register new tx routes from grpc-gateway.
1142
1190
  authtx.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
1191
+
1143
1192
  // Register new tendermint queries routes from grpc-gateway.
1144
1193
  tmservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
1145
1194
 
1146
- // Register legacy and grpc-gateway routes for all modules.
1147
- ModuleBasics.RegisterRESTRoutes(clientCtx, apiSvr.Router)
1195
+ // Register node gRPC service for grpc-gateway.
1196
+ nodeservice.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
1197
+
1198
+ // Register grpc-gateway routes for all modules.
1148
1199
  ModuleBasics.RegisterGRPCGatewayRoutes(clientCtx, apiSvr.GRPCGatewayRouter)
1149
1200
 
1150
1201
  // register swagger API from root so that other applications can override easily
@@ -1160,7 +1211,7 @@ func (app *GaiaApp) RegisterTxService(clientCtx client.Context) {
1160
1211
 
1161
1212
  // RegisterTendermintService implements the Application.RegisterTendermintService method.
1162
1213
  func (app *GaiaApp) RegisterTendermintService(clientCtx client.Context) {
1163
- tmservice.RegisterTendermintService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.interfaceRegistry)
1214
+ tmservice.RegisterTendermintService(clientCtx, app.BaseApp.GRPCQueryRouter(), app.interfaceRegistry, app.Query)
1164
1215
  }
1165
1216
 
1166
1217
  // RegisterSwaggerAPI registers swagger route with API Server
@@ -1184,7 +1235,7 @@ func GetMaccPerms() map[string][]string {
1184
1235
  }
1185
1236
 
1186
1237
  // initParamsKeeper init params keeper and its subspaces
1187
- func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey sdk.StoreKey) paramskeeper.Keeper {
1238
+ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey storetypes.StoreKey) paramskeeper.Keeper {
1188
1239
  paramsKeeper := paramskeeper.NewKeeper(appCodec, legacyAmino, key, tkey)
1189
1240
 
1190
1241
  paramsKeeper.Subspace(authtypes.ModuleName)
@@ -1193,8 +1244,9 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino
1193
1244
  paramsKeeper.Subspace(minttypes.ModuleName)
1194
1245
  paramsKeeper.Subspace(distrtypes.ModuleName)
1195
1246
  paramsKeeper.Subspace(slashingtypes.ModuleName)
1196
- paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govtypes.ParamKeyTable())
1247
+ paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govtypesv1.ParamKeyTable())
1197
1248
  paramsKeeper.Subspace(ibctransfertypes.ModuleName)
1249
+ paramsKeeper.Subspace(packetforwardtypes.ModuleName).WithKeyTable(packetforwardtypes.ParamKeyTable())
1198
1250
  paramsKeeper.Subspace(ibchost.ModuleName)
1199
1251
  paramsKeeper.Subspace(icahosttypes.SubModuleName)
1200
1252
  paramsKeeper.Subspace(swingset.ModuleName)
@@ -1202,3 +1254,36 @@ func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino
1202
1254
 
1203
1255
  return paramsKeeper
1204
1256
  }
1257
+
1258
+ // TestingApp functions
1259
+
1260
+ // GetBaseApp implements the TestingApp interface.
1261
+ func (app *GaiaApp) GetBaseApp() *baseapp.BaseApp {
1262
+ return app.BaseApp
1263
+ }
1264
+
1265
+ // GetStakingKeeper implements the TestingApp interface.
1266
+ func (app *GaiaApp) GetStakingKeeper() testtypes.StakingKeeper {
1267
+ return app.StakingKeeper
1268
+ }
1269
+
1270
+ // GetIBCKeeper implements the TestingApp interface.
1271
+ func (app *GaiaApp) GetIBCKeeper() *ibckeeper.Keeper {
1272
+ return app.IBCKeeper
1273
+ }
1274
+
1275
+ // GetScopedIBCKeeper implements the TestingApp interface.
1276
+ func (app *GaiaApp) GetScopedIBCKeeper() capabilitykeeper.ScopedKeeper {
1277
+ return app.ScopedIBCKeeper
1278
+ }
1279
+
1280
+ // GetTxConfig implements the TestingApp interface.
1281
+ func (app *GaiaApp) GetTxConfig() client.TxConfig {
1282
+ return MakeEncodingConfig().TxConfig
1283
+ }
1284
+
1285
+ // For testing purposes
1286
+ func (app *GaiaApp) SetSwingStoreExportDir(dir string) {
1287
+ module := app.mm.Modules[swingset.ModuleName].(swingset.AppModule)
1288
+ module.SetSwingStoreExportDir(dir)
1289
+ }