@agoric/cosmos 0.35.0-u12.0 → 0.35.0-u14.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 (91) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/Makefile +25 -12
  3. package/ante/ante.go +7 -5
  4. package/ante/inbound_test.go +8 -0
  5. package/app/app.go +139 -108
  6. package/app/export.go +13 -9
  7. package/app/sim_test.go +4 -4
  8. package/cmd/agd/main.go +5 -3
  9. package/cmd/libdaemon/main.go +5 -2
  10. package/daemon/cmd/genaccounts.go +13 -9
  11. package/daemon/cmd/root.go +38 -17
  12. package/daemon/cmd/root_test.go +1 -1
  13. package/daemon/cmd/testnet.go +17 -6
  14. package/daemon/main.go +3 -2
  15. package/git-revision.txt +1 -1
  16. package/go.mod +117 -76
  17. package/go.sum +858 -210
  18. package/package.json +3 -3
  19. package/proto/agoric/vstorage/query.proto +53 -1
  20. package/scripts/protocgen.sh +12 -1
  21. package/third_party/proto/buf.yaml +1 -0
  22. package/third_party/proto/cosmos/base/query/v1beta1/pagination.proto +4 -1
  23. package/third_party/proto/cosmos/base/v1beta1/coin.proto +7 -4
  24. package/third_party/proto/cosmos/upgrade/v1beta1/upgrade.proto +16 -6
  25. package/third_party/proto/cosmos_proto/cosmos.proto +97 -0
  26. package/third_party/proto/google/api/annotations.proto +1 -1
  27. package/third_party/proto/google/api/http.proto +181 -120
  28. package/third_party/proto/google/api/httpbody.proto +9 -6
  29. package/third_party/proto/google/protobuf/any.proto +1 -7
  30. package/third_party/proto/ibc/core/channel/v1/channel.proto +15 -1
  31. package/third_party/proto/ibc/core/client/v1/client.proto +9 -6
  32. package/upgradegaia.sh +13 -4
  33. package/vm/action.go +133 -0
  34. package/vm/action_test.go +129 -0
  35. package/vm/controller.go +9 -16
  36. package/vm/core_proposals.go +31 -0
  37. package/x/lien/keeper/account.go +16 -11
  38. package/x/lien/keeper/keeper.go +5 -4
  39. package/x/lien/keeper/keeper_test.go +9 -9
  40. package/x/lien/lien.go +6 -4
  41. package/x/lien/lien_test.go +20 -16
  42. package/x/swingset/abci.go +25 -33
  43. package/x/swingset/client/cli/query.go +2 -2
  44. package/x/swingset/client/cli/tx.go +48 -33
  45. package/x/swingset/client/proposal_handler.go +2 -17
  46. package/x/swingset/keeper/keeper.go +69 -15
  47. package/x/swingset/keeper/keeper_test.go +1 -1
  48. package/x/swingset/keeper/migrations.go +7 -2
  49. package/x/swingset/keeper/msg_server.go +66 -49
  50. package/x/swingset/keeper/proposal.go +14 -8
  51. package/x/swingset/keeper/querier.go +14 -6
  52. package/x/swingset/keeper/swing_store_exports_handler.go +5 -1
  53. package/x/swingset/proposal_handler.go +3 -3
  54. package/x/swingset/swingset.go +4 -2
  55. package/x/swingset/types/codec.go +2 -2
  56. package/x/swingset/types/default-params.go +22 -16
  57. package/x/swingset/types/expected_keepers.go +11 -0
  58. package/x/swingset/types/msgs.go +43 -2
  59. package/x/swingset/types/msgs.pb.go +16 -16
  60. package/x/swingset/types/params.go +74 -0
  61. package/x/swingset/types/params_test.go +116 -0
  62. package/x/swingset/types/proposal.go +5 -5
  63. package/x/swingset/types/types.go +30 -28
  64. package/x/vbank/keeper/keeper.go +3 -2
  65. package/x/vbank/keeper/querier.go +6 -2
  66. package/x/vbank/keeper/rewards.go +1 -1
  67. package/x/vbank/vbank.go +19 -17
  68. package/x/vbank/vbank_test.go +18 -18
  69. package/x/vibc/handler.go +3 -8
  70. package/x/vibc/ibc.go +79 -126
  71. package/x/vibc/keeper/keeper.go +19 -18
  72. package/x/vibc/types/expected_keepers.go +13 -5
  73. package/x/vibc/types/msgs.go +1 -1
  74. package/x/vibc/types/msgs.pb.go +1 -1
  75. package/x/vstorage/README.md +138 -0
  76. package/x/vstorage/capdata/capdata.go +298 -0
  77. package/x/vstorage/capdata/capdata_test.go +352 -0
  78. package/x/vstorage/client/cli/query.go +51 -4
  79. package/x/vstorage/keeper/grpc_query.go +221 -0
  80. package/x/vstorage/keeper/keeper.go +3 -2
  81. package/x/vstorage/keeper/keeper_grpc_test.go +300 -0
  82. package/x/vstorage/keeper/keeper_test.go +1 -1
  83. package/x/vstorage/keeper/querier.go +6 -2
  84. package/x/vstorage/keeper/querier_test.go +112 -0
  85. package/x/vstorage/types/query.pb.go +646 -36
  86. package/x/vstorage/types/query.pb.gw.go +119 -0
  87. package/x/vstorage/vstorage.go +16 -15
  88. package/x/vstorage/vstorage_test.go +5 -5
  89. package/x/swingset/legacy/v32/params.go +0 -37
  90. package/x/swingset/legacy/v32/params_test.go +0 -133
  91. /package/{src/index.cjs → index.cjs} +0 -0
package/x/vibc/ibc.go CHANGED
@@ -1,17 +1,18 @@
1
1
  package vibc
2
2
 
3
3
  import (
4
+ "context"
4
5
  "encoding/json"
5
6
  "fmt"
6
7
 
7
8
  "github.com/Agoric/agoric-sdk/golang/cosmos/vm"
8
9
  sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
9
10
  capability "github.com/cosmos/cosmos-sdk/x/capability/types"
10
- channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types"
11
- porttypes "github.com/cosmos/ibc-go/v3/modules/core/05-port/types"
12
- host "github.com/cosmos/ibc-go/v3/modules/core/24-host"
11
+ channeltypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types"
12
+ porttypes "github.com/cosmos/ibc-go/v6/modules/core/05-port/types"
13
+ host "github.com/cosmos/ibc-go/v6/modules/core/24-host"
13
14
 
14
- "github.com/cosmos/ibc-go/v3/modules/core/exported"
15
+ "github.com/cosmos/ibc-go/v6/modules/core/exported"
15
16
 
16
17
  sdk "github.com/cosmos/cosmos-sdk/types"
17
18
  )
@@ -63,8 +64,9 @@ func NewIBCModule(keeper Keeper) IBCModule {
63
64
  }
64
65
  }
65
66
 
66
- func (ch IBCModule) Receive(ctx *vm.ControllerContext, str string) (ret string, err error) {
67
+ func (ch IBCModule) Receive(cctx context.Context, str string) (ret string, err error) {
67
68
  // fmt.Println("ibc.go downcall", str)
69
+ ctx := sdk.UnwrapSDKContext(cctx)
68
70
  keeper := ch.keeper
69
71
 
70
72
  msg := new(portMessage)
@@ -79,29 +81,28 @@ func (ch IBCModule) Receive(ctx *vm.ControllerContext, str string) (ret string,
79
81
 
80
82
  switch msg.Method {
81
83
  case "sendPacket":
82
- seq, ok := keeper.GetNextSequenceSend(
83
- ctx.Context,
84
- msg.Packet.SourcePort,
85
- msg.Packet.SourceChannel,
86
- )
87
- if !ok {
88
- return "", fmt.Errorf("unknown sequence number")
89
- }
90
-
91
84
  timeoutTimestamp := msg.Packet.TimeoutTimestamp
92
85
  if msg.Packet.TimeoutHeight.IsZero() && msg.Packet.TimeoutTimestamp == 0 {
93
86
  // Use the relative timeout if no absolute timeout is specifiied.
94
- timeoutTimestamp = uint64(ctx.Context.BlockTime().UnixNano()) + msg.RelativeTimeoutNs
87
+ timeoutTimestamp = uint64(ctx.BlockTime().UnixNano()) + msg.RelativeTimeoutNs
95
88
  }
96
89
 
97
- packet := channeltypes.NewPacket(
98
- msg.Packet.Data, seq,
99
- msg.Packet.SourcePort, msg.Packet.SourceChannel,
100
- msg.Packet.DestinationPort, msg.Packet.DestinationChannel,
101
- msg.Packet.TimeoutHeight, timeoutTimestamp,
90
+ seq, err := keeper.SendPacket(
91
+ ctx,
92
+ msg.Packet.SourcePort,
93
+ msg.Packet.SourceChannel,
94
+ msg.Packet.TimeoutHeight,
95
+ timeoutTimestamp,
96
+ msg.Packet.Data,
102
97
  )
103
- err = keeper.SendPacket(ctx.Context, packet)
104
98
  if err == nil {
99
+ // synthesize the sent packet
100
+ packet := channeltypes.NewPacket(
101
+ msg.Packet.Data, seq,
102
+ msg.Packet.SourcePort, msg.Packet.SourceChannel,
103
+ msg.Packet.DestinationPort, msg.Packet.DestinationChannel,
104
+ msg.Packet.TimeoutHeight, timeoutTimestamp,
105
+ )
105
106
  bytes, err := json.Marshal(&packet)
106
107
  if err == nil {
107
108
  ret = string(bytes)
@@ -109,14 +110,14 @@ func (ch IBCModule) Receive(ctx *vm.ControllerContext, str string) (ret string,
109
110
  }
110
111
 
111
112
  case "receiveExecuted":
112
- err = keeper.WriteAcknowledgement(ctx.Context, msg.Packet, msg.Ack)
113
+ err = keeper.WriteAcknowledgement(ctx, msg.Packet, msg.Ack)
113
114
  if err == nil {
114
115
  ret = "true"
115
116
  }
116
117
 
117
118
  case "startChannelOpenInit":
118
119
  err = keeper.ChanOpenInit(
119
- ctx.Context, stringToOrder(msg.Order), msg.Hops,
120
+ ctx, stringToOrder(msg.Order), msg.Hops,
120
121
  msg.Packet.SourcePort,
121
122
  msg.Packet.DestinationPort,
122
123
  msg.Version,
@@ -126,19 +127,19 @@ func (ch IBCModule) Receive(ctx *vm.ControllerContext, str string) (ret string,
126
127
  }
127
128
 
128
129
  case "startChannelCloseInit":
129
- err = keeper.ChanCloseInit(ctx.Context, msg.Packet.SourcePort, msg.Packet.SourceChannel)
130
+ err = keeper.ChanCloseInit(ctx, msg.Packet.SourcePort, msg.Packet.SourceChannel)
130
131
  if err == nil {
131
132
  ret = "true"
132
133
  }
133
134
 
134
135
  case "bindPort":
135
- err = keeper.BindPort(ctx.Context, msg.Packet.SourcePort)
136
+ err = keeper.BindPort(ctx, msg.Packet.SourcePort)
136
137
  if err == nil {
137
138
  ret = "true"
138
139
  }
139
140
 
140
141
  case "timeoutExecuted":
141
- err = keeper.TimeoutExecuted(ctx.Context, msg.Packet)
142
+ err = keeper.TimeoutExecuted(ctx, msg.Packet)
142
143
  if err == nil {
143
144
  ret = "true"
144
145
  }
@@ -151,7 +152,7 @@ func (ch IBCModule) Receive(ctx *vm.ControllerContext, str string) (ret string,
151
152
  return
152
153
  }
153
154
 
154
- func (im IBCModule) PushAction(ctx sdk.Context, action vm.Jsonable) error {
155
+ func (im IBCModule) PushAction(ctx sdk.Context, action vm.Action) error {
155
156
  // fmt.Println("ibc.go upcall", send)
156
157
  return im.keeper.PushAction(ctx, action)
157
158
  // fmt.Println("ibc.go upcall reply", reply, err)
@@ -167,24 +168,22 @@ func (im IBCModule) OnChanOpenInit(
167
168
  channelCap *capability.Capability,
168
169
  counterparty channeltypes.Counterparty,
169
170
  version string,
170
- ) error {
171
- return sdkerrors.Wrap(
171
+ ) (string, error) {
172
+ return "", sdkerrors.Wrap(
172
173
  channeltypes.ErrChannelNotFound,
173
174
  fmt.Sprintf("vibc does not allow synthetic channelOpenInit for port %s", portID),
174
175
  )
175
176
  }
176
177
 
177
178
  type channelOpenTryEvent struct {
178
- Type string `json:"type"` // IBC
179
- Event string `json:"event"` // channelOpenTry
180
- Order string `json:"order"`
181
- ConnectionHops []string `json:"connectionHops"`
182
- PortID string `json:"portID"`
183
- ChannelID string `json:"channelID"`
184
- Counterparty channeltypes.Counterparty `json:"counterparty"`
185
- Version string `json:"version"`
186
- BlockHeight int64 `json:"blockHeight"`
187
- BlockTime int64 `json:"blockTime"`
179
+ vm.ActionHeader `actionType:"IBC_EVENT"`
180
+ Event string `json:"event" default:"channelOpenTry"`
181
+ Order string `json:"order"`
182
+ ConnectionHops []string `json:"connectionHops"`
183
+ PortID string `json:"portID"`
184
+ ChannelID string `json:"channelID"`
185
+ Counterparty channeltypes.Counterparty `json:"counterparty"`
186
+ Version string `json:"version"`
188
187
  }
189
188
 
190
189
  func (im IBCModule) OnChanOpenTry(
@@ -198,16 +197,12 @@ func (im IBCModule) OnChanOpenTry(
198
197
  counterpartyVersion string,
199
198
  ) (string, error) {
200
199
  event := channelOpenTryEvent{
201
- Type: "IBC_EVENT",
202
- Event: "channelOpenTry",
203
200
  Order: orderToString(order),
204
201
  ConnectionHops: connectionHops,
205
202
  PortID: portID,
206
203
  ChannelID: channelID,
207
204
  Counterparty: counterparty,
208
205
  Version: counterpartyVersion, // TODO: don't just use the counterparty version
209
- BlockHeight: ctx.BlockHeight(),
210
- BlockTime: ctx.BlockTime().Unix(),
211
206
  }
212
207
 
213
208
  err := im.PushAction(ctx, event)
@@ -224,15 +219,13 @@ func (im IBCModule) OnChanOpenTry(
224
219
  }
225
220
 
226
221
  type channelOpenAckEvent struct {
227
- Type string `json:"type"` // IBC
228
- Event string `json:"event"` // channelOpenAck
229
- PortID string `json:"portID"`
230
- ChannelID string `json:"channelID"`
231
- CounterpartyVersion string `json:"counterpartyVersion"`
232
- Counterparty channeltypes.Counterparty `json:"counterparty"`
233
- ConnectionHops []string `json:"connectionHops"`
234
- BlockHeight int64 `json:"blockHeight"`
235
- BlockTime int64 `json:"blockTime"`
222
+ vm.ActionHeader `actionType:"IBC_EVENT"`
223
+ Event string `json:"event" default:"channelOpenAck"`
224
+ PortID string `json:"portID"`
225
+ ChannelID string `json:"channelID"`
226
+ CounterpartyVersion string `json:"counterpartyVersion"`
227
+ Counterparty channeltypes.Counterparty `json:"counterparty"`
228
+ ConnectionHops []string `json:"connectionHops"`
236
229
  }
237
230
 
238
231
  func (im IBCModule) OnChanOpenAck(
@@ -248,27 +241,21 @@ func (im IBCModule) OnChanOpenAck(
248
241
 
249
242
  channel.Counterparty.ChannelId = counterpartyChannelID
250
243
  event := channelOpenAckEvent{
251
- Type: "IBC_EVENT",
252
- Event: "channelOpenAck",
253
- PortID: portID,
254
- ChannelID: channelID,
255
- CounterpartyVersion: counterpartyVersion,
256
- Counterparty: channel.Counterparty,
257
- ConnectionHops: channel.ConnectionHops,
258
- BlockHeight: ctx.BlockHeight(),
259
- BlockTime: ctx.BlockTime().Unix(),
244
+ PortID: portID,
245
+ ChannelID: channelID,
246
+ CounterpartyVersion: counterpartyVersion,
247
+ Counterparty: channel.Counterparty,
248
+ ConnectionHops: channel.ConnectionHops,
260
249
  }
261
250
 
262
251
  return im.PushAction(ctx, event)
263
252
  }
264
253
 
265
254
  type channelOpenConfirmEvent struct {
266
- Type string `json:"type"` // IBC
267
- Event string `json:"event"` // channelOpenConfirm
268
- PortID string `json:"portID"`
269
- ChannelID string `json:"channelID"`
270
- BlockHeight int64 `json:"blockHeight"`
271
- BlockTime int64 `json:"blockTime"`
255
+ vm.ActionHeader `actionType:"IBC_EVENT"`
256
+ Event string `json:"event" default:"channelOpenConfirm"`
257
+ PortID string `json:"portID"`
258
+ ChannelID string `json:"channelID"`
272
259
  }
273
260
 
274
261
  func (im IBCModule) OnChanOpenConfirm(
@@ -277,24 +264,18 @@ func (im IBCModule) OnChanOpenConfirm(
277
264
  channelID string,
278
265
  ) error {
279
266
  event := channelOpenConfirmEvent{
280
- Type: "IBC_EVENT",
281
- Event: "channelOpenConfirm",
282
- PortID: portID,
283
- ChannelID: channelID,
284
- BlockHeight: ctx.BlockHeight(),
285
- BlockTime: ctx.BlockTime().Unix(),
267
+ PortID: portID,
268
+ ChannelID: channelID,
286
269
  }
287
270
 
288
271
  return im.PushAction(ctx, event)
289
272
  }
290
273
 
291
274
  type channelCloseInitEvent struct {
292
- Type string `json:"type"` // IBC
293
- Event string `json:"event"` // channelCloseInit
294
- PortID string `json:"portID"`
295
- ChannelID string `json:"channelID"`
296
- BlockHeight int64 `json:"blockHeight"`
297
- BlockTime int64 `json:"blockTime"`
275
+ vm.ActionHeader `actionType:"IBC_EVENT"`
276
+ Event string `json:"event" default:"channelCloseInit"`
277
+ PortID string `json:"portID"`
278
+ ChannelID string `json:"channelID"`
298
279
  }
299
280
 
300
281
  func (im IBCModule) OnChanCloseInit(
@@ -303,12 +284,8 @@ func (im IBCModule) OnChanCloseInit(
303
284
  channelID string,
304
285
  ) error {
305
286
  event := channelCloseInitEvent{
306
- Type: "IBC_EVENT",
307
- Event: "channelCloseInit",
308
- PortID: portID,
309
- ChannelID: channelID,
310
- BlockHeight: ctx.BlockHeight(),
311
- BlockTime: ctx.BlockTime().Unix(),
287
+ PortID: portID,
288
+ ChannelID: channelID,
312
289
  }
313
290
 
314
291
  err := im.PushAction(ctx, event)
@@ -316,12 +293,10 @@ func (im IBCModule) OnChanCloseInit(
316
293
  }
317
294
 
318
295
  type channelCloseConfirmEvent struct {
319
- Type string `json:"type"` // IBC
320
- Event string `json:"event"` // channelCloseConfirm
321
- PortID string `json:"portID"`
322
- ChannelID string `json:"channelID"`
323
- BlockHeight int64 `json:"blockHeight"`
324
- BlockTime int64 `json:"blockTime"`
296
+ vm.ActionHeader `actionType:"IBC_EVENT"`
297
+ Event string `json:"event" default:"channelCloseConfirm"`
298
+ PortID string `json:"portID"`
299
+ ChannelID string `json:"channelID"`
325
300
  }
326
301
 
327
302
  func (im IBCModule) OnChanCloseConfirm(
@@ -330,12 +305,8 @@ func (im IBCModule) OnChanCloseConfirm(
330
305
  channelID string,
331
306
  ) error {
332
307
  event := channelCloseConfirmEvent{
333
- Type: "IBC_EVENT",
334
- Event: "channelCloseConfirm",
335
- PortID: portID,
336
- ChannelID: channelID,
337
- BlockHeight: ctx.BlockHeight(),
338
- BlockTime: ctx.BlockTime().Unix(),
308
+ PortID: portID,
309
+ ChannelID: channelID,
339
310
  }
340
311
 
341
312
  err := im.PushAction(ctx, event)
@@ -343,11 +314,9 @@ func (im IBCModule) OnChanCloseConfirm(
343
314
  }
344
315
 
345
316
  type receivePacketEvent struct {
346
- Type string `json:"type"` // IBC
347
- Event string `json:"event"` // receivePacket
348
- Packet channeltypes.Packet `json:"packet"`
349
- BlockHeight int64 `json:"blockHeight"`
350
- BlockTime int64 `json:"blockTime"`
317
+ vm.ActionHeader `actionType:"IBC_EVENT"`
318
+ Event string `json:"event" default:"receivePacket"`
319
+ Packet channeltypes.Packet `json:"packet"`
351
320
  }
352
321
 
353
322
  func (im IBCModule) OnRecvPacket(
@@ -364,28 +333,22 @@ func (im IBCModule) OnRecvPacket(
364
333
  // the same packets.
365
334
 
366
335
  event := receivePacketEvent{
367
- Type: "IBC_EVENT",
368
- Event: "receivePacket",
369
- Packet: packet,
370
- BlockHeight: ctx.BlockHeight(),
371
- BlockTime: ctx.BlockTime().Unix(),
336
+ Packet: packet,
372
337
  }
373
338
 
374
339
  err := im.PushAction(ctx, event)
375
340
  if err != nil {
376
- return channeltypes.NewErrorAcknowledgement(err.Error())
341
+ return channeltypes.NewErrorAcknowledgement(err)
377
342
  }
378
343
 
379
344
  return nil
380
345
  }
381
346
 
382
347
  type acknowledgementPacketEvent struct {
383
- Type string `json:"type"` // IBC
384
- Event string `json:"event"` // acknowledgementPacket
348
+ vm.ActionHeader `actionType:"IBC_EVENT"`
349
+ Event string `json:"event" default:"acknowledgementPacket"`
385
350
  Packet channeltypes.Packet `json:"packet"`
386
351
  Acknowledgement []byte `json:"acknowledgement"`
387
- BlockHeight int64 `json:"blockHeight"`
388
- BlockTime int64 `json:"blockTime"`
389
352
  }
390
353
 
391
354
  func (im IBCModule) OnAcknowledgementPacket(
@@ -395,12 +358,8 @@ func (im IBCModule) OnAcknowledgementPacket(
395
358
  relayer sdk.AccAddress,
396
359
  ) error {
397
360
  event := acknowledgementPacketEvent{
398
- Type: "IBC_EVENT",
399
- Event: "acknowledgementPacket",
400
361
  Packet: packet,
401
362
  Acknowledgement: acknowledgement,
402
- BlockHeight: ctx.BlockHeight(),
403
- BlockTime: ctx.BlockTime().Unix(),
404
363
  }
405
364
 
406
365
  err := im.PushAction(ctx, event)
@@ -412,11 +371,9 @@ func (im IBCModule) OnAcknowledgementPacket(
412
371
  }
413
372
 
414
373
  type timeoutPacketEvent struct {
415
- Type string `json:"type"` // IBC
416
- Event string `json:"event"` // timeoutPacket
417
- Packet channeltypes.Packet `json:"packet"`
418
- BlockHeight int64 `json:"blockHeight"`
419
- BlockTime int64 `json:"blockTime"`
374
+ vm.ActionHeader `actionType:"IBC_EVENT"`
375
+ Event string `json:"event" default:"timeoutPacket"`
376
+ Packet channeltypes.Packet `json:"packet"`
420
377
  }
421
378
 
422
379
  func (im IBCModule) OnTimeoutPacket(
@@ -425,11 +382,7 @@ func (im IBCModule) OnTimeoutPacket(
425
382
  relayer sdk.AccAddress,
426
383
  ) error {
427
384
  event := timeoutPacketEvent{
428
- Type: "IBC_EVENT",
429
- Event: "timeoutPacket",
430
- Packet: packet,
431
- BlockHeight: ctx.BlockHeight(),
432
- BlockTime: ctx.BlockTime().Unix(),
385
+ Packet: packet,
433
386
  }
434
387
 
435
388
  err := im.PushAction(ctx, event)
@@ -4,15 +4,17 @@ import (
4
4
  "fmt"
5
5
 
6
6
  "github.com/cosmos/cosmos-sdk/codec"
7
+ storetypes "github.com/cosmos/cosmos-sdk/store/types"
7
8
  sdk "github.com/cosmos/cosmos-sdk/types"
8
9
 
9
10
  sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
10
11
  capabilitykeeper "github.com/cosmos/cosmos-sdk/x/capability/keeper"
11
12
  capability "github.com/cosmos/cosmos-sdk/x/capability/types"
12
- channeltypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types"
13
- porttypes "github.com/cosmos/ibc-go/v3/modules/core/05-port/types"
14
- host "github.com/cosmos/ibc-go/v3/modules/core/24-host"
15
- ibcexported "github.com/cosmos/ibc-go/v3/modules/core/exported"
13
+ clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types"
14
+ channeltypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types"
15
+ porttypes "github.com/cosmos/ibc-go/v6/modules/core/05-port/types"
16
+ host "github.com/cosmos/ibc-go/v6/modules/core/24-host"
17
+ ibcexported "github.com/cosmos/ibc-go/v6/modules/core/exported"
16
18
 
17
19
  bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
18
20
 
@@ -22,7 +24,7 @@ import (
22
24
 
23
25
  // Keeper maintains the link to data storage and exposes getter/setter methods for the various parts of the state machine
24
26
  type Keeper struct {
25
- storeKey sdk.StoreKey
27
+ storeKey storetypes.StoreKey
26
28
  cdc codec.Codec
27
29
 
28
30
  channelKeeper types.ChannelKeeper
@@ -35,7 +37,7 @@ type Keeper struct {
35
37
 
36
38
  // NewKeeper creates a new dIBC Keeper instance
37
39
  func NewKeeper(
38
- cdc codec.Codec, key sdk.StoreKey,
40
+ cdc codec.Codec, key storetypes.StoreKey,
39
41
  channelKeeper types.ChannelKeeper, portKeeper types.PortKeeper,
40
42
  bankKeeper bankkeeper.Keeper,
41
43
  scopedKeeper capabilitykeeper.ScopedKeeper,
@@ -57,12 +59,6 @@ func (k Keeper) GetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) s
57
59
  return k.bankKeeper.GetBalance(ctx, addr, denom)
58
60
  }
59
61
 
60
- // GetNextSequenceSend defines a wrapper function for the channel Keeper's function
61
- // in order to expose it to the vibc IBC handler.
62
- func (k Keeper) GetNextSequenceSend(ctx sdk.Context, portID, channelID string) (uint64, bool) {
63
- return k.channelKeeper.GetNextSequenceSend(ctx, portID, channelID)
64
- }
65
-
66
62
  // GetChannel defines a wrapper function for the channel Keeper's function
67
63
  // in order to expose it to the vibc IBC handler.
68
64
  func (k Keeper) GetChannel(ctx sdk.Context, portID, channelID string) (channeltypes.Channel, bool) {
@@ -98,15 +94,20 @@ func (k Keeper) ChanOpenInit(ctx sdk.Context, order channeltypes.Order, connecti
98
94
 
99
95
  // SendPacket defines a wrapper function for the channel Keeper's function
100
96
  // in order to expose it to the vibc IBC handler.
101
- func (k Keeper) SendPacket(ctx sdk.Context, packet ibcexported.PacketI) error {
102
- portID := packet.GetSourcePort()
103
- channelID := packet.GetSourceChannel()
104
- capName := host.ChannelCapabilityPath(portID, channelID)
97
+ func (k Keeper) SendPacket(
98
+ ctx sdk.Context,
99
+ sourcePort string,
100
+ sourceChannel string,
101
+ timeoutHeight clienttypes.Height,
102
+ timeoutTimestamp uint64,
103
+ data []byte,
104
+ ) (uint64, error) {
105
+ capName := host.ChannelCapabilityPath(sourcePort, sourceChannel)
105
106
  chanCap, ok := k.GetCapability(ctx, capName)
106
107
  if !ok {
107
- return sdkerrors.Wrapf(channeltypes.ErrChannelCapabilityNotFound, "could not retrieve channel capability at: %s", capName)
108
+ return 0, sdkerrors.Wrapf(channeltypes.ErrChannelCapabilityNotFound, "could not retrieve channel capability at: %s", capName)
108
109
  }
109
- return k.channelKeeper.SendPacket(ctx, chanCap, packet)
110
+ return k.channelKeeper.SendPacket(ctx, chanCap, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data)
110
111
  }
111
112
 
112
113
  var _ ibcexported.Acknowledgement = (*rawAcknowledgement)(nil)
@@ -3,16 +3,24 @@ package types
3
3
  import (
4
4
  sdk "github.com/cosmos/cosmos-sdk/types"
5
5
  capability "github.com/cosmos/cosmos-sdk/x/capability/types"
6
- connection "github.com/cosmos/ibc-go/v3/modules/core/03-connection/types"
7
- channel "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types"
8
- ibcexported "github.com/cosmos/ibc-go/v3/modules/core/exported"
6
+ clienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types"
7
+ connection "github.com/cosmos/ibc-go/v6/modules/core/03-connection/types"
8
+ channel "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types"
9
+ ibcexported "github.com/cosmos/ibc-go/v6/modules/core/exported"
9
10
  )
10
11
 
11
12
  // ChannelKeeper defines the expected IBC channel keeper
12
13
  type ChannelKeeper interface {
13
14
  GetChannel(ctx sdk.Context, srcPort, srcChan string) (channel channel.Channel, found bool)
14
- GetNextSequenceSend(ctx sdk.Context, portID, channelID string) (uint64, bool)
15
- SendPacket(ctx sdk.Context, channelCap *capability.Capability, packet ibcexported.PacketI) error
15
+ SendPacket(
16
+ ctx sdk.Context,
17
+ channelCap *capability.Capability,
18
+ sourcePort string,
19
+ sourceChannel string,
20
+ timeoutHeight clienttypes.Height,
21
+ timeoutTimestamp uint64,
22
+ data []byte,
23
+ ) (uint64, error)
16
24
  WriteAcknowledgement(ctx sdk.Context, channelCap *capability.Capability, packet ibcexported.PacketI, acknowledgement ibcexported.Acknowledgement) error
17
25
  ChanOpenInit(ctx sdk.Context, order channel.Order, connectionHops []string, portID string,
18
26
  portCap *capability.Capability, counterparty channel.Counterparty, version string) (string, *capability.Capability, error)
@@ -4,7 +4,7 @@ import (
4
4
  sdk "github.com/cosmos/cosmos-sdk/types"
5
5
  sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
6
6
 
7
- chanTypes "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types"
7
+ chanTypes "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types"
8
8
  )
9
9
 
10
10
  const RouterKey = ModuleName // this was defined in your key.go file
@@ -7,7 +7,7 @@ import (
7
7
  context "context"
8
8
  fmt "fmt"
9
9
  github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types"
10
- types "github.com/cosmos/ibc-go/v3/modules/core/04-channel/types"
10
+ types "github.com/cosmos/ibc-go/v6/modules/core/04-channel/types"
11
11
  _ "github.com/gogo/protobuf/gogoproto"
12
12
  grpc1 "github.com/gogo/protobuf/grpc"
13
13
  proto "github.com/gogo/protobuf/proto"
@@ -0,0 +1,138 @@
1
+ # Virtual Storage
2
+
3
+ This module manages "[IAVL](https://github.com/cosmos/iavl)" chain storage data with a hierarchical keyspace in which each key is a "[path](./types/path_keys.go)" composed of zero or more dot-separated nonempty segments in a restricted alphabet. It exposes gRPC endpoints to arbitrary external clients for reading data, and internal read/write interfaces for use by SwingSet (which itself manages further subtree-scoped attenuation).
4
+
5
+ ## Internal Go interface
6
+
7
+ [Keeper](./keeper/keeper.go)
8
+ * generic
9
+ * GetChildren
10
+ * GetEntry
11
+ * HasEntry
12
+ * HasStorage
13
+ * SetStorage[AndNotify]
14
+ * StreamCell-oriented (a StreamCell captures a block height and an array of values)
15
+ * AppendStorageValue[AndNotify]
16
+ * queue-oriented (a queue stores items at paths like "$prefix.$n", documenting
17
+ the n for the next item to be consumed at "$prefix.head" and the n for the next
18
+ next item to be pushed at "$prefix.tail" such that the queue is empty when both
19
+ head and tail store the same n)
20
+ * GetQueueLength
21
+ * PushQueueItem
22
+
23
+ ## Internal JSON interface
24
+
25
+ This is used by the SwingSet "bridge".
26
+
27
+ [Receive](./vstorage.go) with input `{ "method": "...", "args": [...] }`
28
+ * generic
29
+ * method "entries", args path
30
+ * method "get"/"has", args path
31
+ * method "set"/"setWithoutNotify", args [[path, value?], ...]
32
+ * method "children", args path
33
+ * method "values", args path (returns values for children in the same order as method "children")
34
+ * method "size", args path (returns the count of children)
35
+ * StreamCell-oriented
36
+ * method "append", args [[path, value?], ...]
37
+
38
+ ## CLI
39
+
40
+ A blockchain node may be interrogated by RPC using `agd [--node $url] query vstorage path` via [client/cli](./client/cli/query.go). (See command help for options and variants `data` and `children`.)
41
+
42
+ Examples:
43
+ ```sh
44
+ $ agd --node https://main.rpc.agoric.net:443/ query vstorage path published.reserve.
45
+ children:
46
+ - governance
47
+ - metrics
48
+ pagination: null
49
+
50
+ $ agd --node https://main.rpc.agoric.net:443/ query vstorage path -o json published.reserve.
51
+ {"children":["governance","metrics"],"pagination":null}
52
+
53
+ $ agd --node https://main.rpc.agoric.net:443/ query vstorage path published.reserve.metrics
54
+ value: '{"blockHeight":"11030240","values":["{\"body\":\"#{\\\"allocations\\\":{\\\"Fee\\\":{\\\"brand\\\":\\\"$0.Alleged:
55
+ IST brand\\\",\\\"value\\\":\\\"+20053582387\\\"}},\\\"shortfallBalance\\\":{\\\"brand\\\":\\\"$0\\\",\\\"value\\\":\\\"+0\\\"},\\\"totalFeeBurned\\\":{\\\"brand\\\":\\\"$0\\\",\\\"value\\\":\\\"+0\\\"},\\\"totalFeeMinted\\\":{\\\"brand\\\":\\\"$0\\\",\\\"value\\\":\\\"+0\\\"}}\",\"slots\":[\"board0257\"]}"]}'
56
+ ```
57
+
58
+ ## External protobuf interface
59
+
60
+ RPC via [Querier](./keeper/grpc_query.go),
61
+ and [CometBFT method "abci_query"](https://docs.cometbft.com/main/rpc/#/ABCI/abci_query)
62
+ with params `path` "/agoric.vstorage.Query/..."
63
+ and `data` \<serialized protobuf per [vstorage/query.proto](../../proto/agoric/vstorage/query.proto)>
64
+ (also via [Querier](./keeper/grpc_query.go))
65
+ * /agoric.vstorage.Query/CapData
66
+ * /agoric.vstorage.Query/Children
67
+ * /agoric.vstorage.Query/Data
68
+
69
+ Example:
70
+ ```sh
71
+ $ curl -sS 'https://main.rpc.agoric.net/' -H 'Content-Type: application/json' -X POST --data "$(
72
+ jq -n --arg queryChildrenRequestHex 0a147075626c69736865642e636f6d6d697474656573 '{
73
+ id: 1,
74
+ method: "abci_query",
75
+ params: { path: "/agoric.vstorage.Query/Children", data: $queryChildrenRequestHex }
76
+ }' | \
77
+ tee /dev/stderr \
78
+ )" | \
79
+ jq . | \
80
+ tee /dev/stderr | \
81
+ jq -r '.result.response.value' | \
82
+ base64 -d | \
83
+ protoc -I golang/cosmos/proto/agoric/vstorage/ -I golang/cosmos/third_party/proto/ \
84
+ --decode=agoric.vstorage.QueryChildrenResponse golang/cosmos/proto/agoric/vstorage/query.proto
85
+ {
86
+ "id": 1,
87
+ "method": "abci_query",
88
+ "params": {
89
+ "path": "/agoric.vstorage.Query/Children",
90
+ "data": "0a147075626c69736865642e636f6d6d697474656573"
91
+ }
92
+ }
93
+ {
94
+ "jsonrpc": "2.0",
95
+ "id": 1,
96
+ "result": {
97
+ "response": {
98
+ "code": 0,
99
+ "log": "",
100
+ "info": "",
101
+ "index": "0",
102
+ "key": null,
103
+ "value": "ChJFY29ub21pY19Db21taXR0ZWUKCWtyZWFkLWdvdg==",
104
+ "proofOps": null,
105
+ "height": "12222836",
106
+ "codespace": ""
107
+ }
108
+ }
109
+ }
110
+ children: "Economic_Committee"
111
+ children: "kread-gov"
112
+ ```
113
+
114
+ ## External JSON interface
115
+
116
+ As described at [Cosmos SDK: Using the REST Endpoints](https://docs.cosmos.network/main/run-node/interact-node#using-the-rest-endpoints), a blockchain node whose [`app.toml` configuration](https://docs.cosmos.network/main/run-node/run-node#configuring-the-node-using-apptoml-and-configtoml) enables the "REST" API server uses [gRPC-Gateway](https://grpc-ecosystem.github.io/grpc-gateway/) and `google.api.http` annotations in [vstorage/query.proto](../../proto/agoric/vstorage/query.proto) to automatically translate the protobuf-based RPC endpoints into URL paths that accept query parameters and emit JSON.
117
+ * /agoric/vstorage/capdata/$path?remotableValueFormat={object,string}[&mediaType=JSON%20Lines][&itemFormat=flat]
118
+ * /agoric/vstorage/children/$path
119
+ * /agoric/vstorage/data/$path
120
+
121
+ Example:
122
+ ```sh
123
+ $ curl -sS 'https://main.api.agoric.net/agoric/vstorage/children/published.committees'
124
+ {
125
+ "children": [
126
+ "Economic_Committee"
127
+ ],
128
+ "pagination": null
129
+ }
130
+ ```
131
+
132
+ ## Arbitrary-response HTTP interface
133
+
134
+ This depends upon appModule `LegacyQuerierHandler` functionality that is [removed from cosmos-sdk as of v0.47](https://github.com/cosmos/cosmos-sdk/blob/fa4d87ef7e6d87aaccc94c337ffd2fe90fcb7a9d/CHANGELOG.md#api-breaking-changes-3)
135
+
136
+ [legacy querier](./keeper/querier.go)
137
+ * /custom/vstorage/children/$path
138
+ * /custom/vstorage/data/$path