Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ADR 8 Interface and Packet Data Implementations #3287

Merged
merged 12 commits into from
Mar 29, 2023

Conversation

AdityaSripal
Copy link
Member

@AdityaSripal AdityaSripal commented Mar 13, 2023

Description

This PR introduces an optional interface that IBC applications can implement for their packet data. When implemented, middleware can target this interface in order to get the desired callback addresses on the source and dest chains.

There is also an additional method that allows the packet sender to define a UserDefinedGasLimit for how much the callback is allowed to consume. This came from conversations with @ValarDragon . However, for the moment the apps in ibc-go return 0, which is effectively a no-op

closes: #XXXX

Commit Message / Changelog Entry

type: commit message

see the guidelines for commit messages. (view raw markdown for examples)


Before we can merge this PR, please make sure that all the following items have been
checked off. If any of the checklist items are not applicable, please leave them but
write a little note why.

  • Targeted PR against correct branch (see CONTRIBUTING.md).
  • Linked to Github issue with discussion and accepted design OR link to spec that describes this work.
  • Code follows the module structure standards and Go style guide.
  • Wrote unit and integration tests.
  • Updated relevant documentation (docs/) or specification (x/<module>/spec/).
  • Added relevant godoc comments.
  • Provide a commit message to be used for the changelog entry in the PR description for review.
  • Re-reviewed Files changed in the Github PR explorer.
  • Review Codecov Report in the comment section below once CI passes.

@@ -47,6 +51,83 @@ func (iapd InterchainAccountPacketData) GetBytes() []byte {
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&iapd))
}

/**

ADR-8 CallbackPacketData implementation
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this the right place for this documentation? Should I instead have it in a README in ICS27 directory?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it might make sense to have it in the ICS27 directory as well, but I think it would be nice to have here as well so there is an example of how to make use of this ADR-8

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe we don't really make use of README files in our different modules, so maybe it's better to add this to our regular docs site?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like having the large godoc in the code tbh!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think in-code and external facing documentation (information under docs/) are great. The in-code documentation should help explain the hard-coded values while the external facing documentation should explain how to interact with it


/**

ADR-8 CallbackPacketData implementation
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ditto

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it makes sense to have this documentation here as long as it's referenced from the ICS27 readme as two specific examples of how to implement the callbacks.

// The desired callback address must be confirmed in the memo under the "callbacks" key.
// This ensures that the callback is explicitly desired by the user and not just called
// automatically.
func (ftpd FungibleTokenPacketData) GetSrcCallbackAddress() (addr string) {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to reiterate in the memo here?

I think it makes sense on dest chain so we don't have automatic triggering of undefined smart contract logic. Plenty of bugs in Ethereum because of this behaviour.

But why wouldn't we want the automatic callback on ack and timeout if the sender itself is a smart contract. I think it makes sense to remove this logic and just return the sender directly here.

The middleware is responsible for determining if the address is a smart contract before executing

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't have a preference. Both seem like valid options to me. I guess I just wouldn't want to change the behaviour in the future (once contracts are written to expect certain behaviour, it shouldn't be adjusted)

@AdityaSripal AdityaSripal marked this pull request as ready for review March 13, 2023 18:40

// ADR-8 middleware should callback on the receiver address on the destination chain
// if the receiver address is an IBC Actor (i.e. smart contract that accepts IBC callbacks)
func (iapd InterchainAccountPacketData) GetDestCallbackAddress() (addr string) {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have the feeling this should just be disabled honestly. If you want custom logic to run on DEST, why not have it be a message encoded in the ICA tx itself?

I think for ICA, only sender callbacks make sense and for that I don't think we need a double confirmation in the memo

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it makes sense to disable this. I'm can't remember if ICA allows for multiple messages in one ICA tx but even if it doesn't, a callback would just extend this to two messages instead of multiple messages (which would be more useful)

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It does allow multiple messages

```

For transfer, we will enforce that the src_callback_address is the same as sender and dest_callback_address is the same as receiver.
However, we may remove this restriction at a later date if it proves useful.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does it make sense to make that restriction optional? Maybe have an optional field allow_non_receiving_callback (or a better name) that defaults to false if non-existing?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm ok with an additional field, but it'd be nice to know this is a feature that would be requested fairly soon. Is there a use case we have in mind?

}

if callbackData["src_callback_address"] == ftpd.Sender {
return ftpd.Sender
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is prevents us from specifying a callback as anything other than the sender. I think there's value in calling a different address (as long as it's explicitly specified by the sender).

As an example use case, a FE may want to build packets that trigger a contract on Ack but without having to write/deploy a contract themselves and have all transactions be sent through that contract.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yea, i just put this as an initial behaviour. Isn't this the behaviour of your hooks at the moment?

We could change it

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah, that's what we're currently doing (mostly to prevent user error). Just thought since callbacks were a generalization that they could allow for more flexibility here (see my other comment about making it optional based on a key in the memo)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As an example use case, a FE may want to build packets that trigger a contract on Ack but without having to write/deploy a contract themselves and have all transactions be sent through that contract.

This sounds like a pretty good example. I guess the idea is being able to specify on the source side a contract call to continue execution on the packet flow that does not relate to the original sender (external user, or smart contract with a separate purpose)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

opened #3351 to track this discussion

return
}

callbackData, ok := jsonObject["callbacks"].(map[string]interface{})
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can probably do

Suggested change
callbackData, ok := jsonObject["callbacks"].(map[string]interface{})
callbackData, ok := jsonObject["callbacks"].(map[string]string)

since non-strings would still fail as they can't be compared to ftpd.Receiver

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

since non-strings would still fail as they can't be compared to ftpd.Receiver

Is it possible to have additional fields in the callbacks section that will not be strings? Maybe something like:

{
    "callbacks": {
        "src_callback_address": "contractAddrOnSrcChain",
        "dest_callback_address": "contractAddrOnDestChain",
        "delegation_amount": 100, 
    }
}

I guess the callbacks section isn't intended to hold contract specific arguments? Do we have it specified somewhere what fields are okay for the callbacks section?

@codecov-commenter
Copy link

codecov-commenter commented Mar 18, 2023

Codecov Report

Merging #3287 (32b74ec) into main (afdc278) will decrease coverage by 0.06%.
The diff coverage is 40.84%.

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main    #3287      +/-   ##
==========================================
- Coverage   78.54%   78.48%   -0.06%     
==========================================
  Files         181      181              
  Lines       12580    12573       -7     
==========================================
- Hits         9881     9868      -13     
- Misses       2262     2275      +13     
+ Partials      437      430       -7     
Impacted Files Coverage Δ
modules/apps/transfer/types/packet.go 39.68% <0.00%> (-60.32%) ⬇️
...odules/apps/27-interchain-accounts/types/packet.go 82.22% <82.60%> (+0.40%) ⬆️
modules/apps/27-interchain-accounts/types/codec.go 81.63% <100.00%> (+2.08%) ⬆️
modules/apps/transfer/types/codec.go 89.18% <100.00%> (+1.68%) ⬆️

... and 19 files with indirect coverage changes

Copy link
Contributor

@crodriguezvega crodriguezvega left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you @AdityaSripal!

GetSrcCallbackAddress() string

// may return the empty string
GetDestCallbackAddress() string
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It looks like the code for these two functions is almost identical in both implementations (except for checking if the src callback address is equal to the sender and the dest callback address is the same as the receiver), so would it be possible to move the logic for extracting the values from the JSON string into a separate utility function and call that one in the implementations? You can still do the additional check for transfers and return empty string if not equal.

@@ -47,6 +51,83 @@ func (iapd InterchainAccountPacketData) GetBytes() []byte {
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&iapd))
}

/**

ADR-8 CallbackPacketData implementation
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe we don't really make use of README files in our different modules, so maybe it's better to add this to our regular docs site?


jsonObject := make(map[string]interface{})
// the jsonObject must be a valid JSON object
err := json.Unmarshal([]byte(iapd.Memo), &jsonObject)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of parsing the JSON ourselves, couldn't we use a JSON parser library like gjson or jsonparser?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd prefer not adding a dependency on a 3rd party module. Would there be any benefits? stdlib seems fine to me

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The benefit would be that extracting the desired value could be just one line of code, something like addr := gjson.Get(iapd.Memo, "callbacks.src_callback_address") with gjson.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could also add a helper function? I agree with @damiannolan on not relying on third party modules

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am fine using standard library, but might be worth considering using a third party library if we see ourselves doing more and more JSON parsing on the memo field. I found JSON parsing pretty error prone and it's such a common activity that sounds logical to rely on a well tested third party library to take care of that.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would also lean towards not pulling in a third party library for json processing.

@crodriguezvega crodriguezvega modified the milestones: v7.2.0, v7.1.0 Mar 20, 2023
Copy link
Contributor

@colin-axner colin-axner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

More fabulous work from the protocol mage 🧙‍♂️ 🪄 :)

Conceptually looks great to me. I left many nits.

The main component missing is tests. Each function added should have a unit test (helps us detect regressions in logic change, thinking of accidental changes in merge conflict fixing). In addition, it might be nice to add tests which mirror the expected ADR 8 flow, this might give implementers some concrete compiled code to look at as well. It can be very basic ( unmarshaling packet data into the interface and getting the src/dest addresses)

modules/apps/27-interchain-accounts/types/packet.go Outdated Show resolved Hide resolved
modules/apps/27-interchain-accounts/types/packet.go Outdated Show resolved Hide resolved
modules/core/exported/callbacks.go Outdated Show resolved Hide resolved
@@ -47,6 +51,83 @@ func (iapd InterchainAccountPacketData) GetBytes() []byte {
return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&iapd))
}

/**

ADR-8 CallbackPacketData implementation
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think in-code and external facing documentation (information under docs/) are great. The in-code documentation should help explain the hard-coded values while the external facing documentation should explain how to interact with it

modules/apps/transfer/types/packet.go Outdated Show resolved Hide resolved
}

if callbackData["src_callback_address"] == ftpd.Sender {
return ftpd.Sender
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As an example use case, a FE may want to build packets that trigger a contract on Ack but without having to write/deploy a contract themselves and have all transactions be sent through that contract.

This sounds like a pretty good example. I guess the idea is being able to specify on the source side a contract call to continue execution on the packet flow that does not relate to the original sender (external user, or smart contract with a separate purpose)

modules/apps/transfer/types/packet.go Outdated Show resolved Hide resolved
modules/core/exported/codec.go Outdated Show resolved Hide resolved
modules/core/exported/callbacks.go Outdated Show resolved Hide resolved
@AdityaSripal AdityaSripal mentioned this pull request Mar 20, 2023
9 tasks
@0xekez
Copy link

0xekez commented Mar 20, 2023

Hi folks, thanks for the work here. It would be great if we could use this work with DAO DAO.

From my read of the PR, in the current callback, a smart contract would get the packet sent as data on message completion. I'm not sure this is sufficient to build good UX around, as IMO the primary reason for callbacks is to know if an error happened while executing the message. It would be great if this callback system would give the ACK that occured as the callback, instead of the initial packet (which is my read of this document for current behavior).

This current system also seems limited in that there is no way for the host chain to return data to the controller chain for the callback, which limits how interoperable this is. I have been working on an ICA replacement, and there I allow the host chain to return data to the controller by setting the data field of the transaction. This integration test demonstrates this functionality.

Without this, the ability of the receiver of the callback to interact with the host chain on success is pretty limited as the only data it has to work with is the initial packet (the contents of which it should already know).

Finally, it would be nice to have:

  1. The initiator of the callback
  2. Data sent from the initiator

In the callback. This allows for flows like:

  1. transfer tokens via ICS-20
  2. on callback, wake up the ICA module and do something with those tokens

For reference, here is the callback system I have been working on myself.

@AdityaSripal
Copy link
Member Author

Hi @0xekez , yes the OnAcknowledgementCallback will include the acknowledgement itself so that the contract or intitiator can read whether the packet was successful or not.

This is specified in the ADR. I noticed the transfer template you linked did not have that which is an oversight of mine, apologies.

here is no way for the host chain to return data to the controller chain for the callback

The host chain can return data in the ack.

I don't believe an incompatible fork of ICA is necessary to accomplish your goals. We can discuss what it is you need and how to get there.

@0xekez
Copy link

0xekez commented Mar 21, 2023

@AdityaSripal: The host chain can return data in the ack.

Thanks for the response and clarification. It seems like the module will return the response information from the message executed in the ACK success variant which seems reasonable. Thanks!

@@ -0,0 +1,19 @@
package exported

type CallbackPacketDataI interface {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There was a user on Discord asking about the flow of token transfer + ICA call (i.e. on acknowledgement of a token transfer, execute ICA call to send a transaction to the interchain account). It seems like the user was not using a smart contract, so I suggested to use the message router to send a MsgSendTx to the interchain account sub-controller. After discussing with @womensrights, for such flow we will probably need also an ADR-8 interface so that when processing the token transfer acknowledgement, the necessary information to send a TX to an interchain account is provided (e.g connection ID, owner address, maybe interchain account packet data?). If a new interface is required (maybe is good to have separate interfaces for different use cases), should we rename this interface to something like ContractCallbackPacketDataI to make it specific to the use case of smart contracts?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

They should still be able to use the interfaces defined here. They would have to make their own custom middleware to do the go logic though.

colin-axner and others added 2 commits March 27, 2023 17:42
* remove query client (#3227)

* remove query client

* merge main

* go mod tidy

* Rename ``IsBound`` to ``HasCapability`` (#3253)

## Description



closes: #828


### Commit Message / Changelog Entry

```bash
imp(api!): rename `IsBound` to `HasCapability` for IBC application modules
```

see the [guidelines](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#commit-messages) for commit messages. (view raw markdown for examples)




---

Before we can merge this PR, please make sure that all the following items have been
checked off. If any of the checklist items are not applicable, please leave them but
write a little note why.

- [ ] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#pull-request-targeting)).
- [x] Linked to Github issue with discussion and accepted design OR link to spec that describes this work.
- [x] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/main/docs/docs/building-modules/10-structure.md) and [Go style guide](../docs/dev/go-style-guide.md).
- [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/main/testing/README.md#ibc-testing-package).
- [ ] Updated relevant documentation (`docs/`) or specification (`x/<module>/spec/`).
- [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code).
- [ ] Provide a [commit message](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#commit-messages) to be used for the changelog entry in the PR description for review.
- [ ] Re-reviewed `Files changed` in the Github PR explorer.
- [ ] Review `Codecov Report` in the comment section below once CI passes.

* chore: add support for tendermint debug log level (#3279)

* build(deps): bump cosmossdk.io/math from 1.0.0-beta.6.0.20230216172121-959ce49135e4 to 1.0.0-rc.0 (#3285)

Bumps [cosmossdk.io/math](https://github.com/cosmos/cosmos-sdk) from 1.0.0-beta.6.0.20230216172121-959ce49135e4 to 1.0.0-rc.0.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a href="https://github.com/cosmos/cosmos-sdk/commits/math/v1.0.0-rc.0">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cosmossdk.io/math&package-manager=go_modules&previous-version=1.0.0-beta.6.0.20230216172121-959ce49135e4&new-version=1.0.0-rc.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>

* Write docker inspect output to diagnostics (#3291)

* chore: fix dead links (#3293)

## Description



closes: #XXXX


### Commit Message / Changelog Entry

```bash
type: commit message
```

see the [guidelines](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#commit-messages) for commit messages. (view raw markdown for examples)




---

Before we can merge this PR, please make sure that all the following items have been
checked off. If any of the checklist items are not applicable, please leave them but
write a little note why.

- [x] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#pull-request-targeting)).
- [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work.
- [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/main/docs/docs/building-modules/10-structure.md) and [Go style guide](../docs/dev/go-style-guide.md).
- [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/main/testing/README.md#ibc-testing-package).
- [ ] Updated relevant documentation (`docs/`) or specification (`x/<module>/spec/`).
- [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code).
- [ ] Provide a [commit message](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#commit-messages) to be used for the changelog entry in the PR description for review.
- [x] Re-reviewed `Files changed` in the Github PR explorer.
- [ ] Review `Codecov Report` in the comment section below once CI passes.

* build(deps): bump google.golang.org/protobuf from 1.29.0 to 1.29.1 (#3292)

* deps: bump SDK v0.47 (#3295)

Co-authored-by: Damian Nolan <damiannolan@gmail.com>
Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com>

* remove unnecessary import from doc

* chore: remove support for v3 (#3294)

* build(deps): bump actions/setup-go from 3 to 4 (#3307)

* imp: remove unnecessary defer func statements (#3304)

* Remove gogoproto yaml tags from proto files (#3290)

## Description
Refer from original issue, I removed all `yaml` tags in proto files.

closes: #3145 


### Commit Message / Changelog Entry

```bash
type: commit message
```

see the [guidelines](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#commit-messages) for commit messages. (view raw markdown for examples)




---

Before we can merge this PR, please make sure that all the following items have been
checked off. If any of the checklist items are not applicable, please leave them but
write a little note why.

- [ ] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#pull-request-targeting)).
- [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work.
- [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/main/docs/docs/building-modules/10-structure.md) and [Go style guide](../docs/dev/go-style-guide.md).
- [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/main/testing/README.md#ibc-testing-package).
- [ ] Updated relevant documentation (`docs/`) or specification (`x/<module>/spec/`).
- [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code).
- [ ] Provide a [commit message](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#commit-messages) to be used for the changelog entry in the PR description for review.
- [ ] Re-reviewed `Files changed` in the Github PR explorer.
- [ ] Review `Codecov Report` in the comment section below once CI passes.

* add reasoning for migration to enable localhost

* Support configuration file for e2e tests (#3260)

* E2E fzf Test Selection Autocompletion (#3313)

* post v7 release chores (#3310)

* chore: fix linter warnings (#3311)

* ADR 008: IBC Actor Callbacks (#1976)

* context and decision

* complete adr

* Apply suggestions from code review

Co-authored-by: Carlos Rodriguez <carlos@interchain.io>

* change from caller to generalized actor

* Apply suggestions from code review

Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com>

* create folder and scaffolded middleware

* add error handling and generify packetdata interface

* complete renaming

* add user defined gas limit and clarify pseudocode

* Clarify CallbackPacketData interface

imp: Add ADR 008: IBC Actor Callbacks

---------

Co-authored-by: Carlos Rodriguez <carlos@interchain.io>
Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com>

* lint: fix spelling

* chore: apply self review concerns

* chore: rename CallbackPacketDataI to CallbackPacketData

* chore: finish applying remaining review suggestions

* test: add remaining unit tests for transfer and ica

* test: add unmarshaling test

* imp: address ADR 8 review suggestions (#3319)



---------

Co-authored-by: Damian Nolan <damiannolan@gmail.com>

* Bump interchain test (#3314)

* fix: remove codec registration

* fix: build + linting

* Only run e2e on R4R (#3330)

* fix fork workflows (#3328)

* Revert "Merge branch 'main' of github.com:cosmos/ibc-go into colin/callback-packet-data-impl"

This reverts commit 1c6164b, reversing
changes made to 6f25b8e.

* chore: add optional interface godoc

* Apply suggestions from code review

Co-authored-by: Carlos Rodriguez <carlos@interchain.io>

* chore: use backticks instead of escape characters in testing

---------

Co-authored-by: Lặc <67097720+expertdicer@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Cian Hatton <cian@interchain.io>
Co-authored-by: Carlos Rodriguez <carlos@interchain.io>
Co-authored-by: Damian Nolan <damiannolan@gmail.com>
Co-authored-by: GNaD13 <89174180+GNaD13@users.noreply.github.com>
Co-authored-by: Hieu Vu <72878483+hieuvubk@users.noreply.github.com>
Co-authored-by: Aditya <adityasripal@gmail.com>
@colin-axner
Copy link
Contributor

We will be merging these changes into this feature branch. Changes will be backported to this testing branch (based off v7.1.x). This will allow us to start testing these changes with the osmosis adr8 implementation. Once the proposed changes have been tested and shown to work and/or additional changes have been applied, the feature branch will be merged to main and backported to a v7 minor release

I have opened up the following issues for points raised in review of this pr:

Copy link
Contributor

@colin-axner colin-axner left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ACK. Looking forward to seeing these changes in action!

Would appreciate 2 approvals from folks who didn't work on these changes

@colin-axner colin-axner removed their assignment Mar 27, 2023
Copy link
Member

@damiannolan damiannolan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ACK changes! Nice work

Comment on lines 23 to 25
// CallbackPacketData defines the interface used by ADR 8 implementations
// to obtain callback addresses associated with a specific packet data type.
// This is an optional interface which indicates support for ADR 8 implementations.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: maybe we can add a link to ADR 8 in this godoc

Copy link
Contributor

@colin-axner colin-axner Mar 28, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

added 523f40b, I used a link to main. I think that's fine since I don't expect our docs/architecture layout to change for a very long time

return ""
}

callbackAddr, ok := callbackData["src_callback_address"].(string)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should we keep as src_callback_address? Or change to source_callback_address?

@alpe alpe mentioned this pull request Mar 28, 2023
Copy link
Contributor

@chatton chatton left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice job LGTM, thanks for all the work you've put into this 🙏


jsonObject := make(map[string]interface{})
// the jsonObject must be a valid JSON object
err := json.Unmarshal([]byte(iapd.Memo), &jsonObject)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would also lean towards not pulling in a third party library for json processing.

@colin-axner
Copy link
Contributor

merging into the feature branch so work can continue on this. Please feel free to review/open issues/ask questions/suggest improvements :)

@colin-axner colin-axner merged commit 69b8971 into adr-8-callbacks-interface-impl Mar 29, 2023
@colin-axner colin-axner deleted the adr-8-interface-impl branch March 29, 2023 09:54
colin-axner added a commit that referenced this pull request Mar 29, 2023
* adr 8 with 20/27 implementation

* change interface name and register codecs

* documentation

* add comma before new line

* fix return arg and dest for ica

* add ica tests

* adr 8 callback packet data impl followups  (#3325)

* remove query client (#3227)

* remove query client

* merge main

* go mod tidy

* Rename ``IsBound`` to ``HasCapability`` (#3253)

closes: #828

```bash
imp(api!): rename `IsBound` to `HasCapability` for IBC application modules
```

see the [guidelines](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#commit-messages) for commit messages. (view raw markdown for examples)

---

Before we can merge this PR, please make sure that all the following items have been
checked off. If any of the checklist items are not applicable, please leave them but
write a little note why.

- [ ] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#pull-request-targeting)).
- [x] Linked to Github issue with discussion and accepted design OR link to spec that describes this work.
- [x] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/main/docs/docs/building-modules/10-structure.md) and [Go style guide](../docs/dev/go-style-guide.md).
- [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/main/testing/README.md#ibc-testing-package).
- [ ] Updated relevant documentation (`docs/`) or specification (`x/<module>/spec/`).
- [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code).
- [ ] Provide a [commit message](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#commit-messages) to be used for the changelog entry in the PR description for review.
- [ ] Re-reviewed `Files changed` in the Github PR explorer.
- [ ] Review `Codecov Report` in the comment section below once CI passes.

* chore: add support for tendermint debug log level (#3279)

* build(deps): bump cosmossdk.io/math from 1.0.0-beta.6.0.20230216172121-959ce49135e4 to 1.0.0-rc.0 (#3285)

Bumps [cosmossdk.io/math](https://github.com/cosmos/cosmos-sdk) from 1.0.0-beta.6.0.20230216172121-959ce49135e4 to 1.0.0-rc.0.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a href="https://github.com/cosmos/cosmos-sdk/commits/math/v1.0.0-rc.0">compare view</a></li>
</ul>
</details>
<br />

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cosmossdk.io/math&package-manager=go_modules&previous-version=1.0.0-beta.6.0.20230216172121-959ce49135e4&new-version=1.0.0-rc.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

</details>

* Write docker inspect output to diagnostics (#3291)

* chore: fix dead links (#3293)

closes: #XXXX

```bash
type: commit message
```

see the [guidelines](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#commit-messages) for commit messages. (view raw markdown for examples)

---

Before we can merge this PR, please make sure that all the following items have been
checked off. If any of the checklist items are not applicable, please leave them but
write a little note why.

- [x] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#pull-request-targeting)).
- [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work.
- [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/main/docs/docs/building-modules/10-structure.md) and [Go style guide](../docs/dev/go-style-guide.md).
- [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/main/testing/README.md#ibc-testing-package).
- [ ] Updated relevant documentation (`docs/`) or specification (`x/<module>/spec/`).
- [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code).
- [ ] Provide a [commit message](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#commit-messages) to be used for the changelog entry in the PR description for review.
- [x] Re-reviewed `Files changed` in the Github PR explorer.
- [ ] Review `Codecov Report` in the comment section below once CI passes.

* build(deps): bump google.golang.org/protobuf from 1.29.0 to 1.29.1 (#3292)

* deps: bump SDK v0.47 (#3295)

Co-authored-by: Damian Nolan <damiannolan@gmail.com>
Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com>

* remove unnecessary import from doc

* chore: remove support for v3 (#3294)

* build(deps): bump actions/setup-go from 3 to 4 (#3307)

* imp: remove unnecessary defer func statements (#3304)

* Remove gogoproto yaml tags from proto files (#3290)

Refer from original issue, I removed all `yaml` tags in proto files.

closes: #3145

```bash
type: commit message
```

see the [guidelines](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#commit-messages) for commit messages. (view raw markdown for examples)

---

Before we can merge this PR, please make sure that all the following items have been
checked off. If any of the checklist items are not applicable, please leave them but
write a little note why.

- [ ] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#pull-request-targeting)).
- [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work.
- [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/main/docs/docs/building-modules/10-structure.md) and [Go style guide](../docs/dev/go-style-guide.md).
- [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/main/testing/README.md#ibc-testing-package).
- [ ] Updated relevant documentation (`docs/`) or specification (`x/<module>/spec/`).
- [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code).
- [ ] Provide a [commit message](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#commit-messages) to be used for the changelog entry in the PR description for review.
- [ ] Re-reviewed `Files changed` in the Github PR explorer.
- [ ] Review `Codecov Report` in the comment section below once CI passes.

* add reasoning for migration to enable localhost

* Support configuration file for e2e tests (#3260)

* E2E fzf Test Selection Autocompletion (#3313)

* post v7 release chores (#3310)

* chore: fix linter warnings (#3311)

* ADR 008: IBC Actor Callbacks (#1976)

* context and decision

* complete adr

* Apply suggestions from code review

Co-authored-by: Carlos Rodriguez <carlos@interchain.io>

* change from caller to generalized actor

* Apply suggestions from code review

Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com>

* create folder and scaffolded middleware

* add error handling and generify packetdata interface

* complete renaming

* add user defined gas limit and clarify pseudocode

* Clarify CallbackPacketData interface

imp: Add ADR 008: IBC Actor Callbacks

---------

Co-authored-by: Carlos Rodriguez <carlos@interchain.io>
Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com>

* lint: fix spelling

* chore: apply self review concerns

* chore: rename CallbackPacketDataI to CallbackPacketData

* chore: finish applying remaining review suggestions

* test: add remaining unit tests for transfer and ica

* test: add unmarshaling test

* imp: address ADR 8 review suggestions (#3319)

---------

Co-authored-by: Damian Nolan <damiannolan@gmail.com>

* Bump interchain test (#3314)

* fix: remove codec registration

* fix: build + linting

* Only run e2e on R4R (#3330)

* fix fork workflows (#3328)

* Revert "Merge branch 'main' of github.com:cosmos/ibc-go into colin/callback-packet-data-impl"

This reverts commit 1c6164b, reversing
changes made to 6f25b8e.

* chore: add optional interface godoc

* Apply suggestions from code review

Co-authored-by: Carlos Rodriguez <carlos@interchain.io>

* chore: use backticks instead of escape characters in testing

---------

Co-authored-by: Lặc <67097720+expertdicer@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Cian Hatton <cian@interchain.io>
Co-authored-by: Carlos Rodriguez <carlos@interchain.io>
Co-authored-by: Damian Nolan <damiannolan@gmail.com>
Co-authored-by: GNaD13 <89174180+GNaD13@users.noreply.github.com>
Co-authored-by: Hieu Vu <72878483+hieuvubk@users.noreply.github.com>
Co-authored-by: Aditya <adityasripal@gmail.com>

* fix: merge conflicts

* chore: nits from self review

* chore: add link to ADR 008 in godoc

---------

Co-authored-by: Carlos Rodriguez <carlos@interchain.io>
Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com>
Co-authored-by: Lặc <67097720+expertdicer@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Cian Hatton <cian@interchain.io>
Co-authored-by: Damian Nolan <damiannolan@gmail.com>
Co-authored-by: GNaD13 <89174180+GNaD13@users.noreply.github.com>
Co-authored-by: Hieu Vu <72878483+hieuvubk@users.noreply.github.com>
colin-axner added a commit that referenced this pull request Mar 29, 2023
* adr 8 with 20/27 implementation

* change interface name and register codecs

* documentation

* add comma before new line

* fix return arg and dest for ica

* add ica tests

* adr 8 callback packet data impl followups  (#3325)

* remove query client (#3227)

* remove query client

* merge main

* go mod tidy

* Rename ``IsBound`` to ``HasCapability`` (#3253)

closes: #828

```bash
imp(api!): rename `IsBound` to `HasCapability` for IBC application modules
```

see the [guidelines](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#commit-messages) for commit messages. (view raw markdown for examples)

---

Before we can merge this PR, please make sure that all the following items have been
checked off. If any of the checklist items are not applicable, please leave them but
write a little note why.

- [ ] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#pull-request-targeting)).
- [x] Linked to Github issue with discussion and accepted design OR link to spec that describes this work.
- [x] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/main/docs/docs/building-modules/10-structure.md) and [Go style guide](../docs/dev/go-style-guide.md).
- [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/main/testing/README.md#ibc-testing-package).
- [ ] Updated relevant documentation (`docs/`) or specification (`x/<module>/spec/`).
- [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code).
- [ ] Provide a [commit message](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#commit-messages) to be used for the changelog entry in the PR description for review.
- [ ] Re-reviewed `Files changed` in the Github PR explorer.
- [ ] Review `Codecov Report` in the comment section below once CI passes.

* chore: add support for tendermint debug log level (#3279)

* build(deps): bump cosmossdk.io/math from 1.0.0-beta.6.0.20230216172121-959ce49135e4 to 1.0.0-rc.0 (#3285)

Bumps [cosmossdk.io/math](https://github.com/cosmos/cosmos-sdk) from 1.0.0-beta.6.0.20230216172121-959ce49135e4 to 1.0.0-rc.0.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a href="https://github.com/cosmos/cosmos-sdk/commits/math/v1.0.0-rc.0">compare view</a></li>
</ul>
</details>
<br />

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=cosmossdk.io/math&package-manager=go_modules&previous-version=1.0.0-beta.6.0.20230216172121-959ce49135e4&new-version=1.0.0-rc.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

</details>

* Write docker inspect output to diagnostics (#3291)

* chore: fix dead links (#3293)

closes: #XXXX

```bash
type: commit message
```

see the [guidelines](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#commit-messages) for commit messages. (view raw markdown for examples)

---

Before we can merge this PR, please make sure that all the following items have been
checked off. If any of the checklist items are not applicable, please leave them but
write a little note why.

- [x] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#pull-request-targeting)).
- [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work.
- [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/main/docs/docs/building-modules/10-structure.md) and [Go style guide](../docs/dev/go-style-guide.md).
- [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/main/testing/README.md#ibc-testing-package).
- [ ] Updated relevant documentation (`docs/`) or specification (`x/<module>/spec/`).
- [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code).
- [ ] Provide a [commit message](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#commit-messages) to be used for the changelog entry in the PR description for review.
- [x] Re-reviewed `Files changed` in the Github PR explorer.
- [ ] Review `Codecov Report` in the comment section below once CI passes.

* build(deps): bump google.golang.org/protobuf from 1.29.0 to 1.29.1 (#3292)

* deps: bump SDK v0.47 (#3295)

Co-authored-by: Damian Nolan <damiannolan@gmail.com>
Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com>

* remove unnecessary import from doc

* chore: remove support for v3 (#3294)

* build(deps): bump actions/setup-go from 3 to 4 (#3307)

* imp: remove unnecessary defer func statements (#3304)

* Remove gogoproto yaml tags from proto files (#3290)

Refer from original issue, I removed all `yaml` tags in proto files.

closes: #3145

```bash
type: commit message
```

see the [guidelines](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#commit-messages) for commit messages. (view raw markdown for examples)

---

Before we can merge this PR, please make sure that all the following items have been
checked off. If any of the checklist items are not applicable, please leave them but
write a little note why.

- [ ] Targeted PR against correct branch (see [CONTRIBUTING.md](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#pull-request-targeting)).
- [ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work.
- [ ] Code follows the [module structure standards](https://github.com/cosmos/cosmos-sdk/blob/main/docs/docs/building-modules/10-structure.md) and [Go style guide](../docs/dev/go-style-guide.md).
- [ ] Wrote unit and integration [tests](https://github.com/cosmos/ibc-go/blob/main/testing/README.md#ibc-testing-package).
- [ ] Updated relevant documentation (`docs/`) or specification (`x/<module>/spec/`).
- [ ] Added relevant `godoc` [comments](https://blog.golang.org/godoc-documenting-go-code).
- [ ] Provide a [commit message](https://github.com/cosmos/ibc-go/blob/main/docs/dev/pull-requests.md#commit-messages) to be used for the changelog entry in the PR description for review.
- [ ] Re-reviewed `Files changed` in the Github PR explorer.
- [ ] Review `Codecov Report` in the comment section below once CI passes.

* add reasoning for migration to enable localhost

* Support configuration file for e2e tests (#3260)

* E2E fzf Test Selection Autocompletion (#3313)

* post v7 release chores (#3310)

* chore: fix linter warnings (#3311)

* ADR 008: IBC Actor Callbacks (#1976)

* context and decision

* complete adr

* Apply suggestions from code review

Co-authored-by: Carlos Rodriguez <carlos@interchain.io>

* change from caller to generalized actor

* Apply suggestions from code review

Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com>

* create folder and scaffolded middleware

* add error handling and generify packetdata interface

* complete renaming

* add user defined gas limit and clarify pseudocode

* Clarify CallbackPacketData interface

imp: Add ADR 008: IBC Actor Callbacks

---------

Co-authored-by: Carlos Rodriguez <carlos@interchain.io>
Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com>

* lint: fix spelling

* chore: apply self review concerns

* chore: rename CallbackPacketDataI to CallbackPacketData

* chore: finish applying remaining review suggestions

* test: add remaining unit tests for transfer and ica

* test: add unmarshaling test

* imp: address ADR 8 review suggestions (#3319)

---------

Co-authored-by: Damian Nolan <damiannolan@gmail.com>

* Bump interchain test (#3314)

* fix: remove codec registration

* fix: build + linting

* Only run e2e on R4R (#3330)

* fix fork workflows (#3328)

* Revert "Merge branch 'main' of github.com:cosmos/ibc-go into colin/callback-packet-data-impl"

This reverts commit 1c6164b, reversing
changes made to 6f25b8e.

* chore: add optional interface godoc

* Apply suggestions from code review

Co-authored-by: Carlos Rodriguez <carlos@interchain.io>

* chore: use backticks instead of escape characters in testing

---------

Co-authored-by: Lặc <67097720+expertdicer@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Cian Hatton <cian@interchain.io>
Co-authored-by: Carlos Rodriguez <carlos@interchain.io>
Co-authored-by: Damian Nolan <damiannolan@gmail.com>
Co-authored-by: GNaD13 <89174180+GNaD13@users.noreply.github.com>
Co-authored-by: Hieu Vu <72878483+hieuvubk@users.noreply.github.com>
Co-authored-by: Aditya <adityasripal@gmail.com>

* fix: merge conflicts

* chore: nits from self review

* chore: add link to ADR 008 in godoc

---------

Co-authored-by: Carlos Rodriguez <carlos@interchain.io>
Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com>
Co-authored-by: Lặc <67097720+expertdicer@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Cian Hatton <cian@interchain.io>
Co-authored-by: Damian Nolan <damiannolan@gmail.com>
Co-authored-by: GNaD13 <89174180+GNaD13@users.noreply.github.com>
Co-authored-by: Hieu Vu <72878483+hieuvubk@users.noreply.github.com>
Comment on lines +29 to +37
// GetSourceCallbackAddress should return the callback address of a packet data on the source chain.
// This may or may not be the sender of the packet. If no source callback address exists for the packet,
// an empty string may be returned.
GetSourceCallbackAddress() string

// GetDestCallbackAddress should return the callback address of a packet data on the destination chain.
// This may or may not be the receiver of the packet. If no dest callback address exists for the packet,
// an empty string may be returned.
GetDestCallbackAddress() string
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

curious why these are string as opposed to addresses

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We didn't want to assert that these were SDK addresses.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

10 participants