Skip to content

Commit

Permalink
add update on ica callback data type
Browse files Browse the repository at this point in the history
  • Loading branch information
antstalepresh committed Nov 24, 2023
1 parent 5f64082 commit 7553dd5
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 26 deletions.
26 changes: 20 additions & 6 deletions x/inter-tx/keeper/ibc_handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,9 +87,17 @@ func (k *Keeper) HandleAcknowledgement(ctx sdk.Context, packet channeltypes.Pack
errorText := ack.GetError()
var err error
if errorText != "" {
err = k.CallRegisteredICACallback(cacheCtx, packet, types.ResultCodeFailure, []byte(errorText))
err = k.CallRegisteredICACallback(cacheCtx, packet, types.IcaCallbackResult{
Error: &types.IcaCallbackError{
Error: errorText,
},
})
} else {
err = k.CallRegisteredICACallback(cacheCtx, packet, types.ResultCodeSuccess, ack.GetResult())
err = k.CallRegisteredICACallback(cacheCtx, packet, types.IcaCallbackResult{
Success: &types.IcaCallbackSuccess{
Data: ack.GetResult(),
},
})
}

if err != nil {
Expand All @@ -112,7 +120,9 @@ func (k *Keeper) HandleTimeout(ctx sdk.Context, packet channeltypes.Packet, rela
cacheCtx, writeFn, newGasMeter := k.createCachedContext(ctx)
defer k.outOfGasRecovery(ctx, newGasMeter, "timeout")

err := k.CallRegisteredICACallback(ctx, packet, types.ResultCodeTimeout, []byte{})
err := k.CallRegisteredICACallback(ctx, packet, types.IcaCallbackResult{
Timeout: &types.IcaCallbackTimeout{},
})
if err != nil {
k.Logger(ctx).Error("HandleTimeout: failed to Sudo contract on packet timeout", "port", packet.SourcePort, "error", err)
} else {
Expand Down Expand Up @@ -149,7 +159,11 @@ func (k *Keeper) HandleChanOpenAck(
defer k.outOfGasRecovery(ctx, newGasMeter, "timeout")

// If there's an associated callback function, execute it
_, err := k.SudoCallback(cacheCtx, callbackData, types.ResultCodeSuccess, []byte(counterpartyVersion))
_, err := k.SudoIcaCallback(cacheCtx, callbackData, types.IcaCallbackResult{
Success: &types.IcaCallbackSuccess{
Data: []byte(counterpartyVersion),
},
})
if err != nil {
k.Logger(ctx).Error("SudoCallback failure", "error", err)
} else {
Expand All @@ -161,7 +175,7 @@ func (k *Keeper) HandleChanOpenAck(
return nil
}

func (k Keeper) CallRegisteredICACallback(ctx sdk.Context, packet channeltypes.Packet, resultCode uint64, resultData []byte) error {
func (k Keeper) CallRegisteredICACallback(ctx sdk.Context, packet channeltypes.Packet, result types.IcaCallbackResult) error {
// Get the callback key and associated callback data from the packet
callbackDataKey := types.PacketID(packet.GetSourcePort(), packet.GetSourceChannel(), packet.Sequence)
callbackData, found := k.GetCallbackData(ctx, callbackDataKey)
Expand All @@ -172,7 +186,7 @@ func (k Keeper) CallRegisteredICACallback(ctx sdk.Context, packet channeltypes.P
}

// If there's an associated callback function, execute it
_, err := k.SudoCallback(ctx, callbackData, resultCode, resultData)
_, err := k.SudoIcaCallback(ctx, callbackData, result)
if err != nil {
return err
}
Expand Down
14 changes: 6 additions & 8 deletions x/inter-tx/keeper/sudo.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,10 @@ func (k Keeper) HasContractInfo(ctx sdk.Context, contractAddress sdk.AccAddress)
return k.wasmKeeper.HasContractInfo(ctx, contractAddress)
}

func (k Keeper) SudoCallback(
func (k Keeper) SudoIcaCallback(
ctx sdk.Context,
callbackData types.CallbackData,
resultCode uint64,
resultData []byte,
result types.IcaCallbackResult,
) ([]byte, error) {
contractAddr := sdk.MustAccAddressFromBech32(callbackData.Contract)

Expand All @@ -33,11 +32,10 @@ func (k Keeper) SudoCallback(
}

x := types.MessageCallback{}
x.Callback.ConnId = callbackData.ConnectionId
x.Callback.AccId = callbackData.AccountId
x.Callback.TxId = callbackData.TxId
x.Callback.ResultCode = resultCode
x.Callback.ResultData = resultData
x.IcaCallback.ConnId = callbackData.ConnectionId
x.IcaCallback.AccId = callbackData.AccountId
x.IcaCallback.TxId = callbackData.TxId
x.IcaCallback.Result = result

m, err := json.Marshal(x)
if err != nil {
Expand Down
34 changes: 22 additions & 12 deletions x/inter-tx/types/sudo.go
Original file line number Diff line number Diff line change
@@ -1,19 +1,29 @@
package types

type MessageCallback struct {
Callback Callback `json:"callback"`
IcaCallback IcaCallbackData `json:"ica_callback"`
}

type Callback struct {
ConnId string `json:"connection_id"`
AccId string `json:"account_id"`
TxId uint64 `json:"tx_id"`
ResultCode uint64 `json:"result_code"` // Success(0) | Failure(1) | Timeout(2)
ResultData []byte `json:"result_data"`
type IcaCallbackData struct {
ConnId string `json:"connection_id"`

Check warning on line 8 in x/inter-tx/types/sudo.go

View workflow job for this annotation

GitHub Actions / lint

var-naming: struct field ConnId should be ConnID (revive)
AccId string `json:"account_id"`

Check warning on line 9 in x/inter-tx/types/sudo.go

View workflow job for this annotation

GitHub Actions / lint

var-naming: struct field AccId should be AccID (revive)
TxId uint64 `json:"tx_id"`

Check warning on line 10 in x/inter-tx/types/sudo.go

View workflow job for this annotation

GitHub Actions / lint

var-naming: struct field TxId should be TxID (revive)
Result IcaCallbackResult `json:"result"`
}

var (
ResultCodeSuccess uint64 = 0
ResultCodeFailure uint64 = 1
ResultCodeTimeout uint64 = 2
)
type IcaCallbackResult struct {
Success *IcaCallbackSuccess `json:"success,omitempty"`
Error *IcaCallbackError `json:"error,omitempty"`
Timeout *IcaCallbackTimeout `json:"timeout,omitempty"`
}

type IcaCallbackSuccess struct {
Data []byte `json:"data"`
}

type IcaCallbackError struct {
Error string `json:"error"`
}

type IcaCallbackTimeout struct {

Check failure on line 28 in x/inter-tx/types/sudo.go

View workflow job for this annotation

GitHub Actions / lint

File is not `gofumpt`-ed (gofumpt)
}

0 comments on commit 7553dd5

Please sign in to comment.