What’s the bridge

Instead of talking about any specific bridge with all the technical details let’s first define what we mean by bridge in general.

A bridge does the following: once tx with some Data is issued on Chain-1, the bridge issues a tx with the same Data on Chain-2 and vice-versa.

Current bridges might not even fit into this

  1. if there’s no general message passing we need to find some workaround to pass at least a (secure enough) hash of the Data
  2. if the tx on Chain-2 isn’t issued automatically we can permissionlessly issue it via bot/cron/whatever
  3. in general, we don’t even need to have any specific recipient on Chain-2. Let’s assume the recipient is able to observe the message somehow once it’s on-chain

Given the above, we’ve abstracted from any concrete details of bridge implementation.

What do we want to achieve?

To make the Protocol (Lido) on Chain-1 (Ethereum) to be able to manage a Module (Lido Satellite) on Chain-2 (Neutron)

The solution

For simplicity, let’s make an assumption that we have a single bridge.

In this particular case, everything is dead simple. We just send a message from Protocol on Chain-1 to Chain-2 and Module executes it.

The question is: how Module is able to verify if the Protocol is the sender of the message?

There are two possible solutions to that:

  1. Ask the bridge (if we trust it enough). It means that the sender is verified via some metadata of the tx on Chain-2 and not via the Data transferred.
  2. To verify the sender somehow based on Data itself.

I believe there’s no realistic scenario for verifying the message sender. In general, I know only 3 verification methods (and their combinations):

  1. Trusting the middleware: that’s how we trust blockchain that the sender of the message is a real sender. In our case, we have to trust the bridge in that scenario and it basically the same as getting the sender from the metadata
  2. Verifying based on a trusted third party. Here we don’t have any trusted third party besides maybe the other bridge.