@agoric/cosmos 0.35.0-u18.5 → 0.35.0-u18a.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agoric/cosmos",
3
- "version": "0.35.0-u18.5",
3
+ "version": "0.35.0-u18a.0",
4
4
  "description": "Connect JS to the Cosmos blockchain SDK",
5
5
  "parsers": {
6
6
  "js": "mjs"
@@ -39,5 +39,5 @@
39
39
  "typeCoverage": {
40
40
  "atLeast": 0
41
41
  },
42
- "gitHead": "f8c45b8a2e29a51522a81a6692af25b2d7f6b50f"
42
+ "gitHead": "4e4d2b4dedc5a268178712fc6beb89496518480a"
43
43
  }
@@ -14,11 +14,15 @@ import (
14
14
  )
15
15
 
16
16
  type AddressRole string
17
+ type PacketOrigin string
17
18
 
18
19
  const (
19
20
  RoleSender AddressRole = "Sender"
20
21
  RoleReceiver AddressRole = "Receiver"
21
22
 
23
+ PacketSrc PacketOrigin = "src"
24
+ PacketDst PacketOrigin = "dst"
25
+
22
26
  AddressHookVersion = 0
23
27
  BaseAddressLengthBytes = 2
24
28
  )
@@ -173,17 +177,12 @@ func extractBaseTransferData(transferData transfertypes.FungibleTokenPacketData,
173
177
  // If newPacket is not nil, it is populated with a new transfer packet whose
174
178
  // corresponding Sender or Receiver is replaced with the extracted base address.
175
179
  func ExtractBaseAddressFromPacket(cdc codec.Codec, packet ibcexported.PacketI, role AddressRole, newPacket *channeltypes.Packet) (string, error) {
176
- transferData := transfertypes.FungibleTokenPacketData{}
177
- if err := cdc.UnmarshalJSON(packet.GetData(), &transferData); err != nil {
178
- return "", err
179
- }
180
-
181
- var newTransferData *transfertypes.FungibleTokenPacketData
180
+ var newDataP *[]byte
182
181
  if newPacket != nil {
183
- // Capture the transfer data for the new packet.
184
- newTransferData = &transfertypes.FungibleTokenPacketData{}
182
+ // Capture the data for the new packet.
183
+ newDataP = new([]byte)
185
184
  }
186
- target, err := extractBaseTransferData(transferData, role, newTransferData)
185
+ target, err := ExtractBaseAddressFromData(cdc, packet.GetData(), role, newDataP)
187
186
  if err != nil {
188
187
  return target, err
189
188
  }
@@ -193,21 +192,51 @@ func ExtractBaseAddressFromPacket(cdc codec.Codec, packet ibcexported.PacketI, r
193
192
  }
194
193
 
195
194
  // Create a new packet with the new transfer packet data.
196
- // Re-serialize the packet data with the base addresses.
197
- newData, err := cdc.MarshalJSON(newTransferData)
198
- if err != nil {
199
- return target, err
200
- }
201
-
202
- // Create the new packet.
203
- th := packet.GetTimeoutHeight()
204
195
  *newPacket = channeltypes.NewPacket(
205
- newData, packet.GetSequence(),
196
+ *newDataP, packet.GetSequence(),
206
197
  packet.GetSourcePort(), packet.GetSourceChannel(),
207
198
  packet.GetDestPort(), packet.GetDestChannel(),
208
- clienttypes.NewHeight(th.GetRevisionNumber(), th.GetRevisionHeight()),
199
+ clienttypes.MustParseHeight(packet.GetTimeoutHeight().String()),
209
200
  packet.GetTimeoutTimestamp(),
210
201
  )
211
202
 
212
203
  return target, nil
213
204
  }
205
+
206
+ // ExtractBaseAddressFromData returns the base address from a transfer packet's data,
207
+ // either Sender (if role is RoleSender) or Receiver (if role is RoleReceiver).
208
+ // Errors in determining the base address are ignored... we then assume the base
209
+ // address is exactly the original address.
210
+ // If newDataP is not nil, it is populated with new transfer packet data whose
211
+ // corresponding Sender or Receiver is replaced with the extracted base address.
212
+ func ExtractBaseAddressFromData(cdc codec.Codec, data []byte, role AddressRole, newDataP *[]byte) (string, error) {
213
+ transferData := transfertypes.FungibleTokenPacketData{}
214
+
215
+ if err := cdc.UnmarshalJSON(data, &transferData); err != nil {
216
+ return "", err
217
+ }
218
+
219
+ var newTransferData *transfertypes.FungibleTokenPacketData
220
+ if newDataP != nil {
221
+ // Capture the transfer data for the new packet data.
222
+ newTransferData = &transfertypes.FungibleTokenPacketData{}
223
+ }
224
+ target, err := extractBaseTransferData(transferData, role, newTransferData)
225
+ if err != nil {
226
+ return target, err
227
+ }
228
+
229
+ if newDataP == nil {
230
+ return target, nil
231
+ }
232
+
233
+ // Reuse the original data if we didn't transform it.
234
+ if transferData == *newTransferData {
235
+ *newDataP = bytes.Clone(data)
236
+ } else {
237
+ // Re-serialize the packet data with the new base address.
238
+ *newDataP = newTransferData.GetBytes()
239
+ }
240
+
241
+ return target, nil
242
+ }
@@ -171,8 +171,7 @@ func TestExtractBaseAddressFromPacket(t *testing.T) {
171
171
  tc := tc
172
172
  t.Run(tc.name, func(t *testing.T) {
173
173
  ftPacketData := transfertypes.NewFungibleTokenPacketData("denom", "100", tc.addrs[types.RoleSender].addr, tc.addrs[types.RoleReceiver].addr, "my-favourite-memo")
174
- packetBz, err := cdc.MarshalJSON(&ftPacketData)
175
- require.NoError(t, err)
174
+ packetBz := ftPacketData.GetBytes()
176
175
  packet := channeltypes.NewPacket(packetBz, 1234, "my-port", "my-channel", "their-port", "their-channel", clienttypes.NewHeight(133, 445), 10999)
177
176
 
178
177
  for role, addrs := range tc.addrs {
@@ -184,9 +183,13 @@ func TestExtractBaseAddressFromPacket(t *testing.T) {
184
183
  require.NoError(t, err)
185
184
  require.Equal(t, addrs.baseAddr, baseAddr)
186
185
 
187
- packetBaseAddr, err := types.ExtractBaseAddressFromPacket(cdc, packet, role, nil)
186
+ packetBaseAddr0, err := types.ExtractBaseAddressFromData(cdc, packet.GetData(), role, nil)
188
187
  require.NoError(t, err)
189
- require.Equal(t, addrs.baseAddr, packetBaseAddr)
188
+ require.Equal(t, addrs.baseAddr, packetBaseAddr0)
189
+
190
+ packetBaseAddr1, err := types.ExtractBaseAddressFromPacket(cdc, packet, role, nil)
191
+ require.NoError(t, err)
192
+ require.Equal(t, addrs.baseAddr, packetBaseAddr1)
190
193
 
191
194
  var newPacket channeltypes.Packet
192
195
  packetBaseAddr2, err := types.ExtractBaseAddressFromPacket(cdc, packet, role, &newPacket)
@@ -15,3 +15,11 @@ func GetActionQueueRecords(t *testing.T, ctx sdk.Context, swingsetKeeper keeper.
15
15
  actionQueueName := keeper.StoragePathActionQueue
16
16
  return vstoragetesting.GetQueueItems(ctx, vstorageKeeper, actionQueueName)
17
17
  }
18
+
19
+ // ResetActionQueue resets the action queue.
20
+ // This is a testing utility function.
21
+ func ResetActionQueue(t *testing.T, ctx sdk.Context, swingsetKeeper keeper.Keeper) error {
22
+ vstorageKeeper := keeper.GetVstorageKeeper(t, swingsetKeeper)
23
+ actionQueueName := keeper.StoragePathActionQueue
24
+ return vstoragetesting.ResetQueue(ctx, vstorageKeeper, actionQueueName)
25
+ }
@@ -113,10 +113,7 @@ func (k Keeper) ReceiveChanOpenInit(ctx sdk.Context, order channeltypes.Order, c
113
113
  func (k Keeper) ReceiveSendPacket(ctx sdk.Context, packet ibcexported.PacketI) (uint64, error) {
114
114
  sourcePort := packet.GetSourcePort()
115
115
  sourceChannel := packet.GetSourceChannel()
116
- timeoutHeight := packet.GetTimeoutHeight()
117
- timeoutRevisionNumber := timeoutHeight.GetRevisionNumber()
118
- timeoutRevisionHeight := timeoutHeight.GetRevisionHeight()
119
- clientTimeoutHeight := clienttypes.NewHeight(timeoutRevisionNumber, timeoutRevisionHeight)
116
+ timeoutHeight := clienttypes.MustParseHeight(packet.GetTimeoutHeight().String())
120
117
  timeoutTimestamp := packet.GetTimeoutTimestamp()
121
118
  data := packet.GetData()
122
119
 
@@ -125,7 +122,7 @@ func (k Keeper) ReceiveSendPacket(ctx sdk.Context, packet ibcexported.PacketI) (
125
122
  if !ok {
126
123
  return 0, sdkioerrors.Wrapf(channeltypes.ErrChannelCapabilityNotFound, "could not retrieve channel capability at: %s", capName)
127
124
  }
128
- return k.SendPacket(ctx, chanCap, sourcePort, sourceChannel, clientTimeoutHeight, timeoutTimestamp, data)
125
+ return k.SendPacket(ctx, chanCap, sourcePort, sourceChannel, timeoutHeight, timeoutTimestamp, data)
129
126
  }
130
127
 
131
128
  // SendPacket defines a wrapper function for the channel Keeper's function
@@ -12,11 +12,8 @@ import (
12
12
  )
13
13
 
14
14
  func reifyPacket(packet ibcexported.PacketI) channeltypes.Packet {
15
- height := packet.GetTimeoutHeight()
16
- ctHeight := clienttypes.Height{
17
- RevisionHeight: height.GetRevisionHeight(),
18
- RevisionNumber: height.GetRevisionNumber(),
19
- }
15
+
16
+ timeoutHeight := clienttypes.MustParseHeight(packet.GetTimeoutHeight().String())
20
17
  return channeltypes.Packet{
21
18
  Sequence: packet.GetSequence(),
22
19
  SourcePort: packet.GetSourcePort(),
@@ -24,7 +21,7 @@ func reifyPacket(packet ibcexported.PacketI) channeltypes.Packet {
24
21
  DestinationPort: packet.GetDestPort(),
25
22
  DestinationChannel: packet.GetDestChannel(),
26
23
  Data: packet.GetData(),
27
- TimeoutHeight: ctHeight,
24
+ TimeoutHeight: timeoutHeight,
28
25
  TimeoutTimestamp: packet.GetTimeoutTimestamp(),
29
26
  }
30
27
  }
@@ -15,7 +15,7 @@ import (
15
15
 
16
16
  var (
17
17
  _ vm.PortHandler = (*Receiver)(nil)
18
- _ exported.Acknowledgement = (*rawAcknowledgement)(nil)
18
+ _ exported.Acknowledgement = (*RawAcknowledgement)(nil)
19
19
  )
20
20
 
21
21
  type ReceiverImpl interface {
@@ -71,15 +71,21 @@ func orderToString(order channeltypes.Order) string {
71
71
  }
72
72
  }
73
73
 
74
- type rawAcknowledgement struct {
74
+ type RawAcknowledgement struct {
75
75
  data []byte
76
76
  }
77
77
 
78
- func (r rawAcknowledgement) Acknowledgement() []byte {
78
+ func NewRawAcknowledgement(data []byte) RawAcknowledgement {
79
+ return RawAcknowledgement{
80
+ data: data,
81
+ }
82
+ }
83
+
84
+ func (r RawAcknowledgement) Acknowledgement() []byte {
79
85
  return r.data
80
86
  }
81
87
 
82
- func (r rawAcknowledgement) Success() bool {
88
+ func (r RawAcknowledgement) Success() bool {
83
89
  return true
84
90
  }
85
91
 
@@ -137,7 +143,7 @@ func (ir Receiver) Receive(cctx context.Context, jsonRequest string) (jsonReply
137
143
  )
138
144
 
139
145
  case "receiveExecuted":
140
- ack := rawAcknowledgement{
146
+ ack := RawAcknowledgement{
141
147
  data: msg.Ack,
142
148
  }
143
149
  err = impl.ReceiveWriteAcknowledgement(ctx, msg.Packet, ack)
@@ -26,3 +26,9 @@ func GetQueueItems(ctx sdk.Context, vstorageKeeper keeper.Keeper, queuePath stri
26
26
  }
27
27
  return values, nil
28
28
  }
29
+
30
+ func ResetQueue(ctx sdk.Context, vstorageKeeper keeper.Keeper, queuePath string) error {
31
+ unlimitedCtx := ctx.WithGasMeter(sdk.NewInfiniteGasMeter())
32
+ vstorageKeeper.RemoveEntriesWithPrefix(unlimitedCtx, queuePath)
33
+ return nil
34
+ }
@@ -160,7 +160,11 @@ func (im IBCMiddleware) WriteAcknowledgement(
160
160
  packet exported.PacketI,
161
161
  ack exported.Acknowledgement,
162
162
  ) error {
163
- return im.vtransferKeeper.InterceptWriteAcknowledgement(ctx, chanCap, packet, ack)
163
+ syncAck, origPacket := im.vtransferKeeper.InterceptWriteAcknowledgement(ctx, chanCap, packet, ack)
164
+ if syncAck != nil {
165
+ return im.vtransferKeeper.WriteAcknowledgement(ctx, chanCap, origPacket, syncAck)
166
+ }
167
+ return nil
164
168
  }
165
169
 
166
170
  ///////////////////////////////////