@agoric/cosmos 0.34.2-upgrade-18-dev-6ddbef0.0 → 0.34.2-upgrade-19-dev-2a71f04.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 (42) hide show
  1. package/ante/inbound_test.go +2 -2
  2. package/app/app.go +26 -9
  3. package/app/upgrade.go +84 -66
  4. package/daemon/cmd/root.go +48 -15
  5. package/e2e_test/go.mod +25 -3
  6. package/e2e_test/go.sum +13 -13
  7. package/git-revision.txt +1 -1
  8. package/go.mod +85 -74
  9. package/go.sum +207 -174
  10. package/package.json +2 -3
  11. package/proto/agoric/swingset/swingset.proto +25 -0
  12. package/proto/agoric/vbank/vbank.proto +7 -0
  13. package/types/address_hooks.go +242 -0
  14. package/types/address_hooks_test.go +221 -0
  15. package/x/swingset/genesis.go +99 -21
  16. package/x/swingset/keeper/keeper.go +19 -14
  17. package/x/swingset/keeper/keeper_test.go +16 -10
  18. package/x/swingset/keeper/msg_server.go +1 -1
  19. package/x/swingset/module.go +17 -2
  20. package/x/swingset/testing/queue.go +8 -0
  21. package/x/swingset/types/default-params.go +31 -5
  22. package/x/swingset/types/expected_keepers.go +2 -2
  23. package/x/swingset/types/msgs.go +34 -12
  24. package/x/swingset/types/params.go +53 -43
  25. package/x/swingset/types/params_test.go +75 -9
  26. package/x/swingset/types/swingset.pb.go +386 -56
  27. package/x/vbank/README.md +6 -1
  28. package/x/vbank/keeper/keeper.go +4 -9
  29. package/x/vbank/keeper/migrations.go +30 -0
  30. package/x/vbank/module.go +8 -2
  31. package/x/vbank/types/params.go +43 -2
  32. package/x/vbank/types/vbank.pb.go +105 -36
  33. package/x/vbank/vbank_test.go +12 -7
  34. package/x/vibc/keeper/keeper.go +2 -5
  35. package/x/vibc/keeper/triggers.go +3 -6
  36. package/x/vibc/types/receiver.go +11 -5
  37. package/x/vstorage/testing/queue.go +10 -3
  38. package/x/vtransfer/ibc_middleware.go +5 -1
  39. package/x/vtransfer/ibc_middleware_test.go +511 -145
  40. package/x/vtransfer/keeper/keeper.go +215 -50
  41. package/x/vtransfer/types/genesis.pb.go +1 -0
  42. package/x/vtransfer/utils_test.go +111 -0
@@ -17,6 +17,7 @@ var (
17
17
  ParamStoreKeyFeeUnitPrice = []byte("fee_unit_price")
18
18
  ParamStoreKeyPowerFlagFees = []byte("power_flag_fees")
19
19
  ParamStoreKeyQueueMax = []byte("queue_max")
20
+ ParamStoreKeyVatCleanupBudget = []byte("vat_cleanup_budget")
20
21
  )
21
22
 
22
23
  func NewStringBeans(key string, beans sdkmath.Uint) StringBeans {
@@ -53,6 +54,7 @@ func DefaultParams() Params {
53
54
  FeeUnitPrice: DefaultFeeUnitPrice,
54
55
  PowerFlagFees: DefaultPowerFlagFees,
55
56
  QueueMax: DefaultQueueMax,
57
+ VatCleanupBudget: DefaultVatCleanupBudget,
56
58
  }
57
59
  }
58
60
 
@@ -69,6 +71,7 @@ func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs {
69
71
  paramtypes.NewParamSetPair(ParamStoreKeyBootstrapVatConfig, &p.BootstrapVatConfig, validateBootstrapVatConfig),
70
72
  paramtypes.NewParamSetPair(ParamStoreKeyPowerFlagFees, &p.PowerFlagFees, validatePowerFlagFees),
71
73
  paramtypes.NewParamSetPair(ParamStoreKeyQueueMax, &p.QueueMax, validateQueueMax),
74
+ paramtypes.NewParamSetPair(ParamStoreKeyVatCleanupBudget, &p.VatCleanupBudget, validateVatCleanupBudget),
72
75
  }
73
76
  }
74
77
 
@@ -89,6 +92,9 @@ func (p Params) ValidateBasic() error {
89
92
  if err := validateQueueMax(p.QueueMax); err != nil {
90
93
  return err
91
94
  }
95
+ if err := validateVatCleanupBudget(p.VatCleanupBudget); err != nil {
96
+ return err
97
+ }
92
98
 
93
99
  return nil
94
100
  }
@@ -165,20 +171,42 @@ func validateQueueMax(i interface{}) error {
165
171
  return nil
166
172
  }
167
173
 
174
+ func validateVatCleanupBudget(i interface{}) error {
175
+ entries, ok := i.([]UintMapEntry)
176
+ if !ok {
177
+ return fmt.Errorf("invalid parameter type: %T", i)
178
+ }
179
+ hasDefault := false
180
+ for _, entry := range entries {
181
+ if entry.Key == VatCleanupDefault {
182
+ hasDefault = true
183
+ break
184
+ }
185
+ }
186
+ if len(entries) > 0 && !hasDefault {
187
+ return fmt.Errorf("`default` must be present in a non-empty vat cleanup budget")
188
+ }
189
+ return nil
190
+ }
191
+
168
192
  // UpdateParams appends any missing params, configuring them to their defaults,
169
193
  // then returning the updated params or an error. Existing params are not
170
194
  // modified, regardless of their value, and they are not removed if they no
171
195
  // longer appear in the defaults.
172
196
  func UpdateParams(params Params) (Params, error) {
173
- newBpu, err := appendMissingDefaultBeansPerUnit(params.BeansPerUnit, DefaultBeansPerUnit())
197
+ newBpu, err := appendMissingDefaults(params.BeansPerUnit, DefaultBeansPerUnit())
174
198
  if err != nil {
175
199
  return params, err
176
200
  }
177
- newPff, err := appendMissingDefaultPowerFlagFees(params.PowerFlagFees, DefaultPowerFlagFees)
201
+ newPff, err := appendMissingDefaults(params.PowerFlagFees, DefaultPowerFlagFees)
178
202
  if err != nil {
179
203
  return params, err
180
204
  }
181
- newQm, err := appendMissingDefaultQueueSize(params.QueueMax, DefaultQueueMax)
205
+ newQm, err := appendMissingDefaults(params.QueueMax, DefaultQueueMax)
206
+ if err != nil {
207
+ return params, err
208
+ }
209
+ newVcb, err := appendMissingDefaults(params.VatCleanupBudget, DefaultVatCleanupBudget)
182
210
  if err != nil {
183
211
  return params, err
184
212
  }
@@ -186,55 +214,37 @@ func UpdateParams(params Params) (Params, error) {
186
214
  params.BeansPerUnit = newBpu
187
215
  params.PowerFlagFees = newPff
188
216
  params.QueueMax = newQm
217
+ params.VatCleanupBudget = newVcb
189
218
  return params, nil
190
219
  }
191
220
 
192
- // appendMissingDefaultBeansPerUnit appends the default beans per unit entries
193
- // not in the list of bean costs already, returning the possibly-updated list,
194
- // or an error.
195
- func appendMissingDefaultBeansPerUnit(bpu []StringBeans, defaultBpu []StringBeans) ([]StringBeans, error) {
196
- existingBpu := make(map[string]struct{}, len(bpu))
197
- for _, ob := range bpu {
198
- existingBpu[ob.Key] = struct{}{}
199
- }
200
-
201
- for _, b := range defaultBpu {
202
- if _, exists := existingBpu[b.Key]; !exists {
203
- bpu = append(bpu, b)
221
+ // appendMissingDefaults appends to an input list any missing entries with their
222
+ // respective default values and returns the result.
223
+ func appendMissingDefaults[Entry StringBeans | PowerFlagFee | QueueSize | UintMapEntry](entries []Entry, defaults []Entry) ([]Entry, error) {
224
+ getKey := func(entry any) string {
225
+ switch e := entry.(type) {
226
+ case StringBeans:
227
+ return e.Key
228
+ case PowerFlagFee:
229
+ return e.PowerFlag
230
+ case QueueSize:
231
+ return e.Key
232
+ case UintMapEntry:
233
+ return e.Key
204
234
  }
235
+ panic("unreachable")
205
236
  }
206
- return bpu, nil
207
- }
208
237
 
209
- // appendMissingDefaultPowerFlagFees appends the default power flag fee entries
210
- // not in the list of power flags already, returning the possibly-updated list,
211
- // or an error.
212
- func appendMissingDefaultPowerFlagFees(pff []PowerFlagFee, defaultPff []PowerFlagFee) ([]PowerFlagFee, error) {
213
- existingPff := make(map[string]struct{}, len(pff))
214
- for _, of := range pff {
215
- existingPff[of.PowerFlag] = struct{}{}
238
+ existingKeys := make(map[string]bool, len(entries))
239
+ for _, entry := range entries {
240
+ existingKeys[getKey(entry)] = true
216
241
  }
217
242
 
218
- for _, f := range defaultPff {
219
- if _, exists := existingPff[f.PowerFlag]; !exists {
220
- pff = append(pff, f)
243
+ for _, defaultEntry := range defaults {
244
+ if exists := existingKeys[getKey(defaultEntry)]; !exists {
245
+ entries = append(entries, defaultEntry)
221
246
  }
222
247
  }
223
- return pff, nil
224
- }
225
-
226
- // appendMissingDefaultQueueSize appends the default queue size entries not in
227
- // the list of sizes already, returning the possibly-updated list, or an error.
228
- func appendMissingDefaultQueueSize(qs []QueueSize, defaultQs []QueueSize) ([]QueueSize, error) {
229
- existingQs := make(map[string]struct{}, len(qs))
230
- for _, os := range qs {
231
- existingQs[os.Key] = struct{}{}
232
- }
233
248
 
234
- for _, s := range defaultQs {
235
- if _, exists := existingQs[s.Key]; !exists {
236
- qs = append(qs, s)
237
- }
238
- }
239
- return qs, nil
249
+ return entries, nil
240
250
  }
@@ -80,7 +80,7 @@ func TestAddStorageBeanCost(t *testing.T) {
80
80
  },
81
81
  } {
82
82
  t.Run(tt.name, func(t *testing.T) {
83
- got, err := appendMissingDefaultBeansPerUnit(tt.in, []StringBeans{defaultStorageCost})
83
+ got, err := appendMissingDefaults(tt.in, []StringBeans{defaultStorageCost})
84
84
  if err != nil {
85
85
  t.Errorf("got error %v", err)
86
86
  } else if !reflect.DeepEqual(got, tt.want) {
@@ -90,27 +90,93 @@ func TestAddStorageBeanCost(t *testing.T) {
90
90
  }
91
91
  }
92
92
 
93
- func TestUpdateParams(t *testing.T) {
94
-
93
+ func TestUpdateParamsFromEmpty(t *testing.T) {
95
94
  in := Params{
96
- BeansPerUnit: []beans{},
97
- BootstrapVatConfig: "baz",
95
+ BeansPerUnit: nil,
96
+ BootstrapVatConfig: "",
98
97
  FeeUnitPrice: sdk.NewCoins(sdk.NewInt64Coin("denom", 789)),
99
- PowerFlagFees: []PowerFlagFee{},
100
- QueueMax: []QueueSize{},
98
+ PowerFlagFees: nil,
99
+ QueueMax: nil,
100
+ VatCleanupBudget: nil,
101
101
  }
102
102
  want := Params{
103
103
  BeansPerUnit: DefaultBeansPerUnit(),
104
- BootstrapVatConfig: "baz",
104
+ BootstrapVatConfig: "",
105
105
  FeeUnitPrice: sdk.NewCoins(sdk.NewInt64Coin("denom", 789)),
106
106
  PowerFlagFees: DefaultPowerFlagFees,
107
107
  QueueMax: DefaultQueueMax,
108
+ VatCleanupBudget: DefaultVatCleanupBudget,
109
+ }
110
+ got, err := UpdateParams(in)
111
+ if err != nil {
112
+ t.Fatalf("UpdateParam error %v", err)
113
+ }
114
+ if !reflect.DeepEqual(got, want) {
115
+ t.Errorf("GOT\n%v\nWANTED\n%v", got, want)
116
+ }
117
+ }
118
+
119
+ func TestUpdateParamsFromExisting(t *testing.T) {
120
+ defaultBeansPerUnit := DefaultBeansPerUnit()
121
+ customBeansPerUnit := NewStringBeans("foo", sdk.NewUint(1))
122
+ customPowerFlagFee := NewPowerFlagFee("bar", sdk.NewCoins(sdk.NewInt64Coin("baz", 2)))
123
+ customQueueSize := NewQueueSize("qux", int32(3))
124
+ customVatCleanup := UintMapEntry{"corge", sdk.NewUint(4)}
125
+ in := Params{
126
+ BeansPerUnit: append([]StringBeans{customBeansPerUnit}, defaultBeansPerUnit[2:4]...),
127
+ BootstrapVatConfig: "",
128
+ FeeUnitPrice: sdk.NewCoins(sdk.NewInt64Coin("denom", 789)),
129
+ PowerFlagFees: []PowerFlagFee{customPowerFlagFee},
130
+ QueueMax: []QueueSize{NewQueueSize(QueueInbound, int32(10)), customQueueSize},
131
+ VatCleanupBudget: []UintMapEntry{customVatCleanup, UintMapEntry{VatCleanupDefault, sdk.NewUint(10)}},
132
+ }
133
+ want := Params{
134
+ BeansPerUnit: append(append(in.BeansPerUnit, defaultBeansPerUnit[0:2]...), defaultBeansPerUnit[4:]...),
135
+ BootstrapVatConfig: in.BootstrapVatConfig,
136
+ FeeUnitPrice: in.FeeUnitPrice,
137
+ PowerFlagFees: append(in.PowerFlagFees, DefaultPowerFlagFees...),
138
+ QueueMax: in.QueueMax,
139
+ VatCleanupBudget: append(in.VatCleanupBudget, DefaultVatCleanupBudget[1:]...),
108
140
  }
109
141
  got, err := UpdateParams(in)
110
142
  if err != nil {
111
143
  t.Fatalf("UpdateParam error %v", err)
112
144
  }
113
145
  if !reflect.DeepEqual(got, want) {
114
- t.Errorf("got %v, want %v", got, want)
146
+ t.Errorf("GOT\n%v\nWANTED\n%v", got, want)
147
+ }
148
+ }
149
+
150
+ func TestValidateParams(t *testing.T) {
151
+ params := Params{
152
+ BeansPerUnit: DefaultBeansPerUnit(),
153
+ BootstrapVatConfig: "foo",
154
+ FeeUnitPrice: sdk.NewCoins(sdk.NewInt64Coin("denom", 789)),
155
+ PowerFlagFees: DefaultPowerFlagFees,
156
+ QueueMax: DefaultQueueMax,
157
+ VatCleanupBudget: DefaultVatCleanupBudget,
158
+ }
159
+ err := params.ValidateBasic()
160
+ if err != nil {
161
+ t.Errorf("unexpected ValidateBasic() error with default params: %v", err)
162
+ }
163
+
164
+ customVatCleanup := UintMapEntry{"corge", sdk.NewUint(4)}
165
+ params.VatCleanupBudget = append(params.VatCleanupBudget, customVatCleanup)
166
+ err = params.ValidateBasic()
167
+ if err != nil {
168
+ t.Errorf("unexpected ValidateBasic() error with extended params: %v", err)
169
+ }
170
+
171
+ params.VatCleanupBudget = params.VatCleanupBudget[1:]
172
+ err = params.ValidateBasic()
173
+ if err == nil {
174
+ t.Errorf("ValidateBasic() failed to reject VatCleanupBudget with missing `default` %v", params.VatCleanupBudget)
175
+ }
176
+
177
+ params.VatCleanupBudget = []UintMapEntry{}
178
+ err = params.ValidateBasic()
179
+ if err != nil {
180
+ t.Errorf("unexpected ValidateBasic() error with empty VatCleanupBudget: %v", params.VatCleanupBudget)
115
181
  }
116
182
  }