You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* sim-rs: extract generic sim infrastructure
* sim-rs: make message types protocol-specific
* sim-rs: scaffold linear leios
* sim-rs: add TXs to linear leios
* sim-rs: add RBs to linear leios
* sim-rs: Add TXs to RBs in linear leios
* sim-rs: propagate RB headers and bodies separately
* sim-rs: generate and propagate EBs
* sim-rs: generate and propagate votes
* sim-rs: add certs on-chain
* sim-rs: prune EB TXs from mempool
* sim-rs: handle conflicts
* sim-rs: support random tx sampling
* sim-rs: only include EBs if enough time has passed
* sim-rs: only filter EBs from mempool when enough time has passed
* sim-rs: only consider blocks on-chain when we have bodies
* sim-rs: add linear leios README
* sim-rs: EB producers may vote for their EBs
* sim-rs: Fix EB propagation
* Update README
"description": "Only supported by Haskell simulation."
145
151
},
152
+
"eb-body-avg-size-bytes": {
153
+
"additionalProperties": false,
154
+
"properties": {},
155
+
"type": "number"
156
+
},
146
157
"eb-diffusion-max-bodies-to-request": {
147
158
"additionalProperties": false,
148
159
"description": "Only supported by Haskell simulation.",
@@ -302,6 +313,18 @@
302
313
"description": "Determines whether a Leios pipeline has separate Vote (Send) and Vote (Recv) stages.\nIf this is set to `true`, it is recommended to set `leios-stage-active-voting-slots`\nto be equal to `leios-stage-length-slots`.\n\nOnly supported by Haskell simulation.",
303
314
"type": "boolean"
304
315
},
316
+
"linear-diffuse-stage-length-slots": {
317
+
"additionalProperties": false,
318
+
"description": "How long after the EB voting stage are votes allowed to diffuse.\nMatches L_diff from the paper.",
319
+
"properties": {},
320
+
"type": "number"
321
+
},
322
+
"linear-vote-stage-length-slots": {
323
+
"additionalProperties": false,
324
+
"description": "How long the EB voting stage is allowed to last.\nShould be more than 3x leios-header-diffusion-time-ms.\nMatches L_vote from the paper.",
325
+
"properties": {},
326
+
"type": "number"
327
+
},
305
328
"multiplex-mini-protocols": {
306
329
"description": "Only supported by Haskell simulation.",
The log file schema is currently identical to every other variant (though `pipeline` is always 0).
6
+
7
+
## Description
8
+
9
+
Whenever a node creates an RB, it also creates an EB. The RB header contains a reference to this new EB. If the RB producer has a certificate for the parent RB’s EB, it will include that certificate in the RB body.
10
+
11
+
RB headers are diffused separately from bodies. When a node receives an RB header, it checks whether that RB should be the new head of its chain. If so, it will request the RB body and the referenced EB (from the first peer which announces them).
12
+
13
+
When a node receives an RB body, it immediately removes all referenced/conflicting transactions from its mempool. If the RB has an EB certificate, it also removes that EB’s transactions from its mempool (note that this should be redundant based on the procedure below).
14
+
15
+
When a node receives an EB body, it immediately runs a VRF lottery to decide how many times it can vote for that EB; if it has any votes, it will transmit them to all peers. If the EB has been certified after L_vote + L_diff slots have passed, the node removes all of its transactions from the mempool (under the assumption that the EB will make it on-chain).
16
+
17
+
## New parameters
18
+
19
+
|Name|Description|Default value|
20
+
|---|---|---|
21
+
|`linear-vote-stage-length-slots`|How many slots the EB voting stage is allowed to last. For equivocation protection, this should be at least 3 * delta_hdr (which is currently 1 second).|5|
22
+
|`linear-diffuse-stage-length-slots`|How many slots are votes allowed to diffuse.|5|
23
+
|`eb-body-avg-size-bytes`|If `simulate-transactions` is false, this controls the size of the EBs we generate.|0|
24
+
|`vote-generation-cpu-time-ms-per-tx`|A per-transaction CPU cost to apply when generating new vote bundles.|0|
25
+
26
+
## Not yet implemented
27
+
- Freshest first delivery is not implemented for EBs, though EBs are created infrequently enough that this likely doesn't matter.
28
+
- We are not yet applying voting rules; if you’re allowed to vote, you will always vote.
29
+
- We are not yet accounting for equivocation.
30
+
- Nodes are supposed to wait until the diffuse stage to vote for an EB, they are currently voting as soon as they can.
0 commit comments