@agoric/cosmos 0.35.0-u19.2 → 0.35.0-u21.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 (124) hide show
  1. package/.clang-format +116 -0
  2. package/CHANGELOG.md +18 -18
  3. package/Makefile +38 -67
  4. package/ante/ante.go +2 -2
  5. package/ante/inbound_test.go +1 -1
  6. package/app/app.go +173 -142
  7. package/app/export.go +6 -6
  8. package/app/genesis.go +4 -0
  9. package/app/sim_test.go +299 -50
  10. package/app/upgrade.go +142 -96
  11. package/app/upgrade_test.go +63 -0
  12. package/cmd/agd/agvm.go +1 -1
  13. package/cmd/agd/main.go +1 -1
  14. package/cmd/libdaemon/main.go +34 -1
  15. package/daemon/cmd/root.go +26 -35
  16. package/daemon/cmd/root_test.go +5 -4
  17. package/daemon/cmd/testnet.go +221 -95
  18. package/daemon/main.go +1 -0
  19. package/git-revision.txt +1 -1
  20. package/go.mod +93 -58
  21. package/go.sum +148 -95
  22. package/package.json +6 -3
  23. package/proto/agoric/swingset/genesis.proto +7 -11
  24. package/proto/agoric/swingset/msgs.proto +56 -75
  25. package/proto/agoric/swingset/query.proto +7 -10
  26. package/proto/agoric/swingset/swingset.proto +79 -108
  27. package/proto/agoric/vbank/genesis.proto +5 -5
  28. package/proto/agoric/vbank/msgs.proto +1 -2
  29. package/proto/agoric/vbank/vbank.proto +42 -52
  30. package/proto/agoric/vibc/msgs.proto +8 -11
  31. package/proto/agoric/vstorage/genesis.proto +6 -9
  32. package/proto/agoric/vstorage/query.proto +19 -48
  33. package/proto/agoric/vstorage/vstorage.proto +4 -10
  34. package/proto/agoric/vtransfer/genesis.proto +7 -7
  35. package/proto/buf.gen.gogo.yaml +8 -0
  36. package/proto/buf.gen.pulsar.yaml +17 -0
  37. package/proto/buf.gen.swagger.yaml +5 -0
  38. package/proto/buf.yaml +10 -0
  39. package/scripts/protocgen.sh +14 -21
  40. package/third_party/proto/amino/amino.proto +79 -0
  41. package/third_party/proto/cosmos/base/v1beta1/coin.proto +7 -2
  42. package/third_party/proto/cosmos/ics23/v1/proofs.proto +243 -0
  43. package/third_party/proto/cosmos/msg/v1/msg.proto +30 -0
  44. package/third_party/proto/cosmos/upgrade/v1beta1/upgrade.proto +17 -5
  45. package/third_party/proto/cosmos_proto/cosmos.proto +16 -1
  46. package/third_party/proto/gogoproto/gogo.proto +2 -2
  47. package/third_party/proto/google/protobuf/any.proto +6 -3
  48. package/third_party/proto/ibc/core/channel/v1/channel.proto +1 -1
  49. package/third_party/proto/ibc/core/client/v1/client.proto +4 -2
  50. package/types/address_hooks.go +5 -12
  51. package/types/address_hooks_test.go +34 -34
  52. package/types/codec.go +23 -0
  53. package/types/ibc_packet.go +64 -0
  54. package/types/ibc_packet_test.go +117 -0
  55. package/vm/client.go +32 -7
  56. package/vm/proto_json.go +2 -2
  57. package/x/swingset/abci.go +1 -1
  58. package/x/swingset/alias.go +0 -1
  59. package/x/swingset/config.go +1 -1
  60. package/x/swingset/keeper/extension_snapshotter.go +1 -1
  61. package/x/swingset/keeper/extension_snapshotter_test.go +1 -1
  62. package/x/swingset/keeper/keeper.go +1 -1
  63. package/x/swingset/keeper/keeper_test.go +1 -1
  64. package/x/swingset/keeper/querier.go +1 -30
  65. package/x/swingset/keeper/swing_store_exports_handler.go +1 -1
  66. package/x/swingset/keeper/swing_store_exports_handler_test.go +1 -1
  67. package/x/swingset/module.go +1 -14
  68. package/x/swingset/types/default-params.go +24 -16
  69. package/x/swingset/types/genesis.pb.go +2 -2
  70. package/x/swingset/types/msgs.pb.go +4 -3
  71. package/x/swingset/types/msgs_test.go +1 -1
  72. package/x/swingset/types/query.pb.go +4 -3
  73. package/x/swingset/types/swingset.pb.go +2 -2
  74. package/x/vbank/genesis.go +1 -1
  75. package/x/vbank/keeper/querier.go +1 -21
  76. package/x/vbank/module.go +1 -16
  77. package/x/vbank/types/genesis.pb.go +2 -2
  78. package/x/vbank/types/msgs.pb.go +3 -2
  79. package/x/vbank/types/query.pb.go +4 -3
  80. package/x/vbank/types/vbank.pb.go +2 -2
  81. package/x/vbank/vbank_test.go +95 -16
  82. package/x/vibc/keeper/keeper.go +8 -5
  83. package/x/vibc/keeper/migrations.go +36 -0
  84. package/x/vibc/keeper/triggers.go +6 -32
  85. package/x/vibc/module.go +9 -17
  86. package/x/vibc/types/expected_keepers.go +6 -10
  87. package/x/vibc/types/ibc_module.go +30 -20
  88. package/x/vibc/types/msgs.go +1 -1
  89. package/x/vibc/types/msgs.pb.go +5 -4
  90. package/x/vibc/types/receiver.go +17 -17
  91. package/x/vlocalchain/keeper/keeper.go +3 -3
  92. package/x/vlocalchain/types/vlocalchain.pb.go +1 -1
  93. package/x/vlocalchain/vlocalchain_test.go +6 -6
  94. package/x/vstorage/README.md +0 -8
  95. package/x/vstorage/alias.go +0 -1
  96. package/x/vstorage/client/cli/query.go +1 -1
  97. package/x/vstorage/genesis.go +1 -1
  98. package/x/vstorage/keeper/keeper.go +40 -5
  99. package/x/vstorage/keeper/keeper_test.go +24 -24
  100. package/x/vstorage/keeper/querier.go +1 -32
  101. package/x/vstorage/keeper/querier_test.go +41 -6
  102. package/x/vstorage/module.go +1 -14
  103. package/x/vstorage/types/genesis.pb.go +2 -2
  104. package/x/vstorage/types/path_keys.go +7 -8
  105. package/x/vstorage/types/query.pb.go +8 -5
  106. package/x/vstorage/types/vstorage.pb.go +2 -2
  107. package/x/vstorage/vstorage_test.go +3 -3
  108. package/x/vtransfer/genesis.go +1 -1
  109. package/x/vtransfer/handler.go +4 -2
  110. package/x/vtransfer/ibc_middleware.go +4 -4
  111. package/x/vtransfer/ibc_middleware_test.go +14 -16
  112. package/x/vtransfer/keeper/keeper.go +38 -48
  113. package/x/vtransfer/module.go +1 -14
  114. package/x/vtransfer/types/expected_keepers.go +2 -18
  115. package/x/vtransfer/types/genesis.pb.go +2 -2
  116. package/x/vtransfer/utils_test.go +15 -15
  117. package/daemon/cmd/genaccounts.go +0 -195
  118. package/e2e_test/Makefile +0 -29
  119. package/e2e_test/README.md +0 -100
  120. package/e2e_test/go.mod +0 -239
  121. package/e2e_test/go.sum +0 -1323
  122. package/e2e_test/ibc_conformance_test.go +0 -56
  123. package/e2e_test/pfm_test.go +0 -613
  124. package/e2e_test/util.go +0 -271
package/app/upgrade.go CHANGED
@@ -3,23 +3,31 @@ package gaia
3
3
  import (
4
4
  "encoding/json"
5
5
  "fmt"
6
- "reflect"
7
- "strings"
8
- "text/template"
9
6
 
10
7
  "github.com/Agoric/agoric-sdk/golang/cosmos/vm"
11
8
  swingsetkeeper "github.com/Agoric/agoric-sdk/golang/cosmos/x/swingset/keeper"
9
+ "github.com/cosmos/cosmos-sdk/baseapp"
12
10
  sdk "github.com/cosmos/cosmos-sdk/types"
13
11
  "github.com/cosmos/cosmos-sdk/types/module"
12
+
13
+ authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
14
+ banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
15
+ crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types"
16
+ distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
17
+ govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
18
+ govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
19
+ minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
20
+ paramstypes "github.com/cosmos/cosmos-sdk/x/params/types"
21
+ slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types"
22
+ stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
14
23
  upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
24
+
25
+ ibctmmigrations "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint/migrations"
15
26
  )
16
27
 
17
28
  var upgradeNamesOfThisVersion = []string{
18
- "agoric-upgrade-19-mainnet",
19
- "agoric-upgrade-19-devnet",
20
- "agoric-upgrade-19-emerynet",
21
- "agoric-upgrade-19-a3p",
22
- "agoric-upgrade-19-basic",
29
+ "agoric-upgrade-21",
30
+ "agoric-upgrade-21-a3p",
23
31
  }
24
32
 
25
33
  // isUpgradeNameOfThisVersion returns whether the provided plan name is a
@@ -53,11 +61,8 @@ func isPrimaryUpgradeName(name string) bool {
53
61
  return false
54
62
  }
55
63
  switch name {
56
- case validUpgradeName("agoric-upgrade-19-mainnet"),
57
- validUpgradeName("agoric-upgrade-19-devnet"),
58
- validUpgradeName("agoric-upgrade-19-emerynet"),
59
- validUpgradeName("agoric-upgrade-19-a3p"),
60
- validUpgradeName("agoric-upgrade-19-basic"):
64
+ case validUpgradeName("agoric-upgrade-21"),
65
+ validUpgradeName("agoric-upgrade-21-a3p"):
61
66
  return true
62
67
  default:
63
68
  panic(fmt.Errorf("unexpected upgrade name %s", validUpgradeName(name)))
@@ -75,75 +80,45 @@ func isFirstTimeUpgradeOfThisVersion(app *GaiaApp, ctx sdk.Context) bool {
75
80
  return true
76
81
  }
77
82
 
78
- func buildProposalStepWithArgs(moduleName string, entrypoint string, extra any) (vm.CoreProposalStep, error) {
79
- t := template.Must(template.New("").Parse(`{
80
- "module": "{{.moduleName}}",
81
- "entrypoint": "{{.entrypoint}}",
82
- "args": {{.args}}
83
- }`))
84
-
85
- var args []byte
86
- var err error
87
- if extra == nil {
88
- // The specified entrypoint will be called with no extra arguments after powers.
89
- args = []byte(`[]`)
90
- } else if reflect.TypeOf(extra).Kind() == reflect.Map && reflect.TypeOf(extra).Key().Kind() == reflect.String {
91
- // The specified entrypoint will be called with this options argument after powers.
92
- args, err = json.Marshal([]any{extra})
93
- } else if reflect.TypeOf(extra).Kind() == reflect.Slice {
94
- // The specified entrypoint will be called with each of these arguments after powers.
95
- args, err = json.Marshal(extra)
96
- } else {
97
- return nil, fmt.Errorf("proposal extra must be nil, array, or string map, not %v", extra)
98
- }
83
+ // buildProposalStepWithArgs returns a CoreProposal representing invocation of
84
+ // the specified module-specific entry point with arbitrary Jsonable arguments
85
+ // provided after core-eval powers.
86
+ func buildProposalStepWithArgs(moduleName string, entrypoint string, args ...vm.Jsonable) (vm.CoreProposalStep, error) {
87
+ argsBz, err := json.Marshal(args)
99
88
  if err != nil {
100
89
  return nil, err
101
90
  }
102
91
 
103
- var result strings.Builder
104
- err = t.Execute(&result, map[string]any{
105
- "moduleName": moduleName,
106
- "entrypoint": entrypoint,
107
- "args": string(args),
108
- })
92
+ mea := struct {
93
+ Module string `json:"module"`
94
+ Entrypoint string `json:"entrypoint"`
95
+ Args json.RawMessage `json:"args"`
96
+ }{
97
+ Module: moduleName,
98
+ Entrypoint: entrypoint,
99
+ Args: argsBz,
100
+ }
101
+
102
+ jsonBz, err := json.Marshal(mea)
109
103
  if err != nil {
110
104
  return nil, err
111
105
  }
112
- jsonStr := result.String()
113
- jsonBz := []byte(jsonStr)
114
- if !json.Valid(jsonBz) {
115
- return nil, fmt.Errorf("invalid JSON: %s", jsonStr)
116
- }
106
+
117
107
  proposal := vm.ArbitraryCoreProposal{Json: jsonBz}
118
108
  return vm.CoreProposalStepForModules(proposal), nil
119
109
  }
120
110
 
121
111
  func getVariantFromUpgradeName(upgradeName string) string {
122
112
  switch upgradeName {
123
- case "agoric-upgrade-19-a3p":
113
+ case "agoric-upgrade-21-a3p":
124
114
  return "A3P_INTEGRATION"
125
- case "agoric-upgrade-19-mainnet":
115
+ case "agoric-upgrade-21":
126
116
  return "MAINNET"
127
- case "agoric-upgrade-19-devnet":
128
- return "DEVNET"
129
- case "agoric-upgrade-19-emerynet":
130
- return "EMERYNET"
131
- case "agoric-upgrade-19-basic":
132
- // Noupgrade for this version.
133
- return ""
134
117
  default:
135
118
  return ""
136
119
  }
137
120
  }
138
121
 
139
- func upgradeMintHolderCoreProposal(targetUpgrade string) (vm.CoreProposalStep, error) {
140
- return buildProposalStepFromScript(targetUpgrade, "@agoric/builders/scripts/vats/upgrade-mintHolder.js")
141
- }
142
-
143
- func restartFeeDistributorCoreProposal(targetUpgrade string) (vm.CoreProposalStep, error) {
144
- return buildProposalStepFromScript(targetUpgrade, "@agoric/builders/scripts/inter-protocol/replace-feeDistributor-combo.js")
145
- }
146
-
147
122
  func buildProposalStepFromScript(targetUpgrade string, builderScript string) (vm.CoreProposalStep, error) {
148
123
  variant := getVariantFromUpgradeName(targetUpgrade)
149
124
 
@@ -154,17 +129,73 @@ func buildProposalStepFromScript(targetUpgrade string, builderScript string) (vm
154
129
  return buildProposalStepWithArgs(
155
130
  builderScript,
156
131
  "defaultProposalBuilder",
157
- map[string]any{
158
- "variant": variant,
132
+ // Map iteration is randomised; use an anonymous struct instead.
133
+ struct {
134
+ Variant string `json:"variant"`
135
+ }{
136
+ Variant: variant,
159
137
  },
160
138
  )
161
139
  }
162
140
 
163
- // upgrade19Handler performs standard upgrade actions plus custom actions for upgrade-19.
164
- func upgrade19Handler(app *GaiaApp, targetUpgrade string) func(sdk.Context, upgradetypes.Plan, module.VersionMap) (module.VersionMap, error) {
141
+ // RegisterUpgradeHandlers registers the upgrade handlers for all upgradeNames.
142
+ func (app *GaiaApp) RegisterUpgradeHandlers() {
143
+ // Set param key table for params module migration
144
+ for _, subspace := range app.ParamsKeeper.GetSubspaces() {
145
+ subspace := subspace
146
+
147
+ var keyTable paramstypes.KeyTable
148
+ switch subspace.Name() {
149
+ case authtypes.ModuleName:
150
+ keyTable = authtypes.ParamKeyTable() //nolint:staticcheck
151
+ case banktypes.ModuleName:
152
+ keyTable = banktypes.ParamKeyTable() //nolint:staticcheck
153
+ case stakingtypes.ModuleName:
154
+ keyTable = stakingtypes.ParamKeyTable() //nolint:staticcheck
155
+ case minttypes.ModuleName:
156
+ keyTable = minttypes.ParamKeyTable() //nolint:staticcheck
157
+ case distrtypes.ModuleName:
158
+ keyTable = distrtypes.ParamKeyTable() //nolint:staticcheck
159
+ case slashingtypes.ModuleName:
160
+ keyTable = slashingtypes.ParamKeyTable() //nolint:staticcheck
161
+ case govtypes.ModuleName:
162
+ keyTable = govv1.ParamKeyTable() //nolint:staticcheck
163
+ case crisistypes.ModuleName:
164
+ keyTable = crisistypes.ParamKeyTable() //nolint:staticcheck
165
+ default:
166
+ continue
167
+ }
168
+
169
+ if !subspace.HasKeyTable() {
170
+ subspace.WithKeyTable(keyTable)
171
+ }
172
+ }
173
+
174
+ baseAppLegacySS := app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramstypes.ConsensusParamsKeyTable())
175
+
176
+ for _, name := range upgradeNamesOfThisVersion {
177
+ app.UpgradeKeeper.SetUpgradeHandler(
178
+ name,
179
+ upgrade21Handler(app, name, baseAppLegacySS),
180
+ )
181
+ }
182
+ }
183
+
184
+ // upgrade21Handler performs standard upgrade actions plus custom actions for upgrade-21.
185
+ func upgrade21Handler(app *GaiaApp, targetUpgrade string, baseAppLegacySS paramstypes.Subspace) func(sdk.Context, upgradetypes.Plan, module.VersionMap) (module.VersionMap, error) {
186
+ _ = targetUpgrade
165
187
  return func(ctx sdk.Context, plan upgradetypes.Plan, fromVm module.VersionMap) (module.VersionMap, error) {
166
188
  app.CheckControllerInited(false)
167
189
 
190
+ // prune expired tendermint consensus states to save storage space
191
+ _, err := ibctmmigrations.PruneExpiredConsensusStates(ctx, app.AppCodec(), app.IBCKeeper.ClientKeeper)
192
+ if err != nil {
193
+ return nil, err
194
+ }
195
+
196
+ // Migrate Tendermint consensus parameters from x/params module to a dedicated x/consensus module.
197
+ baseapp.MigrateParams(ctx, baseAppLegacySS, &app.ConsensusParamsKeeper)
198
+
168
199
  CoreProposalSteps := []vm.CoreProposalStep{}
169
200
 
170
201
  // These CoreProposalSteps are not idempotent and should only be executed
@@ -184,6 +215,9 @@ func upgrade19Handler(app *GaiaApp, targetUpgrade string) func(sdk.Context, upgr
184
215
  vm.CoreProposalStepForModules(
185
216
  "@agoric/builders/scripts/vats/upgrade-zcf.js",
186
217
  ),
218
+ vm.CoreProposalStepForModules(
219
+ "@agoric/builders/scripts/vats/upgrade-provisionPool-to-BLD.js",
220
+ ),
187
221
  // because of #10794, we need to do at least a null upgrade of
188
222
  // the walletFactory on every software upgrade
189
223
  vm.CoreProposalStepForModules(
@@ -191,39 +225,51 @@ func upgrade19Handler(app *GaiaApp, targetUpgrade string) func(sdk.Context, upgr
191
225
  ),
192
226
  )
193
227
 
194
- upgradeMintHolderStep, err := upgradeMintHolderCoreProposal(targetUpgrade)
195
- if err != nil {
196
- return nil, err
197
- } else if upgradeMintHolderStep != nil {
198
- CoreProposalSteps = append(CoreProposalSteps, upgradeMintHolderStep)
199
- }
200
- restartFeeDistributorStep, err := restartFeeDistributorCoreProposal(targetUpgrade)
228
+ // Reserve contract needs to be upgraded for IST wind-down.
229
+ reserveUpgradeStep, err := buildProposalStepWithArgs(
230
+ "@agoric/builders/scripts/vats/upgrade-vats.js",
231
+ "upgradeZoeContractsProposalBuilder",
232
+ []struct {
233
+ KitLookup []string `json:"kitLookup"`
234
+ BundleName string `json:"bundleName"`
235
+ Entrypoint string `json:"entrypoint"`
236
+ }{
237
+ {
238
+ KitLookup: []string{"reserveKit"},
239
+ BundleName: "reserve",
240
+ Entrypoint: "@agoric/inter-protocol/src/reserve/assetReserve.js",
241
+ },
242
+ },
243
+ )
201
244
  if err != nil {
202
- return nil, err
203
- } else if restartFeeDistributorStep != nil {
204
- CoreProposalSteps = append(CoreProposalSteps, restartFeeDistributorStep)
245
+ return module.VersionMap{}, err
205
246
  }
206
-
207
247
  CoreProposalSteps = append(CoreProposalSteps,
208
- vm.CoreProposalStepForModules(
209
- "@agoric/builders/scripts/vats/upgrade-paRegistry.js",
210
- ),
211
- vm.CoreProposalStepForModules(
212
- "@agoric/builders/scripts/vats/upgrade-provisionPool.js",
213
- ),
214
- vm.CoreProposalStepForModules(
215
- "@agoric/builders/scripts/vats/upgrade-bank.js",
216
- ),
217
- vm.CoreProposalStepForModules(
218
- "@agoric/builders/scripts/vats/upgrade-agoricNames.js",
219
- ),
220
- vm.CoreProposalStepForModules(
221
- "@agoric/builders/scripts/vats/upgrade-asset-reserve.js",
222
- ),
223
- vm.CoreProposalStepForModules(
224
- "@agoric/builders/scripts/vats/upgrade-psm.js",
225
- ),
248
+ reserveUpgradeStep,
226
249
  )
250
+
251
+ // terminationTargets is a slice of "$boardID:$instanceKitLabel" strings.
252
+ var terminationTargets []string
253
+ switch getVariantFromUpgradeName(targetUpgrade) {
254
+ case "MAINNET":
255
+ // v111 "zcf-b1-4522b-stkATOM-USD_price_feed"
256
+ terminationTargets = []string{"board052184:stkATOM-USD_price_feed"}
257
+ case "A3P_INTEGRATION":
258
+ terminationTargets = []string{"board04091:stATOM-USD_price_feed"}
259
+ }
260
+ if len(terminationTargets) > 0 {
261
+ args := []vm.Jsonable{terminationTargets}
262
+ terminationStep, err := buildProposalStepWithArgs(
263
+ "@agoric/vats/src/proposals/terminate-governed-instance.js",
264
+ // defaultProposalBuilder(powers, targets)
265
+ "defaultProposalBuilder",
266
+ args...,
267
+ )
268
+ if err != nil {
269
+ return module.VersionMap{}, err
270
+ }
271
+ CoreProposalSteps = append(CoreProposalSteps, terminationStep)
272
+ }
227
273
  }
228
274
 
229
275
  app.upgradeDetails = &upgradeDetails{
@@ -236,7 +282,7 @@ func upgrade19Handler(app *GaiaApp, targetUpgrade string) func(sdk.Context, upgr
236
282
  }
237
283
 
238
284
  // Always run module migrations
239
- mvm, err := app.mm.RunMigrations(ctx, app.configurator, fromVm)
285
+ mvm, err := app.ModuleManager.RunMigrations(ctx, app.configurator, fromVm)
240
286
  if err != nil {
241
287
  return mvm, err
242
288
  }
@@ -0,0 +1,63 @@
1
+ package gaia
2
+
3
+ import (
4
+ "testing"
5
+
6
+ "github.com/Agoric/agoric-sdk/golang/cosmos/vm"
7
+ "github.com/stretchr/testify/assert"
8
+ )
9
+
10
+ func TestBuildProposalSteps(t *testing.T) {
11
+ testCases := []struct {
12
+ name string
13
+ makeStep func() (vm.CoreProposalStep, error)
14
+ expectedJson string
15
+ }{
16
+ {
17
+ "buildProposalStepFromScript",
18
+ func() (vm.CoreProposalStep, error) {
19
+ return buildProposalStepFromScript(
20
+ "agoric-upgrade-21-a3p",
21
+ "@agoric/builders/scripts/vats/upgrade-orchestration.js",
22
+ )
23
+ },
24
+ `{"module":"@agoric/builders/scripts/vats/upgrade-orchestration.js",` +
25
+ `"entrypoint":"defaultProposalBuilder",` +
26
+ `"args":[{"variant":"A3P_INTEGRATION"}]}`,
27
+ },
28
+ {
29
+ "buildProposalStepWithArgs",
30
+ func() (vm.CoreProposalStep, error) {
31
+ return buildProposalStepWithArgs(
32
+ "@agoric/builders/scripts/vats/upgrade-vats.js",
33
+ "upgradeVatsProposalBuilder",
34
+ // Map iteration is randomised; use an anonymous struct instead.
35
+ struct {
36
+ Ibc string `json:"ibc"`
37
+ }{
38
+ Ibc: "@agoric/vats/src/vat-ibc.js",
39
+ },
40
+ )
41
+ },
42
+ `{"module":"@agoric/builders/scripts/vats/upgrade-vats.js",` +
43
+ `"entrypoint":"upgradeVatsProposalBuilder",` +
44
+ `"args":[{"ibc":"@agoric/vats/src/vat-ibc.js"}]}`,
45
+ },
46
+ }
47
+
48
+ for _, tc := range testCases {
49
+ t.Run(tc.name, func(t *testing.T) {
50
+ ps, err := tc.makeStep()
51
+
52
+ assert.NoError(t, err)
53
+ expected := vm.CoreProposalStepForModules(*vm.NewArbitraryCoreProposal(
54
+ tc.expectedJson,
55
+ ))
56
+
57
+ assert.EqualValues(t, len(expected), len(ps), "Expected length %d to be %d", len(expected), len(ps))
58
+ for i, prop := range ps {
59
+ assert.EqualValues(t, expected[i], prop, "Expected %d to be %v, got %v", i, expected[i], prop)
60
+ }
61
+ })
62
+ }
63
+ }
package/cmd/agd/agvm.go CHANGED
@@ -5,7 +5,7 @@ import (
5
5
  "os"
6
6
  "os/exec"
7
7
 
8
- "github.com/tendermint/tendermint/libs/log"
8
+ "github.com/cometbft/cometbft/libs/log"
9
9
  )
10
10
 
11
11
  // NewVMCommand creates a new OS command to run the Agoric VM. It sets up the
package/cmd/agd/main.go CHANGED
@@ -10,8 +10,8 @@ import (
10
10
  "syscall"
11
11
  "time"
12
12
 
13
+ "github.com/cometbft/cometbft/libs/log"
13
14
  "github.com/spf13/cast"
14
- "github.com/tendermint/tendermint/libs/log"
15
15
 
16
16
  gaia "github.com/Agoric/agoric-sdk/golang/cosmos/app"
17
17
  "github.com/Agoric/agoric-sdk/golang/cosmos/daemon"
@@ -15,8 +15,9 @@ import (
15
15
  "net/rpc"
16
16
  "os"
17
17
  "path/filepath"
18
+ "runtime/debug"
18
19
 
19
- log "github.com/tendermint/tendermint/libs/log"
20
+ log "github.com/cometbft/cometbft/libs/log"
20
21
 
21
22
  gaia "github.com/Agoric/agoric-sdk/golang/cosmos/app"
22
23
  "github.com/Agoric/agoric-sdk/golang/cosmos/daemon"
@@ -25,6 +26,11 @@ import (
25
26
  servertypes "github.com/cosmos/cosmos-sdk/server/types"
26
27
  )
27
28
 
29
+ // Taken from sysexits.h
30
+ const (
31
+ EX_SOFTWARE = 70 /* internal software error */
32
+ )
33
+
28
34
  type goReturn = struct {
29
35
  str string
30
36
  err error
@@ -32,6 +38,8 @@ type goReturn = struct {
32
38
 
33
39
  const SwingSetPort = 123
34
40
 
41
+ var logger = log.NewTMLogger(log.NewSyncWriter(os.Stderr)).With("module", "cmd/libdaemon")
42
+
35
43
  var vmClientCodec *vm.ClientCodec
36
44
  var agdServer *vm.AgdServer
37
45
 
@@ -59,8 +67,29 @@ func ConnectVMClientCodec(ctx context.Context, nodePort int, sendFunc func(int,
59
67
  return vmClientCodec, sendToNode
60
68
  }
61
69
 
70
+ // handlePanic is a helper function to recover from panics, log them, and exit the process.
71
+ func handlePanic(caller string) {
72
+ if r := recover(); r != nil {
73
+ defer func() {
74
+ if err := recover(); err != nil {
75
+ // If we panic again, we will exit the process without logging the error or stack.
76
+ os.Stderr.WriteString("Double panic in exported Go function: " + caller + "\n")
77
+ os.Exit(EX_SOFTWARE)
78
+ }
79
+ }()
80
+
81
+ // Log the panic with the caller information.
82
+ logger.Error("Panic in exported Go function", "caller", caller, "error", r, "stack", debug.Stack())
83
+
84
+ // Exit the process with a non-zero exit code.
85
+ os.Exit(EX_SOFTWARE)
86
+ }
87
+ }
88
+
62
89
  //export RunAgCosmosDaemon
63
90
  func RunAgCosmosDaemon(nodePort C.int, toNode C.sendFunc, cosmosArgs []*C.char) C.int {
91
+ defer handlePanic("RunAgCosmosDaemon")
92
+
64
93
  userHomeDir, err := os.UserHomeDir()
65
94
  if err != nil {
66
95
  panic(err)
@@ -92,6 +121,8 @@ func RunAgCosmosDaemon(nodePort C.int, toNode C.sendFunc, cosmosArgs []*C.char)
92
121
  // fmt.Fprintln(os.Stderr, "Starting Cosmos", args)
93
122
  os.Args = args
94
123
  go func() {
124
+ defer handlePanic("daemon.RunWithController")
125
+
95
126
  // We run in the background, but exit when the job is over.
96
127
  // swingset.SendToNode("hello from Initial Go!")
97
128
  exitCode := 0
@@ -112,6 +143,7 @@ func RunAgCosmosDaemon(nodePort C.int, toNode C.sendFunc, cosmosArgs []*C.char)
112
143
 
113
144
  //export ReplyToGo
114
145
  func ReplyToGo(replyPort C.int, isError C.int, resp C.Body) C.int {
146
+ defer handlePanic("ReplyToGo")
115
147
  respStr := C.GoString(resp)
116
148
  // fmt.Printf("Reply to Go %d %s\n", replyPort, respStr)
117
149
  if err := vmClientCodec.Receive(int(replyPort), int(isError) != 0, respStr); err != nil {
@@ -126,6 +158,7 @@ type errorWrapper struct {
126
158
 
127
159
  //export SendToGo
128
160
  func SendToGo(port C.int, msg C.Body) C.Body {
161
+ defer handlePanic("SendToGo")
129
162
  msgStr := C.GoString(msg)
130
163
  // fmt.Fprintln(os.Stderr, "Send to Go", msgStr)
131
164
  var respStr string
@@ -10,6 +10,12 @@ import (
10
10
 
11
11
  serverconfig "github.com/cosmos/cosmos-sdk/server/config"
12
12
 
13
+ rosettaCmd "cosmossdk.io/tools/rosetta/cmd"
14
+
15
+ dbm "github.com/cometbft/cometbft-db"
16
+ tmcfg "github.com/cometbft/cometbft/config"
17
+ tmcli "github.com/cometbft/cometbft/libs/cli"
18
+ "github.com/cometbft/cometbft/libs/log"
13
19
  "github.com/cosmos/cosmos-sdk/client"
14
20
  "github.com/cosmos/cosmos-sdk/client/config"
15
21
  "github.com/cosmos/cosmos-sdk/client/debug"
@@ -29,10 +35,6 @@ import (
29
35
  "github.com/spf13/cast"
30
36
  "github.com/spf13/cobra"
31
37
  "github.com/spf13/viper"
32
- tmcfg "github.com/tendermint/tendermint/config"
33
- tmcli "github.com/tendermint/tendermint/libs/cli"
34
- "github.com/tendermint/tendermint/libs/log"
35
- dbm "github.com/tendermint/tm-db"
36
38
 
37
39
  gaia "github.com/Agoric/agoric-sdk/golang/cosmos/app"
38
40
  "github.com/Agoric/agoric-sdk/golang/cosmos/app/params"
@@ -131,7 +133,7 @@ func initAppConfig() (string, interface{}) {
131
133
  // FIXME: We may want a non-zero min gas price.
132
134
  // For now, we set it to zero to reduce friction (the default "" fails
133
135
  // startup, forcing each validator to set their own value).
134
- srvCfg.MinGasPrices = "0uist"
136
+ srvCfg.MinGasPrices = "0ubld"
135
137
 
136
138
  customAppConfig := CustomAppConfig{
137
139
  Config: *srvCfg,
@@ -152,20 +154,27 @@ func initRootCmd(sender vm.Sender, rootCmd *cobra.Command, encodingConfig params
152
154
  cfg.Seal()
153
155
 
154
156
  ac := appCreator{
155
- encCfg: encodingConfig,
156
157
  sender: sender,
157
158
  agdServer: vm.NewAgdServer(),
158
159
  }
159
160
 
161
+ genesisCmd := genutilcli.GenesisCoreCommand(
162
+ encodingConfig.TxConfig,
163
+ gaia.ModuleBasics,
164
+ gaia.DefaultNodeHome,
165
+ )
166
+
160
167
  rootCmd.AddCommand(
161
168
  genutilcli.InitCmd(gaia.ModuleBasics, gaia.DefaultNodeHome),
162
- genutilcli.CollectGenTxsCmd(banktypes.GenesisBalancesIterator{}, gaia.DefaultNodeHome),
163
- genutilcli.MigrateGenesisCmd(),
164
- genutilcli.GenTxCmd(gaia.ModuleBasics, encodingConfig.TxConfig, banktypes.GenesisBalancesIterator{}, gaia.DefaultNodeHome),
165
- genutilcli.ValidateGenesisCmd(gaia.ModuleBasics),
166
- AddGenesisAccountCmd(encodingConfig.Marshaler, gaia.DefaultNodeHome),
169
+ genesisCmd,
170
+ )
171
+ // Alias all the genesis commands to the top level as well.
172
+ rootCmd.AddCommand(
173
+ genesisCmd.Commands()...,
174
+ )
175
+ rootCmd.AddCommand(
167
176
  tmcli.NewCompletionCmd(rootCmd, true),
168
- testnetCmd(gaia.ModuleBasics, banktypes.GenesisBalancesIterator{}),
177
+ NewTestnetCmd(gaia.ModuleBasics, banktypes.GenesisBalancesIterator{}, AppName),
169
178
  debug.Cmd(),
170
179
  config.Cmd(),
171
180
  pruning.Cmd(ac.newSnapshotsApp, gaia.DefaultNodeHome),
@@ -217,7 +226,7 @@ func initRootCmd(sender vm.Sender, rootCmd *cobra.Command, encodingConfig params
217
226
  keys.Commands(gaia.DefaultNodeHome),
218
227
  )
219
228
  // add rosetta
220
- rootCmd.AddCommand(server.RosettaCommand(encodingConfig.InterfaceRegistry, encodingConfig.Marshaler))
229
+ rootCmd.AddCommand(rosettaCmd.RosettaCommand(encodingConfig.InterfaceRegistry, encodingConfig.Marshaler))
221
230
  }
222
231
 
223
232
  const (
@@ -301,7 +310,6 @@ func txCommand() *cobra.Command {
301
310
  }
302
311
 
303
312
  type appCreator struct {
304
- encCfg params.EncodingConfig
305
313
  sender vm.Sender
306
314
  agdServer *vm.AgdServer
307
315
  }
@@ -319,12 +327,6 @@ func (ac appCreator) newApp(
319
327
  }
320
328
 
321
329
  baseappOptions := server.DefaultBaseappOptions(appOpts)
322
-
323
- skipUpgradeHeights := make(map[int64]bool)
324
- for _, h := range cast.ToIntSlice(appOpts.Get(server.FlagUnsafeSkipUpgrades)) {
325
- skipUpgradeHeights[int64(h)] = true
326
- }
327
-
328
330
  homePath := cast.ToString(appOpts.Get(flags.FlagHome))
329
331
 
330
332
  // Set a default value for FlagSwingStoreExportDir based on homePath
@@ -337,10 +339,7 @@ func (ac appCreator) newApp(
337
339
 
338
340
  return gaia.NewAgoricApp(
339
341
  ac.sender, ac.agdServer,
340
- logger, db, traceStore, true, skipUpgradeHeights,
341
- homePath,
342
- cast.ToUint(appOpts.Get(server.FlagInvCheckPeriod)),
343
- ac.encCfg,
342
+ logger, db, traceStore, true,
344
343
  appOpts,
345
344
  baseappOptions...,
346
345
  )
@@ -360,14 +359,9 @@ func (ac appCreator) newSnapshotsApp(
360
359
 
361
360
  baseappOptions := server.DefaultBaseappOptions(appOpts)
362
361
 
363
- homePath := cast.ToString(appOpts.Get(flags.FlagHome))
364
-
365
362
  return gaia.NewAgoricApp(
366
363
  ac.sender, ac.agdServer,
367
- logger, db, traceStore, true, map[int64]bool{},
368
- homePath,
369
- cast.ToUint(appOpts.Get(server.FlagInvCheckPeriod)),
370
- ac.encCfg,
364
+ logger, db, traceStore, true,
371
365
  appOpts,
372
366
  baseappOptions...,
373
367
  )
@@ -479,6 +473,7 @@ func (ac appCreator) appExport(
479
473
  forZeroHeight bool,
480
474
  jailAllowedAddrs []string,
481
475
  appOpts servertypes.AppOptions,
476
+ modulesToExport []string,
482
477
  ) (servertypes.ExportedApp, error) {
483
478
  swingStoreExportMode, ok := appOpts.Get(gaia.FlagSwingStoreExportMode).(string)
484
479
  if !(ok && allowedSwingSetExportModes[swingStoreExportMode]) {
@@ -508,10 +503,6 @@ func (ac appCreator) appExport(
508
503
  db,
509
504
  traceStore,
510
505
  loadLatest,
511
- map[int64]bool{},
512
- homePath,
513
- cast.ToUint(appOpts.Get(server.FlagInvCheckPeriod)),
514
- ac.encCfg,
515
506
  appOpts,
516
507
  )
517
508
 
@@ -521,7 +512,7 @@ func (ac appCreator) appExport(
521
512
  }
522
513
  }
523
514
 
524
- return gaiaApp.ExportAppStateAndValidators(forZeroHeight, jailAllowedAddrs)
515
+ return gaiaApp.ExportAppStateAndValidators(forZeroHeight, jailAllowedAddrs, modulesToExport)
525
516
  }
526
517
 
527
518
  // replaceCosmosSnapshotExportCommand monkey-patches the "snapshots export" command