Change IBCContractKeeper interface, code builds

This commit is contained in:
Ethan Frey
2021-07-28 22:11:27 +02:00
parent 0dbcef0d55
commit cf854947e9
3 changed files with 63 additions and 79 deletions

View File

@@ -43,13 +43,18 @@ func (i IBCHandler) OnChanOpenInit(
return sdkerrors.Wrapf(err, "contract port id")
}
err = i.keeper.OnOpenChannel(ctx, contractAddr, wasmvmtypes.IBCChannel{
msg := wasmvmtypes.IBCChannelOpenMsg{
OpenInit: &wasmvmtypes.IBCOpenInit{
Channel: wasmvmtypes.IBCChannel{
Endpoint: wasmvmtypes.IBCEndpoint{PortID: portID, ChannelID: channelID},
CounterpartyEndpoint: wasmvmtypes.IBCEndpoint{PortID: counterParty.PortId, ChannelID: counterParty.ChannelId},
Order: order.String(),
Version: version,
ConnectionID: connectionHops[0], // At the moment this list must be of length 1. In the future multi-hop channels may be supported.
}, "")
},
},
}
err = i.keeper.OnOpenChannel(ctx, contractAddr, msg)
if err != nil {
return err
}
@@ -80,13 +85,20 @@ func (i IBCHandler) OnChanOpenTry(
return sdkerrors.Wrapf(err, "contract port id")
}
err = i.keeper.OnOpenChannel(ctx, contractAddr, wasmvmtypes.IBCChannel{
msg := wasmvmtypes.IBCChannelOpenMsg{
OpenTry: &wasmvmtypes.IBCOpenTry{
Channel: wasmvmtypes.IBCChannel{
Endpoint: wasmvmtypes.IBCEndpoint{PortID: portID, ChannelID: channelID},
CounterpartyEndpoint: wasmvmtypes.IBCEndpoint{PortID: counterParty.PortId, ChannelID: counterParty.ChannelId},
Order: order.String(),
Version: version,
ConnectionID: connectionHops[0], // At the moment this list must be of length 1. In the future multi-hop channels may be supported.
}, counterpartyVersion)
},
CounterpartyVersion: counterpartyVersion,
},
}
err = i.keeper.OnOpenChannel(ctx, contractAddr, msg)
if err != nil {
return err
}
@@ -117,7 +129,13 @@ func (i IBCHandler) OnChanOpenAck(
if !ok {
return sdkerrors.Wrapf(channeltypes.ErrChannelNotFound, "port ID (%s) channel ID (%s)", portID, channelID)
}
return i.keeper.OnConnectChannel(ctx, contractAddr, toWasmVMChannel(portID, channelID, channelInfo), counterpartyVersion)
msg := wasmvmtypes.IBCChannelConnectMsg{
OpenAck: &wasmvmtypes.IBCOpenAck{
Channel: toWasmVMChannel(portID, channelID, channelInfo),
CounterpartyVersion: counterpartyVersion,
},
}
return i.keeper.OnConnectChannel(ctx, contractAddr, msg)
}
// OnChanOpenConfirm implements the IBCModule interface
@@ -130,7 +148,12 @@ func (i IBCHandler) OnChanOpenConfirm(ctx sdk.Context, portID, channelID string)
if !ok {
return sdkerrors.Wrapf(channeltypes.ErrChannelNotFound, "port ID (%s) channel ID (%s)", portID, channelID)
}
return i.keeper.OnConnectChannel(ctx, contractAddr, toWasmVMChannel(portID, channelID, channelInfo), "")
msg := wasmvmtypes.IBCChannelConnectMsg{
OpenConfirm: &wasmvmtypes.IBCOpenConfirm{
Channel: toWasmVMChannel(portID, channelID, channelInfo),
},
}
return i.keeper.OnConnectChannel(ctx, contractAddr, msg)
}
// OnChanCloseInit implements the IBCModule interface
@@ -144,7 +167,10 @@ func (i IBCHandler) OnChanCloseInit(ctx sdk.Context, portID, channelID string) e
return sdkerrors.Wrapf(channeltypes.ErrChannelNotFound, "port ID (%s) channel ID (%s)", portID, channelID)
}
err = i.keeper.OnCloseChannel(ctx, contractAddr, toWasmVMChannel(portID, channelID, channelInfo), false)
msg := wasmvmtypes.IBCChannelCloseMsg{
CloseInit: &wasmvmtypes.IBCCloseInit{Channel: toWasmVMChannel(portID, channelID, channelInfo)},
}
err = i.keeper.OnCloseChannel(ctx, contractAddr, msg)
if err != nil {
return err
}
@@ -165,7 +191,10 @@ func (i IBCHandler) OnChanCloseConfirm(ctx sdk.Context, portID, channelID string
return sdkerrors.Wrapf(channeltypes.ErrChannelNotFound, "port ID (%s) channel ID (%s)", portID, channelID)
}
err = i.keeper.OnCloseChannel(ctx, contractAddr, toWasmVMChannel(portID, channelID, channelInfo), true)
msg := wasmvmtypes.IBCChannelCloseMsg{
CloseConfirm: &wasmvmtypes.IBCCloseConfirm{Channel: toWasmVMChannel(portID, channelID, channelInfo)},
}
err = i.keeper.OnCloseChannel(ctx, contractAddr, msg)
if err != nil {
return err
}
@@ -193,7 +222,8 @@ func (i IBCHandler) OnRecvPacket(
if err != nil {
return nil, nil, sdkerrors.Wrapf(err, "contract port id")
}
ack, err := i.keeper.OnRecvPacket(ctx, contractAddr, newIBCPacket(packet))
msg := wasmvmtypes.IBCPacketReceiveMsg{Packet: newIBCPacket(packet)}
ack, err := i.keeper.OnRecvPacket(ctx, contractAddr, msg)
if err != nil {
return nil, nil, err
}
@@ -230,7 +260,8 @@ func (i IBCHandler) OnTimeoutPacket(ctx sdk.Context, packet channeltypes.Packet)
if err != nil {
return nil, sdkerrors.Wrapf(err, "contract port id")
}
err = i.keeper.OnTimeoutPacket(ctx, contractAddr, newIBCPacket(packet))
msg := wasmvmtypes.IBCPacketTimeoutMsg{Packet: newIBCPacket(packet)}
err = i.keeper.OnTimeoutPacket(ctx, contractAddr, msg)
if err != nil {
return nil, err
}

View File

@@ -9,6 +9,8 @@ import (
"time"
)
var _ types.IBCContractKeeper = (*Keeper)(nil)
// OnOpenChannel calls the contract to participate in the IBC channel handshake step.
// In the IBC protocol this is either the `Channel Open Init` event on the initiating chain or
// `Channel Open Try` on the counterparty chain.
@@ -17,9 +19,7 @@ import (
func (k Keeper) OnOpenChannel(
ctx sdk.Context,
contractAddr sdk.AccAddress,
channel wasmvmtypes.IBCChannel,
// this is unset on init, set on try
counterpartyVersion string,
msg wasmvmtypes.IBCChannelOpenMsg,
) error {
defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "ibc-open-channel")
@@ -31,18 +31,6 @@ func (k Keeper) OnOpenChannel(
env := types.NewEnv(ctx, contractAddr)
querier := k.newQueryHandler(ctx, contractAddr)
msg := wasmvmtypes.IBCChannelOpenMsg{}
if counterpartyVersion == "" {
msg.OpenInit = &wasmvmtypes.IBCOpenInit{
Channel: channel,
}
} else {
msg.OpenTry = &wasmvmtypes.IBCOpenTry{
Channel: channel,
CounterpartyVersion: counterpartyVersion,
}
}
gas := k.runtimeGasForContract(ctx)
gasUsed, execErr := k.wasmVM.IBCChannelOpen(codeInfo.CodeHash, env, msg, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas, costJsonDeserialization)
k.consumeRuntimeGas(ctx, gasUsed)
@@ -63,9 +51,7 @@ func (k Keeper) OnOpenChannel(
func (k Keeper) OnConnectChannel(
ctx sdk.Context,
contractAddr sdk.AccAddress,
channel wasmvmtypes.IBCChannel,
// this is set on ack, unset on confirm
counterpartyVersion string,
msg wasmvmtypes.IBCChannelConnectMsg,
) error {
defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "ibc-connect-channel")
contractInfo, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddr)
@@ -76,18 +62,6 @@ func (k Keeper) OnConnectChannel(
env := types.NewEnv(ctx, contractAddr)
querier := k.newQueryHandler(ctx, contractAddr)
msg := wasmvmtypes.IBCChannelConnectMsg{}
if counterpartyVersion == "" {
msg.OpenConfirm = &wasmvmtypes.IBCOpenConfirm{
Channel: channel,
}
} else {
msg.OpenAck = &wasmvmtypes.IBCOpenAck{
Channel: channel,
CounterpartyVersion: counterpartyVersion,
}
}
gas := k.runtimeGasForContract(ctx)
res, gasUsed, execErr := k.wasmVM.IBCChannelConnect(codeInfo.CodeHash, env, msg, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas, costJsonDeserialization)
k.consumeRuntimeGas(ctx, gasUsed)
@@ -107,9 +81,7 @@ func (k Keeper) OnConnectChannel(
func (k Keeper) OnCloseChannel(
ctx sdk.Context,
contractAddr sdk.AccAddress,
channel wasmvmtypes.IBCChannel,
// false for init, true for confirm
confirm bool,
msg wasmvmtypes.IBCChannelCloseMsg,
) error {
defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "ibc-close-channel")
@@ -121,17 +93,6 @@ func (k Keeper) OnCloseChannel(
params := types.NewEnv(ctx, contractAddr)
querier := k.newQueryHandler(ctx, contractAddr)
msg := wasmvmtypes.IBCChannelCloseMsg{}
if confirm {
msg.CloseConfirm = &wasmvmtypes.IBCCloseConfirm{
Channel: channel,
}
} else {
msg.CloseInit = &wasmvmtypes.IBCCloseInit{
Channel: channel,
}
}
gas := k.runtimeGasForContract(ctx)
res, gasUsed, execErr := k.wasmVM.IBCChannelClose(codeInfo.CodeHash, params, msg, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas, costJsonDeserialization)
k.consumeRuntimeGas(ctx, gasUsed)
@@ -151,7 +112,7 @@ func (k Keeper) OnCloseChannel(
func (k Keeper) OnRecvPacket(
ctx sdk.Context,
contractAddr sdk.AccAddress,
packet wasmvmtypes.IBCPacket,
msg wasmvmtypes.IBCPacketReceiveMsg,
) ([]byte, error) {
defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "ibc-recv-packet")
contractInfo, codeInfo, prefixStore, err := k.contractInstance(ctx, contractAddr)
@@ -161,7 +122,6 @@ func (k Keeper) OnRecvPacket(
env := types.NewEnv(ctx, contractAddr)
querier := k.newQueryHandler(ctx, contractAddr)
msg := wasmvmtypes.IBCPacketReceiveMsg{Packet: packet}
gas := k.runtimeGasForContract(ctx)
res, gasUsed, execErr := k.wasmVM.IBCPacketReceive(codeInfo.CodeHash, env, msg, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas, costJsonDeserialization)
@@ -209,7 +169,7 @@ func (k Keeper) OnAckPacket(
func (k Keeper) OnTimeoutPacket(
ctx sdk.Context,
contractAddr sdk.AccAddress,
packet wasmvmtypes.IBCPacket,
msg wasmvmtypes.IBCPacketTimeoutMsg,
) error {
defer telemetry.MeasureSince(time.Now(), "wasm", "contract", "ibc-timeout-packet")
@@ -220,7 +180,6 @@ func (k Keeper) OnTimeoutPacket(
env := types.NewEnv(ctx, contractAddr)
querier := k.newQueryHandler(ctx, contractAddr)
msg := wasmvmtypes.IBCPacketTimeoutMsg{Packet: packet}
gas := k.runtimeGasForContract(ctx)
res, gasUsed, execErr := k.wasmVM.IBCPacketTimeout(codeInfo.CodeHash, env, msg, prefixStore, cosmwasmAPI, querier, ctx.GasMeter(), gas, costJsonDeserialization)

View File

@@ -58,28 +58,22 @@ type IBCContractKeeper interface {
OnOpenChannel(
ctx sdk.Context,
contractAddr sdk.AccAddress,
channel wasmvmtypes.IBCChannel,
// this is unset on init, set on try
counterpartyVersion string,
msg wasmvmtypes.IBCChannelOpenMsg,
) error
OnConnectChannel(
ctx sdk.Context,
contractAddr sdk.AccAddress,
channel wasmvmtypes.IBCChannel,
// this is set on ack, unset on confirm
counterpartyVersion string,
msg wasmvmtypes.IBCChannelConnectMsg,
) error
OnCloseChannel(
ctx sdk.Context,
contractAddr sdk.AccAddress,
channel wasmvmtypes.IBCChannel,
// false for init, true for confirm
confirm bool,
msg wasmvmtypes.IBCChannelCloseMsg,
) error
OnRecvPacket(
ctx sdk.Context,
contractAddr sdk.AccAddress,
packet wasmvmtypes.IBCPacket,
msg wasmvmtypes.IBCPacketReceiveMsg,
) ([]byte, error)
OnAckPacket(
ctx sdk.Context,
@@ -89,7 +83,7 @@ type IBCContractKeeper interface {
OnTimeoutPacket(
ctx sdk.Context,
contractAddr sdk.AccAddress,
packet wasmvmtypes.IBCPacket,
msg wasmvmtypes.IBCPacketTimeoutMsg,
) error
// ClaimCapability allows the transfer module to claim a capability
//that IBC module passes to it