If speed is your #1
(I hope not sacrificing security), can I ask why would you write this code in Java?
http://fiehnlab.ucdavis.edu/staff/kind/Collector/Benchmark/JAVA_Benchmark/I see with high Java optimizations and low C++ optimizations such as 32 bit C++ and 64 bit Java the gap can close to 96%, but at a standard with no preference to Java lovers trying to make it catch up, I see the base span of 71% of C++ performance. At a +29% increase just from runtime execution if numbers stay consistent in proportion even with the cryptographic functions, you could be seeing +580 tx/s based on your 2000 tx/s claim.
Second thing I see here, is that many are concentrating on
"confirmed tx/s", but rather banks leave transactions as pending for days until the funds finally reach their destination. The initiation of the transaction is purely just protocol aka memory pool, and the confirmation in reference to digital currencies can be see as
"gotten on a block ". You use account channels from what I understand of your implementation, how do you arrive at consensus if lets say I send merchant A coins, and also send myself coins from a node across the world at the exact same timestamp. How will the consensus be reached as to which is the valid transaction? How will the distributed network recover from lets say the trans atlantic cables being out of service cutting europe from the usa for an hour even, which at 2k transactions per second would be 7.2M transactions. And let's say 3.6M happen in US that directly conflict with 3.6M in europe, how will the network reorganize and reach a consensus once again?
Thank You,Viz.