Replies: 2 comments 7 replies
-
There are no transaction DAG analogs for major block level cryptographic optimizations, like pre-batching aka partial aggregation of Schnorr signatures and SNARKs, especially Groth16, and also IPP/MIPP/TIPP, which makes transaction DAGs a dead end performance wise. And transaction DAGs need more synchronization work too. We've protocols in development like XCMP and Sassafras which vaguely parallel some block DAG ideas perhaps, but we never noticed any benefits of block DAG protocols like Blockmania though. That said.. We welcome people with alternative ideas exploring our code base because good developers with fresh perspectives might contribute code quality improvements, but block DAGs sounds more relevant of course. |
Beta Was this translation helpful? Give feedback.
-
Well the issue is that substrate assumes that we have a state machine. In the state machine model, what a transaction does depends on the state and in an arbitrary way so we have no idea which transactions commute i.e. we end up with the same result whichever order they are in. A chain that uses the UTXO model is easy to adapt to a DAG - we only need to rule out double spends to show that transaction ordering does not matter. Substrate's runtime stuff e.g. pallets are juat too specialised to this state machine model to work in a DAG. It might be possible to adapt the host to work with a DAG, but you'd probably need a completely custom runtime. Of course Polkadot does have transaction parallelism on the parachain level. Parachain blocks basically do form a DAG. The state machines themselves form chains but things like XCMP form cross-links between parachains. That's how we do it. |
Beta Was this translation helpful? Give feedback.
-
Would anyone be interested in discussing what changes are required to be applied to the substrate to implement a tx/DAG-based system rather than (or together with) a blockchain? Avalanche-like, etc.
The issues I've encountered so far are:
Generally speaking, it only makes sense to run the consensus when there's a conflict, i.e. when two or more conflicting extrinsics are concurrently introduced into the system and cannot be chosen between anyhow but via a picking one via a consensus (i.e. they're actually "racing" to be finalized, but have a common invariant that'd be invalid if both are finalized).
Beta Was this translation helpful? Give feedback.
All reactions