dymensionxyz / dymint Goto Github PK
View Code? Open in Web Editor NEWSequencing Engine for Dymension RollApps
License: Other
Sequencing Engine for Dymension RollApps
License: Other
Some tests are unstable. Some examples:
We should make sure all tests are stable and consistent.
We would like to be able to configure a block time and also support 0 block time where the blocks are produced in a loop without a ticker.
Add a contrib dir with basic tools like git pre-commit hook for now
Until our SL will be ready for testing will start by mocking it's basic functionality.
IMO we need to support the following functionality for the first iteration:
newBatch
event.Currently some validations are commented out in the cosmosclient.
We are using a hybrid cosmosclient of ignite and parts copied from the cosmos-sdk.
Ideally we would like to write a cleaner design.
Currently the DA layer assumes a block
struct is given for saving and fetching.
We'll want to change it to handle the batch
struct.
Currently full nodes are only aware of new blocks upon submission to the hub.
High latency - if a light client is connected to a non-sequencer full node, it will only get a tx response when a batch is submitted which causes a huge tx response time for light clients connected to non-sequencer full node.
DDOS vector - For a sentry architecture (for DDOS protection) we will want the ability to position full nodes in a public subnet which communicate with the sequencer over a private connection.
Gossip the block and its commit before writing the batch to the hub.
All gossiped blocks are valid (i.e trusted sequencer)
Handle the case where the blocks gossiped are different then the block registered on the DA
There are multiple ways to mitigate DDOS attacks and maintain a high SLA. The decisions on which route to take are the responsibility of the sequencer operator and they will be slashed for downtime. We want to make sure though we provide the sequencer operator with a flexible DDOS strategy by allowing block gossiping.
Currently the sync mechanism naively relies on the success on each tx broadcasted without verifying it.
Change it to wait for an event from the SL.
Currently ApplyBlock, SaveBlock, Commit and SaveBlockResponses are executed as completely separate operations - this potentially leads to inconsistencies in database.
Ideally all those operations should use single KV batch to ensure atomicity.
Batch write to the DA and after to the settlement. In case the DA write succeeds but the settlement fails, we will retry the entire flow. The source of truth is the settlement so we don't care about the extra data written to the DA.
We will only be able to write to the settlement if we are synced and assuming it's our turn as decided by the SL.
The current batch size can be determined by comparing local height to syncTarget
which should reflect the current height on the SL.
Upon successful submission we can update the syncTarget
manually.
Currently we only support in memory store for the SL mock.
This causes the need to delete the data
dir after every local run.
Add support for persistent store.
Use tendermint benchmarking tools and change them to work with dymint
Currently it's unnecessary as the sync happens through the SL.
We will gossiping of blocks/headers data down the road for optimization of sync.
We need to change our basic mechanism of syncing to use the settlement layer as the source of truth of which blocks to fetch from the DA vs syncing all the blocks (not just the ORU's) from the DA as currently happens. Below is the basic flow as I see it.
1. Run a loop which constantly tries to sync blocks Until it reaches `syncTarget`
1. Loop gets its `syncTarget` from settlement layer events.
2. Every interval call `GetLatestBatch`
3. When current block height ≥ `syncTarget` Change `isSync=true`
4. If it’s the node turn to be an aggregator and `isSync=false` , need to wait until `isSync=true` before start producing.
1. Retrieving of blocks will be done from the DA.
3. Optimization: gossip blocks to peers for faster sync
Create a script to run the benchmarking tool with different parameters and upload the generated results to the repo
At the end we would like to receive a matrix which includes the different params and the TPS and latency from each param setup.
Currently the SL dymension client to have a generic handling of events by type (currently supporting only one type)
Currently code coverage is not enforced either in pre-commit hook or in the CI level.
Write relevant metrics which can then be used by node operators for monitoring and getting alerts on the node activity. Reference could be taken from tendermint monitoring.
TODO: define the relevant metrics
Currently we're importing the dymension module in order to use the relevant types for sending transactions.
This creates unnecessary coupling and was created as a quick solution instead of importing the proto file which required a different grpc module for generating the the relevant structures.
We would like to consume the settlement events in the manager and act upon it.
For testing purposes, we want an easy way to start a rollapp network with multiple peers where currently one is pre-selected to be the aggregator/sequencer and the rest are non-aggregator nodes syncing from the sequencer.
Currently some flags are required but are not enforced.
Moreover some should be set with sane defaults.
The purpose of this task is to improve the general experience of running the dymint node using the CLI.
The code contains a lot of references to optimint.
Change it to dymint and remove irrelevant docs and materials which doesn't apply to dymint.
Currently dymint needs to be ran as part of cosmos-sdk app.
For better testing and benchmarking abilities, we would like to have the ability to run dymint as a standalone using a kvstore
embedded app, similarly to what tendermint offers.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.