-
Notifications
You must be signed in to change notification settings - Fork 634
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
Interchain Accounts: consider using smaller timeoutTimestamp #540
Comments
Great points. I agree with this 👍 I guess the question is how long do we make the timeouts? Do we pass the decision along to the application developers who will be building modules on the |
As this is not a single transaction, but a sequence of transactions, I would do it like that:
Also, because any timeout will close the channel, this implies the necessity of some retry mechanism which would reopen the channels when needed and/or notify the user application of the failures. |
thanks @andrey-kuprianov! The concern with packets that can never be timed out makes sense to me. One concern that comes to mind with respect to the current proposed solutions is that predicting appropriate timeouts is difficult since we are trying to predict the time/height for a counterparty blockchain which we only have past information for. In fact we recently faced this issue on the UX side in #508. Using We could allow this to be inputted by the controller module (and thus likely a user inputted value). The benefit is that a user inputted timestamp has the benefit of knowing the actual time on the counterparty (assuming it has access to the counterparties blockchain), but the downside is that timeouts due to user error are probably pretty likely. Thoughts? |
We have decided to use an ICA authentication module provided timestamp value. This increases the likelihood of channels becoming closed due to the timeout being capable of being reached. Since usage of interchain accounts is so widely varied, it is impossible to predict what value a timeout timestamp would provide. Thus allowing flexibility in the decision makes sense. Implementation of this issue should make it very clear that an appropriate timeout timestamp value is required. The |
* small fixes in adding chains & fetch cmd * remove dead code & address some todos * update README * skip reuse identifier test * add get relayer message bytes * skip reuse identifiers test * fix lgtm alert * improved provider api * changes for new trusting period method Co-authored-by: Jack Zampolin <jack.zampolin@gmail.com>
Surfaced from @informalsystems audit of ICS27 InterchainAccounts at hash b8bc1a8
In the current implementation of 27-interchain-accounts/keeper/relay.go, when tx packets are sent, the timeout is set to max uint64, thus making the packets effectively never expiring:
The problem I see with this approach is that it gives the application control away completely: the app (IA) doesn't have a chance to react in case a packet got stuck for some reason. And there are such cases, e.g. when a LightClient is not updated, and the trusting period passes, so it can't ever be updated again (besides using a special governance proposal), as outlined e.g. in the ICS02:
I understand the motivation for choosing the high timeout, such that the channel never gets closed because of a timed out packet. But I believe the real architectural choice here is different. Comparing the two cases:
The second one I think is much better, because you can react somehow. In the first one your app is stuck completely, and you loose any control over what happens next.
CC @seantking
For Admin Use
The text was updated successfully, but these errors were encountered: