![]() |
|
Help with new consensus model? - Printable Version +- Hack Forums (https://hackforums.net) +-- Forum: Money (https://hackforums.net/forumdisplay.php?fid=241) +--- Forum: Crypto Currency (https://hackforums.net/forumdisplay.php?fid=380) +--- Thread: Help with new consensus model? (/showthread.php?tid=6291485) |
Help with new consensus model? - jkjoelbee - Feb 5, 2025 I'm working on a new cryptocurrency that uses the recently NIST standardized quantum-safe signature scheme, CRYSTALS-DILITHIUM at NIST level 5. The produced signatures are roughly ~5,000 bytes compared to ECDSA signatures at 64 bytes which causes a lot of unique bottlenecks for current consensus models, mainly regarding network bandwidth. There are technically other quantum-safe signature schemes (non-standardized) that offers slightly smaller signatures, but still at least 10x larger than ECDSA signatures. As a quick reference, if Bitcoin were to use quantum-safe signatures that were 2,000 bytes each, throughput of the network would be reduced from ~7 transactions per second to ~1 every 2 seconds. If other networks were to use quantum-safe signatures, their throughput would also be reduced in the same manner without significant changes to the protocol, which is the big issue with quantum-safe signatures (not to mention how a transition for a current cryptocurrency would be pretty much impossible without a major hard fork and community participation). So where I'm hoping I could potentially get some insights is the actual consensus model itself, which is inspired by IOTA and the Lachesis protocol. This consensus model uses asynchronous validation and inferred voting in order to reach consensus, and I'm wondering what you guys think and how it could be made better. As it stands now, I think the inferred voting in this model is a great foundational idea, but the execution is not so great. Here's how it works. This consensus model and ledger function essentially as a graph database, with each node representing a column, or in other words, a chain. This model relies on the following concepts to achieve consensus on any given transaction.
Phase I: User Submits a Transaction
What happens if the network is inactive for a while? Since transactions are confirmed by other transactions, the confirmation time can become unstable if activity is low. To keep confirmation times steady, nodes can create empty event blocks every few seconds if there are unconfirmed transactions. However, as the number of nodes grows, the time between these empty event blocks increases to prevent network overload. For example, if there were a million nodes and a one-second interval, half a million empty blocks could flood the network. But with only 100 nodes, a one-second interval would be fine. What if the node responsible for a transaction is offline? If the node assigned to process a transaction is offline, the network keeps trying to send it to that node. If the node comes back online, the transaction proceeds as usual. If not, the transaction expires after 60 seconds, and the user must resubmit it. Nodes that fail to process transactions lose tenure and may even be removed from the network, requiring manual rejoining. Transactions always expire in 60 seconds unless fully confirmed before that time. Should more than two references be used in an event block? Yes, typically around 25 references per event will be used. Each extra reference adds very little computation but requires about 32 extra bytes of data. How does the network handle splits or partitions? The system is designed to avoid network splits, but if one occurs, usually only one version of an event is confirmed while the other expires. In some cases, both/all versions expire. How does this consensus model prevent double spending? Honest nodes won’t confirm invalid transactions. If someone tries to double spend and only has enough balance for one transaction, the first will likely be confirmed while the second is rejected and expires. Here's some of the issues I'm having. Please let me know what you guys think and how this could be made better. I'm aware of the issue of deterministically routing a transaction to a node based on the hash. This makes network splits much harder to happen, but if that node goes offline, the user who submits a transaction will have to wait for the transaction to expire before resubmitting (or risk both going through). How could this be reworked to not affect the user experience negatively? How would distribution/minting work? The current thoughts are a node will have to post their own reward (deterministically calculated) to their own node chain every X amount of minutes, but not sure if this is the best way to go about it. Another thought I had is have X amount of the crypto be minted during every transaction, but that would be very unstable. Overall, I like the idea of this consensus model, but can't work out the details quite yet. Any help is appreciated. RE: Help with new consensus model? - jkjoelbee - Feb 5, 2025 (Feb 5, 2025 01:49 PM)Lowkey Wrote: How much do you know about this already? To answer the first question, I guess it depends on what you're specifically referring to and what the frame of reference is haha. About the minting and distribution, those were two separate examples. I've implemented both already and don't really like either one, but can't think of another low resource way to do it. The minting per transaction was one of the first ideas, but definitely leads to instability with supply and minting schedule. The current method implemented is essentially have a total network reward for all active nodes that are distributed every 60 seconds (and that reward is quartered every 2 years until supply cap is reached). Each node would deterministically calculate their own reward and then post it to their event chain, which is then propagated. The actual distribution amount per node for that 1 minute time frame would be determined from their tenure score. Is this essentially what you proposed for a "network-wide adaptive issuance schedule"? And yes the potential delayed finality is also an issue I'd like to fix, although it's not a "big" issue per say. As it stands with a small test network, that's not really an issue at all with such a small number of nodes and the empty event block "fail safe" (finality in under 1 second), but could potentially become an issue with a larger amount of nodes such as 10,000+. The finality time in the currently implemented way would be predictable based on the amount of nodes in the network, but could be seen as "unstable" since it could change on a day-to-day basis. Thank you for your input. |