@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.
- package/.clang-format +116 -0
- package/CHANGELOG.md +18 -18
- package/Makefile +38 -67
- package/ante/ante.go +2 -2
- package/ante/inbound_test.go +1 -1
- package/app/app.go +173 -142
- package/app/export.go +6 -6
- package/app/genesis.go +4 -0
- package/app/sim_test.go +299 -50
- package/app/upgrade.go +142 -96
- package/app/upgrade_test.go +63 -0
- package/cmd/agd/agvm.go +1 -1
- package/cmd/agd/main.go +1 -1
- package/cmd/libdaemon/main.go +34 -1
- package/daemon/cmd/root.go +26 -35
- package/daemon/cmd/root_test.go +5 -4
- package/daemon/cmd/testnet.go +221 -95
- package/daemon/main.go +1 -0
- package/git-revision.txt +1 -1
- package/go.mod +93 -58
- package/go.sum +148 -95
- package/package.json +6 -3
- package/proto/agoric/swingset/genesis.proto +7 -11
- package/proto/agoric/swingset/msgs.proto +56 -75
- package/proto/agoric/swingset/query.proto +7 -10
- package/proto/agoric/swingset/swingset.proto +79 -108
- package/proto/agoric/vbank/genesis.proto +5 -5
- package/proto/agoric/vbank/msgs.proto +1 -2
- package/proto/agoric/vbank/vbank.proto +42 -52
- package/proto/agoric/vibc/msgs.proto +8 -11
- package/proto/agoric/vstorage/genesis.proto +6 -9
- package/proto/agoric/vstorage/query.proto +19 -48
- package/proto/agoric/vstorage/vstorage.proto +4 -10
- package/proto/agoric/vtransfer/genesis.proto +7 -7
- package/proto/buf.gen.gogo.yaml +8 -0
- package/proto/buf.gen.pulsar.yaml +17 -0
- package/proto/buf.gen.swagger.yaml +5 -0
- package/proto/buf.yaml +10 -0
- package/scripts/protocgen.sh +14 -21
- package/third_party/proto/amino/amino.proto +79 -0
- package/third_party/proto/cosmos/base/v1beta1/coin.proto +7 -2
- package/third_party/proto/cosmos/ics23/v1/proofs.proto +243 -0
- package/third_party/proto/cosmos/msg/v1/msg.proto +30 -0
- package/third_party/proto/cosmos/upgrade/v1beta1/upgrade.proto +17 -5
- package/third_party/proto/cosmos_proto/cosmos.proto +16 -1
- package/third_party/proto/gogoproto/gogo.proto +2 -2
- package/third_party/proto/google/protobuf/any.proto +6 -3
- package/third_party/proto/ibc/core/channel/v1/channel.proto +1 -1
- package/third_party/proto/ibc/core/client/v1/client.proto +4 -2
- package/types/address_hooks.go +5 -12
- package/types/address_hooks_test.go +34 -34
- package/types/codec.go +23 -0
- package/types/ibc_packet.go +64 -0
- package/types/ibc_packet_test.go +117 -0
- package/vm/client.go +32 -7
- package/vm/proto_json.go +2 -2
- package/x/swingset/abci.go +1 -1
- package/x/swingset/alias.go +0 -1
- package/x/swingset/config.go +1 -1
- package/x/swingset/keeper/extension_snapshotter.go +1 -1
- package/x/swingset/keeper/extension_snapshotter_test.go +1 -1
- package/x/swingset/keeper/keeper.go +1 -1
- package/x/swingset/keeper/keeper_test.go +1 -1
- package/x/swingset/keeper/querier.go +1 -30
- package/x/swingset/keeper/swing_store_exports_handler.go +1 -1
- package/x/swingset/keeper/swing_store_exports_handler_test.go +1 -1
- package/x/swingset/module.go +1 -14
- package/x/swingset/types/default-params.go +24 -16
- package/x/swingset/types/genesis.pb.go +2 -2
- package/x/swingset/types/msgs.pb.go +4 -3
- package/x/swingset/types/msgs_test.go +1 -1
- package/x/swingset/types/query.pb.go +4 -3
- package/x/swingset/types/swingset.pb.go +2 -2
- package/x/vbank/genesis.go +1 -1
- package/x/vbank/keeper/querier.go +1 -21
- package/x/vbank/module.go +1 -16
- package/x/vbank/types/genesis.pb.go +2 -2
- package/x/vbank/types/msgs.pb.go +3 -2
- package/x/vbank/types/query.pb.go +4 -3
- package/x/vbank/types/vbank.pb.go +2 -2
- package/x/vbank/vbank_test.go +95 -16
- package/x/vibc/keeper/keeper.go +8 -5
- package/x/vibc/keeper/migrations.go +36 -0
- package/x/vibc/keeper/triggers.go +6 -32
- package/x/vibc/module.go +9 -17
- package/x/vibc/types/expected_keepers.go +6 -10
- package/x/vibc/types/ibc_module.go +30 -20
- package/x/vibc/types/msgs.go +1 -1
- package/x/vibc/types/msgs.pb.go +5 -4
- package/x/vibc/types/receiver.go +17 -17
- package/x/vlocalchain/keeper/keeper.go +3 -3
- package/x/vlocalchain/types/vlocalchain.pb.go +1 -1
- package/x/vlocalchain/vlocalchain_test.go +6 -6
- package/x/vstorage/README.md +0 -8
- package/x/vstorage/alias.go +0 -1
- package/x/vstorage/client/cli/query.go +1 -1
- package/x/vstorage/genesis.go +1 -1
- package/x/vstorage/keeper/keeper.go +40 -5
- package/x/vstorage/keeper/keeper_test.go +24 -24
- package/x/vstorage/keeper/querier.go +1 -32
- package/x/vstorage/keeper/querier_test.go +41 -6
- package/x/vstorage/module.go +1 -14
- package/x/vstorage/types/genesis.pb.go +2 -2
- package/x/vstorage/types/path_keys.go +7 -8
- package/x/vstorage/types/query.pb.go +8 -5
- package/x/vstorage/types/vstorage.pb.go +2 -2
- package/x/vstorage/vstorage_test.go +3 -3
- package/x/vtransfer/genesis.go +1 -1
- package/x/vtransfer/handler.go +4 -2
- package/x/vtransfer/ibc_middleware.go +4 -4
- package/x/vtransfer/ibc_middleware_test.go +14 -16
- package/x/vtransfer/keeper/keeper.go +38 -48
- package/x/vtransfer/module.go +1 -14
- package/x/vtransfer/types/expected_keepers.go +2 -18
- package/x/vtransfer/types/genesis.pb.go +2 -2
- package/x/vtransfer/utils_test.go +15 -15
- package/daemon/cmd/genaccounts.go +0 -195
- package/e2e_test/Makefile +0 -29
- package/e2e_test/README.md +0 -100
- package/e2e_test/go.mod +0 -239
- package/e2e_test/go.sum +0 -1323
- package/e2e_test/ibc_conformance_test.go +0 -56
- package/e2e_test/pfm_test.go +0 -613
- 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
|
-
"agoric-upgrade-
|
|
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-
|
|
57
|
-
validUpgradeName("agoric-upgrade-
|
|
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
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
104
|
-
|
|
105
|
-
"
|
|
106
|
-
"
|
|
107
|
-
|
|
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
|
-
|
|
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-
|
|
113
|
+
case "agoric-upgrade-21-a3p":
|
|
124
114
|
return "A3P_INTEGRATION"
|
|
125
|
-
case "agoric-upgrade-
|
|
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
|
-
|
|
158
|
-
|
|
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
|
-
//
|
|
164
|
-
func
|
|
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
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
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
|
|
203
|
-
} else if restartFeeDistributorStep != nil {
|
|
204
|
-
CoreProposalSteps = append(CoreProposalSteps, restartFeeDistributorStep)
|
|
245
|
+
return module.VersionMap{}, err
|
|
205
246
|
}
|
|
206
|
-
|
|
207
247
|
CoreProposalSteps = append(CoreProposalSteps,
|
|
208
|
-
|
|
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.
|
|
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
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"
|
package/cmd/libdaemon/main.go
CHANGED
|
@@ -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/
|
|
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
|
package/daemon/cmd/root.go
CHANGED
|
@@ -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 = "
|
|
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
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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
|
-
|
|
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(
|
|
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,
|
|
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,
|
|
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
|