This is mainly here to serve as an example of a solution proposal.
- Any TSA
- Any mana mechanism
- A DRNG process that outputs a RN to the network for each milestone.
A tangle is built by nodes issuing and broadcasting transactions. A milestone must approve only a single un-approved milestone, that is at least s seconds old, and must not include more than t new transactions. Whenever a milestone is created, the RN assigned to it by the DRNG is used to order the set of nodes that were of the n top mana holders of any of the m latest milestones. (up to n*m nodes). Those nodes get weights 1, ½, ¼, ⅛, and so on. Each of those nodes can create a milestone, which will be assigned the node’s weight for that ‘round’. The consensus rule dictates that the weight of a tangle is the sum of the weights of its milestones.
The DRNG enables random leader election between high-mana nodes. In order to prevent a leader from halting the network by not issuing a milestone, secondary leaders are also set, with lesser weights to their milestones. The protocol-level rule of milestones only able to approve one previous milestones simplifies validation, heaviness-rule, and attack scenarios. The limit on amount of approved transactions and on time gap between milestones determine the required bandwidth.
This is a no-PoW, no-fee solution, that incentivizes high mana nodes to (cheaply) issue milestones in order to get their own transactions into consensus. The random ordering of high-mana nodes guarantees that no node can take over milestone issuance.
- A node’s past history of milestone issuance can be used along with mana value to prevent selfish-milestoning. (Punish nodes for issuing selfish or lazy milestones).
- The ‘m’ value can be varied between 1 and higher values.
First order issues (“Can this work”):
- Does such a DRNG process exist?
- How is time measured?
Second order issues (“How well does this work”):
- What kind of milestoning attacks are possible?
- How does selfish milestoning affect the Tangle?
About this example:
This is basically to say - If the first order issues can be solved, this should be a viable solution, and then the second order issues should be explored to determine the capabilities and possible limitation of this solution.