0.1.1-develop.651 • Published 2 months ago

@proto-kit/protocol v0.1.1-develop.651

Weekly downloads
-
License
MIT
Repository
-
Last release
2 months ago

YAB: Protocol

Protocol contains to all circuit-aware data types and provers

StateTransitionProver

The StateTransitionProver takes a list of StateTransitions, checks and proves their precondition and update to the respective merkletree represented by the state root public input.

In the public input, the prover transitions from two fields:

  • state root
  • transitions hash

The transitions hash is the commitment to a hash list where every state transition gets appended one-by-one.

The StateTransitionsProver batches the application of multiple state transitions together. If the amount of state transitions if greater than the batch size, the seperate proofs can be merged together.

In the end, the publicInput of the StateTransitionProof should contain the following content:

  • fromTransitionsHash: 0 To prove that all STs have been applied, the transitionsHash must start at zero (i.e. a empty hash list)
  • toTransitionsHash This value must be the same as the transitionsHash in the AppChainProof to guarantee that all (and same) statetransitions that have been outputted by the AppChain have been applied
  • from- and toStateRoot These values represent the root of the state tree and will later be stitched together to arrive at the final stateroot for a bundle

BlockProver

The BlockProver's responsibility is to verify and put together the AppChainProof and StateTransitionProof. It verifies that the transitionsHash is the same across both proofs and then takes the new state root proved by the STProof.

In the end, the BlockProof proofs that:

  • the AppChain has been executed correctly
  • the resulting state changes have been applied correctly and fully to the state root

Multiple BlockProofs will then be merged together, signed by the sequencer and published to the base layer.

RollupMerkleTree

The RollupMerkleTree is a custom merkle tree implementation that supports the injection of a storage adapter. The interface for that adapter can be found as the interface MerkleTreeStorage.

Adapters can implement any storage backend, like In-Memory and Database, and supports a process called "virtualization". Virtualization is the process of layering different Adapters on top of each other. For example if I want to simulate some transactions to a merkle tree, I can virtualize a database adapter into a MemoryAdapter. If I am happy with the result, I can merge the results into the database or, if not, discard them without writing the changes to the database.

0.1.1-develop.651

2 months ago

0.1.1-develop.600

2 months ago

0.1.1-develop.455

4 months ago

0.1.1-develop.456

4 months ago

0.1.1-develop.457

4 months ago

0.1.1-develop.340

6 months ago

0.1.1-develop.336

6 months ago

0.1.1-develop.335

6 months ago

0.1.1-develop.334

6 months ago

0.1.1-develop.299

7 months ago

0.1.1-develop.298

7 months ago

0.1.1-develop.267

7 months ago

0.1.1-develop.263

8 months ago

0.1.1-develop.261

8 months ago

0.1.1-develop.260

8 months ago

0.1.1-develop.257

8 months ago

0.1.1-develop.254

8 months ago

0.1.1-develop.245

8 months ago

0.1.1-develop.244

8 months ago

0.1.1-develop.243

8 months ago

0.1.1-develop.242

8 months ago

0.1.1-develop.241

8 months ago

0.1.1-develop.240

8 months ago

0.1.1-develop.239

8 months ago

0.1.1-develop.211

8 months ago

0.1.1-develop.191

9 months ago

0.1.1-develop.190

9 months ago

0.1.1-develop.189

9 months ago

0.1.1-develop.188

9 months ago

0.1.1-develop.187

9 months ago

0.1.1-develop.186

9 months ago

0.1.1-develop.185

9 months ago

0.1.1-develop.165

9 months ago

0.1.1-develop.164

9 months ago

0.1.1-develop.163

9 months ago

0.1.1-develop.162

9 months ago

0.1.1-develop.161

10 months ago

0.1.1-develop.160

10 months ago

0.1.1-develop.156

10 months ago

0.1.1-develop.154

10 months ago

0.1.1-develop.153

10 months ago