Signing LERs vs Exits #116
Replies: 2 comments 3 replies
-
I think the most straightforward approach (and better aligned with medium-long term) is to sign both cons
pros
I think the trade-off here is that the chain should be able to compute the |
Beta Was this translation helpful? Give feedback.
-
No need to sign I think signing For rollups, we need a stronger guarantee than simply signing On the other hand, for sidechains like Polygon PoS, we can't just check a single signature on For single-sequencer validiums, we could check a signature, but if we already need to handle verifying So if we exclude any setup that requires a proof of consensus or an execution proof, we're left with single-sequencer sidechains, which IMO is not a case that we should be handling. It's a separate question whether we should have the PP check a signature for now as an interim step. IMO, since we'll be running the prover, I don't think that we need to worry about a misbehaving prover.
I might just be misunderstanding something here @krlosMata - but I'm unclear on the DA question. I agree that we have to be really careful with rollups, but as long as we enforce consistency of For validiums, we could post data required to reconstruct the LBT/NullifierSet, but imo if a validium operator wanted to launch a data-withholding attack, he could always just withhold data to make it impossible to reconstruct the state root. |
Beta Was this translation helpful? Give feedback.
-
Had a conversation with @hadjiszs and @HarryTmetic on how to authenticate
BridgeExits
andImportedBridgeExits
in the PP.We agreed that instead of signing a linear hash of
BridgeExits
the chain could sign its ownLocalExitRoot
.There was some disagreement about whether chains need to sign the
ImportedBridgeExits
. Theo and Monir made a good point that if the chain doesn't sign theImportedBridgeExits
, then the prover actually has some degree of freedom in choosing which claims to process, and theLBT
is non-deterministic.The proposal that I had in mind was the following. We define a set called
IncomingLocalExitRoots
consisting ofLocalExitRoot
from other chains. This set must be authenticated in some way, either by being included as a public input in a validity proof or proof of consensus, or via a signature from the chain operator.Therefore, the payload from the chain operator to the prover is the following:
IncomingLocalExitRoots
IncomingLocalExitRoots: Vec<LocalExitRoot>
Claims: Vec<Claim>
where claim includes aNetworkID
,InclusionProof
,TokenAddress
,Amount
, etc - described fully elsewhere. Meant to represent an incoming deposit from another chain.LocalExitRoot
for the current chainExits: Vec<Exit>
the set of exits from the chain (not sure ifExit
is the proper type)This assumes for the moment that the prover is storing/tracking the
LocalBalanceTree
andNullifierSet
but in the future, they will likely be stored by the chain.There are two benefits to this approach.
First, it standardizes and simplifies the interface, because we already will need to commit to the set of
IncomingLocalExitRoots
for the interop proof.Second, it avoids potential bugs where a chain might mistakenly attempt to double-claim an exit. If the chain operator had to sign the actual incoming exits, then the prover would need the chain to resubmit. In this case, the prover can simply ignore double claims.
There is a potential drawback: a misbehaving prover could take the
Vec<Claim>
data structure and either exclude part of it, or include valid exits from other chains that have not been claimed yet. There is no downside to this from a validity perspective - we don't care when claims are credited to a chain'sLocalBalanceTree
as long as balances are non-negative.However, it does create a potential data availability issue, if the prover includes extra
Claims
that result in an unrecoverableLocalBalanceTree
andNullifierSet
. I do think that there is an attack here: a validium never publishes its LER and a malicious prover includes claim(s) from this LER that makes it difficult to recover the LBT and Nullifier Set. However, this attack still exists in the case that a malicious sequencer includes a claim from a validium and signs a commitment to the incoming exit roots.I think that we should decide whether the chain operator will sign the pessimistic proof,
LBR
, orNullifierSetRoot
, in which case it doesn't matter whether the operator signs the set of claims.For the rollup case, it's important that the PP takes a commitment to the set of claims as a public input that can be eventually verified against a public input in the validity proof, so that we can guarantee that the
LBT
andNullifierSet
can be recoverable via L1 DA.Beta Was this translation helpful? Give feedback.
All reactions