@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/CHANGELOG.md +14 -0
- package/app/app.go +1 -1
- package/app/upgrade.go +4 -190
- package/git-revision.txt +1 -1
- package/go.mod +82 -71
- package/go.sum +200 -167
- package/package.json +2 -2
- package/types/address_hooks.go +48 -19
- package/types/address_hooks_test.go +7 -4
- package/x/swingset/testing/queue.go +8 -0
- package/x/vibc/keeper/keeper.go +2 -5
- package/x/vibc/keeper/triggers.go +3 -6
- package/x/vibc/types/receiver.go +11 -5
- package/x/vstorage/testing/queue.go +6 -0
- package/x/vtransfer/ibc_middleware.go +5 -1
- package/x/vtransfer/ibc_middleware_test.go +510 -148
- package/x/vtransfer/keeper/keeper.go +190 -27
- package/x/vtransfer/utils_test.go +111 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agoric/cosmos",
|
|
3
|
-
"version": "0.35.0-
|
|
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": "
|
|
42
|
+
"gitHead": "4e4d2b4dedc5a268178712fc6beb89496518480a"
|
|
43
43
|
}
|
package/types/address_hooks.go
CHANGED
|
@@ -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
|
-
|
|
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
|
|
184
|
-
|
|
182
|
+
// Capture the data for the new packet.
|
|
183
|
+
newDataP = new([]byte)
|
|
185
184
|
}
|
|
186
|
-
target, err :=
|
|
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
|
-
|
|
196
|
+
*newDataP, packet.GetSequence(),
|
|
206
197
|
packet.GetSourcePort(), packet.GetSourceChannel(),
|
|
207
198
|
packet.GetDestPort(), packet.GetDestChannel(),
|
|
208
|
-
clienttypes.
|
|
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
|
|
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
|
-
|
|
186
|
+
packetBaseAddr0, err := types.ExtractBaseAddressFromData(cdc, packet.GetData(), role, nil)
|
|
188
187
|
require.NoError(t, err)
|
|
189
|
-
require.Equal(t, addrs.baseAddr,
|
|
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
|
+
}
|
package/x/vibc/keeper/keeper.go
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
16
|
-
|
|
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:
|
|
24
|
+
TimeoutHeight: timeoutHeight,
|
|
28
25
|
TimeoutTimestamp: packet.GetTimeoutTimestamp(),
|
|
29
26
|
}
|
|
30
27
|
}
|
package/x/vibc/types/receiver.go
CHANGED
|
@@ -15,7 +15,7 @@ import (
|
|
|
15
15
|
|
|
16
16
|
var (
|
|
17
17
|
_ vm.PortHandler = (*Receiver)(nil)
|
|
18
|
-
_ exported.Acknowledgement = (*
|
|
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
|
|
74
|
+
type RawAcknowledgement struct {
|
|
75
75
|
data []byte
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
func (
|
|
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
|
|
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 :=
|
|
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
|
-
|
|
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
|
///////////////////////////////////
|