Feature Request: Opening IBC connection to Union
Quick note: Some links are provided as raw texts since it’s not allowed for new users to add more than 2 links.
Summary
Union(https[://]union.build) is an interoperability layer that connects various of ecosystems and execution layers including Ethereum, Scroll, Movement, Berachain and etc. By taking advantage of BLS signatures, various optimizations and ZK technology it is capable of connecting these ecosystems fast and cheap.
In order for Penumbra to expand it’s ecosystem, it needs to connect to Union using IBC. This requires the CometBLS light client to be implemented on Penumbra.
Problem Statement
Although IBC is designed to be chain-agnostic, it was only being used between Cosmos chains and the technical difficulties to expand IBC to computation-limited environments (such as Ethereum) made it hard for teams to do this expansion.
Union took a unique approach to solve this problem by leveraging ZK technology by creating CometBLS - a highly optimized consensus algorithm for ZK proving - and implementing ZK light clients to all of its connected chains.
Proposed Solution
Penumbra can connect to Union by implementing the CometBLS light client. We already have a Rust-based wasm implementation (1) which can be used as an example and a CometBLS ZK-verification library(2) which can be directly imported.
- Github:
light-clients -> cometbls-light-client
- Github:
lib -> cometbls-groth16-verifier
Use Cases
- Connect to all ecosystems that Union support.
Technical Details
Adding CometBLS light client to Penumbra
Other than the ZK-verification part, the implementation of the light client looks fairly similar to the Tendermint light client. This makes it so that ics23 libraries can be reused for membership verification.
For the ZK part, in our implementation with Cosmwasm(1) we use substrate-bn
(2) and the curve operations are being done in the WASM context. Note that this may not be desirable for the execution environments that already provide host functions (or precompiles) for BN254 curve operations. Our NEAR cometbls light client (3) is a good example that uses host functions for curve operations.
- Github:
lib -> cometbls-groth16-verifier
- Docs-rs:
substrate-bn
- Github:
PRs -> #2254 -> light-clients -> cometbls -> near -> src -> verifier.rs
Adding Penumbra light client to Union
Although this implementation will not be on Penumbra, it’s still a required part for this connection to happen. We can go to the technical details on how to do this part afterwards. But Union supports Rust-based light clients written in Cosmwasm, which should make it easier to port it to other Rust-based implementations.
Benefits
Increasing Penumbra’s trust-minimized connectivity to other ecosystems.
Potential Drawbacks
As it said in the Technical Details
part, ZK verification part can be tricky.
Note to submitters: Please fill out as many sections as possible to help the development team understand and evaluate your feature request.