Skip to content

Commit d767103

Browse files
authored
Merge pull request #247 from CosmWasm/cosmwasm-0.16
Cosmwasm 0.16
2 parents 0c245cf + 2631cc0 commit d767103

File tree

14 files changed

+287
-141
lines changed

14 files changed

+287
-141
lines changed

api/lib.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ func IBCChannelOpen(
369369
cache Cache,
370370
checksum []byte,
371371
env []byte,
372-
channel []byte,
372+
msg []byte,
373373
gasMeter *GasMeter,
374374
store KVStore,
375375
api *GoAPI,
@@ -381,8 +381,8 @@ func IBCChannelOpen(
381381
defer runtime.KeepAlive(checksum)
382382
e := makeView(env)
383383
defer runtime.KeepAlive(env)
384-
ch := makeView(channel)
385-
defer runtime.KeepAlive(channel)
384+
m := makeView(msg)
385+
defer runtime.KeepAlive(msg)
386386

387387
// set up a new stack frame to handle iterators
388388
counter := startContract()
@@ -395,7 +395,7 @@ func IBCChannelOpen(
395395
var gasUsed cu64
396396
errmsg := newUnmanagedVector(nil)
397397

398-
res, err := C.ibc_channel_open(cache.ptr, cs, e, ch, db, a, q, cu64(gasLimit), cbool(printDebug), &gasUsed, &errmsg)
398+
res, err := C.ibc_channel_open(cache.ptr, cs, e, m, db, a, q, cu64(gasLimit), cbool(printDebug), &gasUsed, &errmsg)
399399
if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success {
400400
// Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0.
401401
return nil, uint64(gasUsed), errorWithMessage(err, errmsg)
@@ -407,7 +407,7 @@ func IBCChannelConnect(
407407
cache Cache,
408408
checksum []byte,
409409
env []byte,
410-
channel []byte,
410+
msg []byte,
411411
gasMeter *GasMeter,
412412
store KVStore,
413413
api *GoAPI,
@@ -419,8 +419,8 @@ func IBCChannelConnect(
419419
defer runtime.KeepAlive(checksum)
420420
e := makeView(env)
421421
defer runtime.KeepAlive(env)
422-
ch := makeView(channel)
423-
defer runtime.KeepAlive(channel)
422+
m := makeView(msg)
423+
defer runtime.KeepAlive(msg)
424424

425425
// set up a new stack frame to handle iterators
426426
counter := startContract()
@@ -433,7 +433,7 @@ func IBCChannelConnect(
433433
var gasUsed cu64
434434
errmsg := newUnmanagedVector(nil)
435435

436-
res, err := C.ibc_channel_connect(cache.ptr, cs, e, ch, db, a, q, cu64(gasLimit), cbool(printDebug), &gasUsed, &errmsg)
436+
res, err := C.ibc_channel_connect(cache.ptr, cs, e, m, db, a, q, cu64(gasLimit), cbool(printDebug), &gasUsed, &errmsg)
437437
if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success {
438438
// Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0.
439439
return nil, uint64(gasUsed), errorWithMessage(err, errmsg)
@@ -445,7 +445,7 @@ func IBCChannelClose(
445445
cache Cache,
446446
checksum []byte,
447447
env []byte,
448-
channel []byte,
448+
msg []byte,
449449
gasMeter *GasMeter,
450450
store KVStore,
451451
api *GoAPI,
@@ -457,8 +457,8 @@ func IBCChannelClose(
457457
defer runtime.KeepAlive(checksum)
458458
e := makeView(env)
459459
defer runtime.KeepAlive(env)
460-
ch := makeView(channel)
461-
defer runtime.KeepAlive(channel)
460+
m := makeView(msg)
461+
defer runtime.KeepAlive(msg)
462462

463463
// set up a new stack frame to handle iterators
464464
counter := startContract()
@@ -471,7 +471,7 @@ func IBCChannelClose(
471471
var gasUsed cu64
472472
errmsg := newUnmanagedVector(nil)
473473

474-
res, err := C.ibc_channel_close(cache.ptr, cs, e, ch, db, a, q, cu64(gasLimit), cbool(printDebug), &gasUsed, &errmsg)
474+
res, err := C.ibc_channel_close(cache.ptr, cs, e, m, db, a, q, cu64(gasLimit), cbool(printDebug), &gasUsed, &errmsg)
475475
if err != nil && err.(syscall.Errno) != C.ErrnoValue_Success {
476476
// Depending on the nature of the error, `gasUsed` will either have a meaningful value, or just 0.
477477
return nil, uint64(gasUsed), errorWithMessage(err, errmsg)

api/lib_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ func TestGetMetrics(t *testing.T) {
208208
assert.Equal(t, &types.Metrics{
209209
HitsFsCache: 1,
210210
ElementsMemoryCache: 1,
211-
SizeMemoryCache: 2953616,
211+
SizeMemoryCache: 2953668,
212212
}, metrics)
213213

214214
// Instantiate 2
@@ -223,7 +223,7 @@ func TestGetMetrics(t *testing.T) {
223223
HitsMemoryCache: 1,
224224
HitsFsCache: 1,
225225
ElementsMemoryCache: 1,
226-
SizeMemoryCache: 2953616,
226+
SizeMemoryCache: 2953668,
227227
}, metrics)
228228

229229
// Pin
@@ -238,8 +238,8 @@ func TestGetMetrics(t *testing.T) {
238238
HitsFsCache: 1,
239239
ElementsPinnedMemoryCache: 1,
240240
ElementsMemoryCache: 1,
241-
SizePinnedMemoryCache: 2953616,
242-
SizeMemoryCache: 2953616,
241+
SizePinnedMemoryCache: 2953668,
242+
SizeMemoryCache: 2953668,
243243
}, metrics)
244244

245245
// Instantiate 3
@@ -256,8 +256,8 @@ func TestGetMetrics(t *testing.T) {
256256
HitsFsCache: 1,
257257
ElementsPinnedMemoryCache: 1,
258258
ElementsMemoryCache: 1,
259-
SizePinnedMemoryCache: 2953616,
260-
SizeMemoryCache: 2953616,
259+
SizePinnedMemoryCache: 2953668,
260+
SizeMemoryCache: 2953668,
261261
}, metrics)
262262

263263
// Unpin
@@ -274,7 +274,7 @@ func TestGetMetrics(t *testing.T) {
274274
ElementsPinnedMemoryCache: 0,
275275
ElementsMemoryCache: 1,
276276
SizePinnedMemoryCache: 0,
277-
SizeMemoryCache: 2953616,
277+
SizeMemoryCache: 2953668,
278278
}, metrics)
279279

280280
// Instantiate 4
@@ -292,7 +292,7 @@ func TestGetMetrics(t *testing.T) {
292292
ElementsPinnedMemoryCache: 0,
293293
ElementsMemoryCache: 1,
294294
SizePinnedMemoryCache: 0,
295-
SizeMemoryCache: 2953616,
295+
SizeMemoryCache: 2953668,
296296
}, metrics)
297297
}
298298

api/mocks.go

Lines changed: 84 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,65 @@ func MockIBCChannel(channelID string, ordering types.IBCOrder, ibcVersion string
6868
PortID: "their_port",
6969
ChannelID: "channel-7",
7070
},
71-
Order: ordering,
72-
Version: ibcVersion,
73-
CounterpartyVersion: ibcVersion,
74-
ConnectionID: "connection-3",
71+
Order: ordering,
72+
Version: ibcVersion,
73+
ConnectionID: "connection-3",
74+
}
75+
}
76+
77+
func MockIBCChannelOpenInit(channelID string, ordering types.IBCOrder, ibcVersion string) types.IBCChannelOpenMsg {
78+
return types.IBCChannelOpenMsg{
79+
OpenInit: &types.IBCOpenInit{
80+
Channel: MockIBCChannel(channelID, ordering, ibcVersion),
81+
},
82+
OpenTry: nil,
83+
}
84+
}
85+
86+
func MockIBCChannelOpenTry(channelID string, ordering types.IBCOrder, ibcVersion string) types.IBCChannelOpenMsg {
87+
return types.IBCChannelOpenMsg{
88+
OpenInit: nil,
89+
OpenTry: &types.IBCOpenTry{
90+
Channel: MockIBCChannel(channelID, ordering, ibcVersion),
91+
CounterpartyVersion: ibcVersion,
92+
},
93+
}
94+
}
95+
96+
func MockIBCChannelConnectAck(channelID string, ordering types.IBCOrder, ibcVersion string) types.IBCChannelConnectMsg {
97+
return types.IBCChannelConnectMsg{
98+
OpenAck: &types.IBCOpenAck{
99+
Channel: MockIBCChannel(channelID, ordering, ibcVersion),
100+
CounterpartyVersion: ibcVersion,
101+
},
102+
OpenConfirm: nil,
103+
}
104+
}
105+
106+
func MockIBCChannelConnectConfirm(channelID string, ordering types.IBCOrder, ibcVersion string) types.IBCChannelConnectMsg {
107+
return types.IBCChannelConnectMsg{
108+
OpenAck: nil,
109+
OpenConfirm: &types.IBCOpenConfirm{
110+
Channel: MockIBCChannel(channelID, ordering, ibcVersion),
111+
},
112+
}
113+
}
114+
115+
func MockIBCChannelCloseInit(channelID string, ordering types.IBCOrder, ibcVersion string) types.IBCChannelCloseMsg {
116+
return types.IBCChannelCloseMsg{
117+
CloseInit: &types.IBCCloseInit{
118+
Channel: MockIBCChannel(channelID, ordering, ibcVersion),
119+
},
120+
CloseConfirm: nil,
121+
}
122+
}
123+
124+
func MockIBCChannelCloseConfirm(channelID string, ordering types.IBCOrder, ibcVersion string) types.IBCChannelCloseMsg {
125+
return types.IBCChannelCloseMsg{
126+
CloseInit: nil,
127+
CloseConfirm: &types.IBCCloseConfirm{
128+
Channel: MockIBCChannel(channelID, ordering, ibcVersion),
129+
},
75130
}
76131
}
77132

@@ -96,6 +151,31 @@ func MockIBCPacket(myChannel string, data []byte) types.IBCPacket {
96151
}
97152
}
98153

154+
func MockIBCPacketReceive(myChannel string, data []byte) types.IBCPacketReceiveMsg {
155+
return types.IBCPacketReceiveMsg{
156+
Packet: MockIBCPacket(myChannel, data),
157+
}
158+
}
159+
160+
func MockIBCPacketAck(myChannel string, data []byte, ack types.IBCAcknowledgement) types.IBCPacketAckMsg {
161+
packet := MockIBCPacket(myChannel, data)
162+
163+
return types.IBCPacketAckMsg{
164+
Ack: types.IBCAcknowledgementWithPacket{
165+
Acknowledgement: ack,
166+
OriginalPacket: packet,
167+
},
168+
}
169+
}
170+
171+
func MockIBCPacketTimeout(myChannel string, data []byte) types.IBCPacketTimeoutMsg {
172+
packet := MockIBCPacket(myChannel, data)
173+
174+
return types.IBCPacketTimeoutMsg{
175+
Packet: packet,
176+
}
177+
}
178+
99179
/*** Mock GasMeter ****/
100180
// This code is borrowed from Cosmos-SDK store/types/gas.go
101181

api/testdata/hackatom.wasm

56 Bytes
Binary file not shown.

api/testdata/ibc_reflect.wasm

20.4 KB
Binary file not shown.

api/testdata/queue.wasm

3 Bytes
Binary file not shown.

api/testdata/reflect.wasm

-865 Bytes
Binary file not shown.

ibc_test.go

Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,10 @@ func TestIBCHandshake(t *testing.T) {
9898
// instantiate
9999
env := api.MockEnv()
100100
info := api.MockInfo("creator", nil)
101-
msg := IBCInstantiateMsg{
101+
init_msg := IBCInstantiateMsg{
102102
ReflectCodeID: REFLECT_ID,
103103
}
104-
ires, _, err := vm.Instantiate(checksum, env, info, toBytes(t, msg), store, *goapi, querier, gasMeter1, TESTING_GAS_LIMIT, deserCost)
104+
ires, _, err := vm.Instantiate(checksum, env, info, toBytes(t, init_msg), store, *goapi, querier, gasMeter1, TESTING_GAS_LIMIT, deserCost)
105105
require.NoError(t, err)
106106
require.Equal(t, 0, len(ires.Messages))
107107

@@ -110,25 +110,34 @@ func TestIBCHandshake(t *testing.T) {
110110
store.SetGasMeter(gasMeter2)
111111
env = api.MockEnv()
112112
// fails on bad version
113-
channel := api.MockIBCChannel(CHANNEL_ID, types.Ordered, "random-garbage")
114-
_, err = vm.IBCChannelOpen(checksum, env, channel, store, *goapi, querier, gasMeter2, TESTING_GAS_LIMIT, deserCost)
113+
openMsg := api.MockIBCChannelOpenInit(CHANNEL_ID, types.Ordered, "random-garbage")
114+
_, err = vm.IBCChannelOpen(checksum, env, openMsg, store, *goapi, querier, gasMeter2, TESTING_GAS_LIMIT, deserCost)
115115
require.Error(t, err)
116116
// passes on good version
117-
channel = api.MockIBCChannel(CHANNEL_ID, types.Ordered, IBC_VERSION)
118-
channel.CounterpartyVersion = ""
119-
_, err = vm.IBCChannelOpen(checksum, env, channel, store, *goapi, querier, gasMeter2, TESTING_GAS_LIMIT, deserCost)
117+
openMsg = api.MockIBCChannelOpenInit(CHANNEL_ID, types.Ordered, IBC_VERSION)
118+
_, err = vm.IBCChannelOpen(checksum, env, openMsg, store, *goapi, querier, gasMeter2, TESTING_GAS_LIMIT, deserCost)
120119
require.NoError(t, err)
121120

122121
// channel connect
123122
gasMeter3 := api.NewMockGasMeter(TESTING_GAS_LIMIT)
124123
store.SetGasMeter(gasMeter3)
125124
env = api.MockEnv()
126125
// completes and dispatches message to create reflect contract
127-
channel = api.MockIBCChannel(CHANNEL_ID, types.Ordered, IBC_VERSION)
128-
res, _, err := vm.IBCChannelConnect(checksum, env, channel, store, *goapi, querier, gasMeter2, TESTING_GAS_LIMIT, deserCost)
126+
connectMsg := api.MockIBCChannelConnectAck(CHANNEL_ID, types.Ordered, IBC_VERSION)
127+
res, _, err := vm.IBCChannelConnect(checksum, env, connectMsg, store, *goapi, querier, gasMeter2, TESTING_GAS_LIMIT, deserCost)
129128
require.NoError(t, err)
130129
require.Equal(t, 1, len(res.Messages))
131130

131+
// check for the expected custom event
132+
expected_events := []types.Event{types.Event{
133+
Type: "ibc",
134+
Attributes: []types.EventAttribute{types.EventAttribute{
135+
Key: "channel",
136+
Value: "connect",
137+
}},
138+
}}
139+
require.Equal(t, expected_events, res.Events)
140+
132141
// make sure it read the balance properly and we got 250 atoms
133142
dispatch := res.Messages[0].Msg
134143
require.NotNil(t, dispatch.Wasm, "%#v", dispatch)
@@ -169,17 +178,16 @@ func TestIBCPacketDispatch(t *testing.T) {
169178
// channel open
170179
gasMeter2 := api.NewMockGasMeter(TESTING_GAS_LIMIT)
171180
store.SetGasMeter(gasMeter2)
172-
channel := api.MockIBCChannel(CHANNEL_ID, types.Ordered, IBC_VERSION)
173-
channel.CounterpartyVersion = ""
174-
_, err = vm.IBCChannelOpen(checksum, env, channel, store, *goapi, querier, gasMeter2, TESTING_GAS_LIMIT, deserCost)
181+
openMsg := api.MockIBCChannelOpenInit(CHANNEL_ID, types.Ordered, IBC_VERSION)
182+
_, err = vm.IBCChannelOpen(checksum, env, openMsg, store, *goapi, querier, gasMeter2, TESTING_GAS_LIMIT, deserCost)
175183
require.NoError(t, err)
176184

177185
// channel connect
178186
gasMeter3 := api.NewMockGasMeter(TESTING_GAS_LIMIT)
179187
store.SetGasMeter(gasMeter3)
180188
// completes and dispatches message to create reflect contract
181-
channel = api.MockIBCChannel(CHANNEL_ID, types.Ordered, IBC_VERSION)
182-
res, _, err := vm.IBCChannelConnect(checksum, env, channel, store, *goapi, querier, gasMeter3, TESTING_GAS_LIMIT, deserCost)
189+
connectMsg := api.MockIBCChannelConnectAck(CHANNEL_ID, types.Ordered, IBC_VERSION)
190+
res, _, err := vm.IBCChannelConnect(checksum, env, connectMsg, store, *goapi, querier, gasMeter3, TESTING_GAS_LIMIT, deserCost)
183191
require.NoError(t, err)
184192
require.Equal(t, 1, len(res.Messages))
185193
id := res.Messages[0].ID
@@ -236,8 +244,8 @@ func TestIBCPacketDispatch(t *testing.T) {
236244
}},
237245
},
238246
}
239-
packet := api.MockIBCPacket(CHANNEL_ID, toBytes(t, ibcMsg))
240-
pres, _, err := vm.IBCPacketReceive(checksum, env, packet, store, *goapi, querier, gasMeter5, TESTING_GAS_LIMIT, deserCost)
247+
msg := api.MockIBCPacketReceive(CHANNEL_ID, toBytes(t, ibcMsg))
248+
pres, _, err := vm.IBCPacketReceive(checksum, env, msg, store, *goapi, querier, gasMeter5, TESTING_GAS_LIMIT, deserCost)
241249
require.NoError(t, err)
242250

243251
// assert app-level success
@@ -246,13 +254,23 @@ func TestIBCPacketDispatch(t *testing.T) {
246254
require.Empty(t, ack.Err)
247255

248256
// error on message from another channel
249-
packet2 := api.MockIBCPacket("no-such-channel", toBytes(t, ibcMsg))
250-
pres2, _, err := vm.IBCPacketReceive(checksum, env, packet2, store, *goapi, querier, gasMeter5, TESTING_GAS_LIMIT, deserCost)
257+
msg2 := api.MockIBCPacketReceive("no-such-channel", toBytes(t, ibcMsg))
258+
pres2, _, err := vm.IBCPacketReceive(checksum, env, msg2, store, *goapi, querier, gasMeter5, TESTING_GAS_LIMIT, deserCost)
251259
require.NoError(t, err)
252260
// assert app-level failure
253261
var ack2 AcknowledgeDispatch
254262
err = json.Unmarshal(pres2.Acknowledgement, &ack2)
255263
require.Equal(t, "invalid packet: cosmwasm_std::addresses::Addr not found", ack2.Err)
264+
265+
// check for the expected custom event
266+
expected_events := []types.Event{types.Event{
267+
Type: "ibc",
268+
Attributes: []types.EventAttribute{types.EventAttribute{
269+
Key: "packet",
270+
Value: "receive",
271+
}},
272+
}}
273+
require.Equal(t, expected_events, pres2.Events)
256274
}
257275

258276
func TestAnalyzeCode(t *testing.T) {

0 commit comments

Comments
 (0)