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.
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.
- Proof-of-Tenure: Instead of using a system like Proof-of-Stake to prevent Sybil attacks and weigh the voting process, this consensus model uses Proof-of-Tenure. This allows anyone to participate in the consensus process without an upfront investment while maintaining security through a weighted tenure system. Good actions and uptime equate to a higher tenure score and selection weight, while bad actions and downtime result in a lower tenure score and selection weight.
- Asynchronous Validation: Nodes can achieve consensus on multiple transactions simultaneously, process “out-of-order” transactions, and validate transactions even in a high-latency environment—all while achieving fast finality.
- Inferred Voting: In typical consensus models that aren’t Proof-of-Work, there are usually “consensus rounds” where the network or a “committee” exchanges votes to reach consensus on transactions, consuming significant bandwidth. With inferred voting, this consensus model reduces up to 95% of extra network overhead while improving scalability by including “votes” (references) in all network interactions instead of explicitly exchanging messages for votes.
Phase I: User Submits a Transaction
- A user submits a transaction to the network, which is deterministically routed to a specific node based on the transaction hash.
- The node verifies the transaction (signature, addresses/usernames, balances, timestamp, etc.).
- The node begins forming an “event block” with the transaction to add to its own chain.
- The node randomly selects two node chains and their latest event blocks and references them along with its previous event block.
- The node signs the completed “event block,” appends it to its chain in the database, and propagates the event block to the network.
- Nodes receiving the event block verify the transaction inside it (signature, addresses/usernames, balances, etc.) and also verify the event block as a whole (node signature, references, etc.).
- They append that event block to the appropriate node chain in their local copy of the ledger.
- For consensus and finality to be achieved for a specific transaction, more than 50% of the current tenure weight of the network must reference that event block or an event block that came later in the same node chain.
- This enables inferred voting between nodes without direct communication of votes, reducing network bandwidth usage while making this consensus model as scalable—or even more scalable than current cryptocurrencies. It achieves this while remaining fully decentralized and supporting larger quantum-safe signatures. By referencing other event blocks from separate node chains, a node effectively votes for the validity of that event and all prior events in that chain.
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.

