Closed hdevalence closed 1 year ago
Acceptance criteria: Relayer can execute a full chain of IBC actions, relayer code merged upstream & Strangelove responsible for maintenance
Next step here is to use the go buf build process
@avahowell Could you provide an update here about where things stand on the Relayer work?
Update from sync today: still untangling gnarly protobuf build logic. Latest WIP PR is here: https://github.com/penumbra-zone/relayer/pull/2 @avahowell will continue to consult with SL folks and drive progress forward. See relevant discussion in https://discord.com/channels/824484045370818580/930154881040404480/1067611197970595932 Work will continue past shipping #1877.
Based on discussion yesterday, we consider this blocked until #1867 is resolved.
Moved to future column; we'll return to this in a few sprints.
@avahowell For clarity's sake, could you update the OP on this ticket to make it into a epic, with cross-links to other (potentially blocking) issues related to IBC?
Updated the OP with checkboxes to track related work. Took a first look at rebasing, and it worked surprisingly well. Currently encountering a problem related to our use of lens in our WIP branch; lens
was just removed from the relayer dependencies last week, and the SL folks advise that we not re-add it as a dependency. I'll take a look at the chain implementation docs, and connect with SL for more pointers.
Updated OP with #2123, since the good folks at SL are going to tackle the the golang codegen part on their next sprint.
Current status:
Next steps:
penumbra_buf
branch into this branchlens
dependency from the current branchpclientd
interface to build Penumbra transactions against a local pclientd
instance, instead of building them ad-hoc in this implementation (an example of how to use this RPC can be found here: https://github.com/penumbra-zone/penumbra/blob/main/pclientd/tests/network_integration.rs#L104-L158 )Good progress made this sprint, need sync'ing with SL tomorrow.
Updating the current state of play:
testnet-preview
against a local devnet (done with pd testnet generate
). I edited my "testnet" JSON config file to point at the local instance, which was running pd
with RUST_LOG=info,[CheckTx]=debug
. Depending on which chain is "first" in the path, there will be different sequences of messages sent to each chain. I noticed that the failures were happening on the remote testnet-preview
chain, which wasn't printing logs in my terminal, so I used rly
to make another path with the order reversed, and called it penumbra_path_rev
.
The current status is this output:
@avahowell suspects that changes to the ICS23 proof spec may be to blame, but I'm not sure I understand why (wouldn't those block earlier parts of the handshake?).
We debugged this today and are now at the point where the relayer can successfully handshake between two chains. The previous issue was that we had a logic bug in both the connection and channel handshakes introduced after some underlying tendermint-rs changes.
The next step is to test the AcknowledgePacket
, RecvPacket
, and ICS-20 transfer parts of the state machine.
We now have a relayer deployment, updated on every merge into main. Its only path is between the preview and testnet environments, and that path is destroyed and rebuilt on every deploy.
The logs on the service show a considerable number of warnings:
ts=2023-04-06T19:40:37.597175Z lvl=warn msg="Error querying block data" chain_name=penumbra-testnet chain_id=penumbra-testnet-pasiphae error="RPC error -32603 - Internal error: could not find results for height #117950"
ts=2023-04-06T19:42:02.639811Z lvl=warn msg="Error querying block data" chain_name=penumbra-testnet chain_id=penumbra-testnet-pasiphae error="RPC error -32603 - Internal error: could not find results for height #117965"
ts=2023-04-06T19:43:31.688064Z lvl=warn msg="Error querying block data" chain_name=penumbra-testnet chain_id=penumbra-testnet-pasiphae error="RPC error -32603 - Internal error: could not find results for height #117980"
ts=2023-04-06T19:45:11.745602Z lvl=warn msg="Error querying block data" chain_name=penumbra-testnet chain_id=penumbra-testnet-pasiphae error="RPC error -32603 - Internal error: could not find results for height #117997"
ts=2023-04-06T19:45:51.750684Z lvl=warn msg="Error querying block data" chain_name=penumbra-preview chain_id=penumbra-testnet-pasiphae-0305d87e error="RPC error -32603 - Internal error: could not find results for height #1620"
ts=2023-04-06T19:46:13.801224Z lvl=warn msg="Error querying block data" chain_name=penumbra-testnet chain_id=penumbra-testnet-pasiphae error="RPC error -32603 - Internal error: could not find results for height #118008"
ts=2023-04-06T19:47:27.814513Z lvl=warn msg="Error querying block data" chain_name=penumbra-preview chain_id=penumbra-testnet-pasiphae-0305d87e error="RPC error -32603 - Internal error: could not find results for height #1638"
ts=2023-04-06T19:47:59.831588Z lvl=warn msg="Error querying block data" chain_name=penumbra-preview chain_id=penumbra-testnet-pasiphae-0305d87e error="RPC error -32603 - Internal error: could not find results for height #1644"
ts=2023-04-06T19:48:15.838806Z lvl=warn msg="Error querying block data" chain_name=penumbra-preview chain_id=penumbra-testnet-pasiphae-0305d87e error="error unmarshalling: invalid character '<' looking for beginning of value"
ts=2023-04-06T19:51:38.966342Z lvl=warn msg="Error querying block data" chain_name=penumbra-preview chain_id=penumbra-testnet-pasiphae-0305d87e error="RPC error -32603 - Internal error: could not find results for height #1685"
There's also a preponderance of errors of a specific type:
❯ kubectl logs relayer-preview-55f668f9bd-rvpdh | rg 'lvl=error msg="Failed to check for misbehaviour"' | wc -l
828
but the relayer docs say:
The relayer currently cannot monitor and submit misbehavior for clients
So that's to be expected.
Calling this done. There's still a bit more testing to do in #2284 separately, but the plumbing exists for the relayer now. Further IBC work is tracked in #454.
Overview
In order to relay IBC packets into Penumbra, we need a way to include the packets in transactions (#464), but we also need software that relayers can run to actually create those transactions.
What does this entail? TBD: let's figure this out (cc: @jackzampolin)
Next steps