specs icon indicating copy to clipboard operation
specs copied to clipboard

Research Area: Interop Between Chains with Non Fungible Blockspace

Open tynes opened this issue 10 months ago • 2 comments

As new features are added to the protocol we want to enable the ability interop between chains that support different feature sets. Some applications may be opinionated about the types of features or blockspace they accept inbound messages from in the world of interop. This means that legibility is important when there is interoperability between chains that have non fungible blockspace.

An example of non fungible blockspace is a plasma chain vs a rollup. The security properties of the chains are completely different, therefore some applications may want to be able to introspect in on the properties of the originating chain to know how to treat the messages.

One way to allow for legibility into the type of blockspace is having a bytes32 bitfield on L1 that includes all of the features for a chain. We could update executeMessage with a new argument _type. This _type would be made available and the protocol specifications would define particular bits being set that correspond to particular features.

function executeMessage(address _target, bytes calldata _msg, bytes32 _type, Identifier calldata _id) public payable;

The fork choice rule/fault proof would be able to enforce that the _type is exactly what is defined on L1, similar to how they currently enforce the Identifier to match to the _msg exactly.

An on chain data structure would be used to ensure that an archive node is not necessary, whether its an append only list of (value, timestamp) or a "last updated blocknumber" which would give a lookup for an emitted event that contains the value.

Another possible design would be to have multiple inbox predeploys, one for each type of blockspace. This adds complexity to consensus, as now there would have to be a special case for each of the special predeploys. There are only so many predeploy spots and it means adding a new type of blockspace or a new feature would require the addition of a new predeploy to allow for them to interop. With the bytes32 type bitfield design, the bitfield can be updated and there is no need to fork upgrade in a new predeploy

tynes avatar Apr 10 '24 22:04 tynes