Bitcoin Forum
May 26, 2024, 07:42:26 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 2 3 4 [5]  All
  Print  
Author Topic: QORA IS OPEN SOURCE !!!  (Read 6646 times)
TaunSew
Hero Member
*****
Offline Offline

Activity: 756
Merit: 506


View Profile
December 10, 2014, 03:00:34 AM
 #81

Took you a year to forge code?

I'm waiting for Jeff Garzik to compile the code and determine whether the hashes match.

There ain't no Revolution like a NEMolution.  The only solution is Bitcoin's dissolution! NEM!
Djinou94 (OP)
Legendary
*
Offline Offline

Activity: 1036
Merit: 1000


View Profile
December 10, 2014, 12:24:15 PM
 #82

Ok, here are some quick notes on Qora v. Nxt (I've looked at both sets of code a little while this evening.)

Initial Impressions

I can not rule out, beyond certainty, that this wasn't cloned but I can easily verify that if this started from a Nxt fork, a TON of work has been put in modifying the code.  Qora is organized completely differently than Nxt.  From the application entry point, all initialization methods execute completely differently.  If Qora took Nxt, he heavily modified it beyond recognition.

Personally, I've suspected that this wasn't a clone and I've never seen any reason not to trust Qora's claims.  So far, this seems to be likely true-- this is not a fork and is "new source".

Cryptography Analysis

Nxt uses SHA-256 to hash passphrases and then Curve25519 and SHA-256 again to create public/private key.  It signs it's data using, EC-KCDSA.

Qora is a bit of a different beast.  I'm still digging into this section of code but if my quick-scan of DB, Crypto and Account files has produced an accurate understanding, your wallet seed is a random value, stored to a secure DB. Each time a new account is generated, a nonce is appended to the the seed, and a new address is calculated and stored in the DB.

Specifically, an address account is generated by taking the Nonce+seed+Nonce value and double-SHA-256 hashing it to produce a unique account seed.

Next, a Key pair is generated using Ed25519 key pair creation, from the account seed.  To be clear, Ed25519 is slightly different than Curve25519 (which is what Nxt uses.)  After the Pub/Privkey pair is generated,the application takes the RIPEMD160 of the SHA-256 hash of the pub-key.  NExt, Qora prepends a version byte to this hash and then double, SHA-256 hashes the byte array and finally appends the first four bytes of the new hash, to the former.  These last four bytes are used as an account checksum and are used for account ID validation.

This process of a account generation is significantly different than Nxt.  Obviously, Qora makes use of a wallet, where Nxt does not.  Still, the process of creating a payment address is far more robust than Nxt.  In fact, this process is almost-exactly how BTC addresses are created, rather than Nxt.  The only variation is that the version byte is likely different (which results in the "Q" at the beginning of the address) and Ed25519 keys are used by Qora where ECDSA keys are used by BTC and it's clones.

Forging

First, let me go ahead and say that forging is something that I've never looked into deeply. I  understand the very high-level nature of it and I very much understand the big differences between traditional "1.0" coins and these new PoS "2.0" coins.  My notes on forging will, therefore, be very basic sense I know so little about the nuts-and-bolts.  Regardless, here are my observations.

The code is significantly organized in a different manner.  At first glance, I think Nxt and Qora us a completely different approach to come up with similar results.  Again, Qora is more succinct than Nxt.  I'll have to take a while longer to dig into this but since I can't seem to figure out how to build and debug java code through eclipse (Tongue yeah, pretty basic stuff, I know...) I can't run the code and step through this portion to clarify what's going on.  All I can verify is that Nxt vs. Qora looks completely different.  Also, Qora makes use of the global "Generating Balance" to determine the block Target.  From my scan of the Nxt code, no such value is used.  I think there is a bit more randomness to Nxt than their might be of Qora, but I won't stand by that.  Qora basically looks at the time since the last block, the forgers personal balance and the total balance of forging accounts.  It then uses a fairly straight forward process to test if a block has been forged.

I haven't been able to figure out what Nxt does.  This isn't because of poor Nxt coding.  It's because I don't have the time to look into it.  If a Nxt guru is around, please comment.

Final Thoughts

My vote is, no, this is not a clone.  If Qora was inspired by Nxt, I would make the guess that he read up a lot on it, possibly read through the source and thought "I can do that" and gave it a go at writing his own application.  Qora uses mostly different libraries and is structured significantly different. 

I also assume that Qora is a professional day-time coder, who works with a team of devs at a software firm or possibly large company.  Nxt feels like good, solid code, but it doesn't adhere to strict practices that big-team developers tend to follow since they are use to having to organize and share  code with co-workers.  I know that open source projects are often shared across devs, but having worked in both environments I can attest that "good" developers, in both areas of software engineering tend to have different coding approaches and styles because requirements differ.  Qora feels like it's written by an experienced, professional business coder, while Nxt feels like a large, open source project.

One piece of software isn't necessarily better than the other but they look VERY different.  This adds to strong evidence supporting that this is almost certainly NOT a clone.
merkalor
Full Member
***
Offline Offline

Activity: 177
Merit: 100


View Profile
December 10, 2014, 12:37:26 PM
 #83

Took you a year to forge code?

I'm waiting for Jeff Garzik to compile the code and determine whether the hashes match.


6 months
Yes please, more people who review the code, better it is

LISK    Develop Decentralized Applications & Sidechains in JavaScript with Lisk!
poncho32
Sr. Member
****
Offline Offline

Activity: 316
Merit: 250


View Profile
December 10, 2014, 03:28:59 PM
 #84

Took you a year to forge code?

I'm waiting for Jeff Garzik to compile the code and determine whether the hashes match.


6 months
Yes please, more people who review the code, better it is

The Nxt and Qora hashes definitely do not match because the two coins are coded differently using different cryptographic technologies. One programmer has already reviewed Qora's code and he thinks its not a Nxt clone as shown below.






Ok, here are some quick notes on Qora v. Nxt (I've looked at both sets of code a little while this evening.)

Initial Impressions

I can not rule out, beyond certainty, that this wasn't cloned but I can easily verify that if this started from a Nxt fork, a TON of work has been put in modifying the code.  Qora is organized completely differently than Nxt.  From the application entry point, all initialization methods execute completely differently.  If Qora took Nxt, he heavily modified it beyond recognition.

Personally, I've suspected that this wasn't a clone and I've never seen any reason not to trust Qora's claims.  So far, this seems to be likely true-- this is not a fork and is "new source".

Cryptography Analysis

Nxt uses SHA-256 to hash passphrases and then Curve25519 and SHA-256 again to create public/private key.  It signs it's data using, EC-KCDSA.

Qora is a bit of a different beast.  I'm still digging into this section of code but if my quick-scan of DB, Crypto and Account files has produced an accurate understanding, your wallet seed is a random value, stored to a secure DB. Each time a new account is generated, a nonce is appended to the the seed, and a new address is calculated and stored in the DB.

Specifically, an address account is generated by taking the Nonce+seed+Nonce value and double-SHA-256 hashing it to produce a unique account seed.

Next, a Key pair is generated using Ed25519 key pair creation, from the account seed.  To be clear, Ed25519 is slightly different than Curve25519 (which is what Nxt uses.)  After the Pub/Privkey pair is generated,the application takes the RIPEMD160 of the SHA-256 hash of the pub-key.  NExt, Qora prepends a version byte to this hash and then double, SHA-256 hashes the byte array and finally appends the first four bytes of the new hash, to the former.  These last four bytes are used as an account checksum and are used for account ID validation.

This process of a account generation is significantly different than Nxt.  Obviously, Qora makes use of a wallet, where Nxt does not.  Still, the process of creating a payment address is far more robust than Nxt.  In fact, this process is almost-exactly how BTC addresses are created, rather than Nxt.  The only variation is that the version byte is likely different (which results in the "Q" at the beginning of the address) and Ed25519 keys are used by Qora where ECDSA keys are used by BTC and it's clones.

Forging

First, let me go ahead and say that forging is something that I've never looked into deeply. I  understand the very high-level nature of it and I very much understand the big differences between traditional "1.0" coins and these new PoS "2.0" coins.  My notes on forging will, therefore, be very basic sense I know so little about the nuts-and-bolts.  Regardless, here are my observations.

The code is significantly organized in a different manner.  At first glance, I think Nxt and Qora us a completely different approach to come up with similar results.  Again, Qora is more succinct than Nxt.  I'll have to take a while longer to dig into this but since I can't seem to figure out how to build and debug java code through eclipse (Tongue yeah, pretty basic stuff, I know...) I can't run the code and step through this portion to clarify what's going on.  All I can verify is that Nxt vs. Qora looks completely different.  Also, Qora makes use of the global "Generating Balance" to determine the block Target.  From my scan of the Nxt code, no such value is used.  I think there is a bit more randomness to Nxt than their might be of Qora, but I won't stand by that.  Qora basically looks at the time since the last block, the forgers personal balance and the total balance of forging accounts.  It then uses a fairly straight forward process to test if a block has been forged.

I haven't been able to figure out what Nxt does.  This isn't because of poor Nxt coding.  It's because I don't have the time to look into it.  If a Nxt guru is around, please comment.

Final Thoughts

My vote is, no, this is not a clone.  If Qora was inspired by Nxt, I would make the guess that he read up a lot on it, possibly read through the source and thought "I can do that" and gave it a go at writing his own application.  Qora uses mostly different libraries and is structured significantly different.  

I also assume that Qora is a professional day-time coder, who works with a team of devs at a software firm or possibly large company.  Nxt feels like good, solid code, but it doesn't adhere to strict practices that big-team developers tend to follow since they are use to having to organize and share  code with co-workers.  I know that open source projects are often shared across devs, but having worked in both environments I can attest that "good" developers, in both areas of software engineering tend to have different coding approaches and styles because requirements differ.  Qora feels like it's written by an experienced, professional business coder, while Nxt feels like a large, open source project.

One piece of software isn't necessarily better than the other but they look VERY different.  This adds to strong evidence supporting that this is almost certainly NOT a clone.
Djinou94 (OP)
Legendary
*
Offline Offline

Activity: 1036
Merit: 1000


View Profile
December 11, 2014, 01:06:36 AM
 #85

It's definitely not a clone

Congrats guys, open source really matters!

First look thoughts:

1. This is definitely not another Nxt fork
2. What's in native libs? I guess the should be opensourced as well.
3. I did successfully run Qora under Intellij Idea by importing Eclipse project in the repo and adding native libs to a project
4. JSON settings are looking cool, but comments are needed, I guess, especially for non-coders
5. Got unsafe memory issue related to MapDb https://github.com/Qora/Qora/issues/8 . I guess it's better to avoid off-heap operations, for current MapDb state at least. I bet I did read Jan Kotek's article on how to do that.
6. Worse issue, I got not much useful message trying to run a node after crash https://github.com/Qora/Qora/issues/9 . Verbosity matters here.
7. Code seems to be more clean & easier to read than Nxt at the moment. However, after adding features / patches it could be the same, so have luck guys  Grin   And formatting isn't Sun(Oracle)'s standard http://www.oracle.com/technetwork/java/codeconvtoc-136057.html (the same is true for Nxt).
8. Commented code is not good and not necessary with VCS (the same is true for Nxt at the moment as well)
9. What's the Orders launcher about  Huh
10. Any detailed description of Arbitrary Transaction available?



All I can verify is that Nxt vs. Qora looks completely different.  Also, Qora makes use of the global "Generating Balance" to determine the block Target.  From my scan of the Nxt code, no such value is used.  I think there is a bit more randomness to Nxt than their might be of Qora, but I won't stand by that.  Qora basically looks at the time since the last block, the forgers personal balance and the total balance of forging accounts.  It then uses a fairly straight forward process to test if a block has been forged.

I haven't been able to figure out what Nxt does.  This isn't because of poor Nxt coding.  It's because I don't have the time to look into it.  If a Nxt guru is around, please comment.

You can get Nxt forging algo in slighlty simplified form in my blog http://chepurnoy.org/blog/2014/10/inside-a-proof-of-stake-cryptocurrency-part-2/ . And I'm going to investigate Qora's forging algo(got no detailed view from first investigation). I can even publish a blog on that if it's interesting, and make executable simulation of Qora forging process(I already made that for Nxt https://github.com/ConsensusResearch/ForgingSimulation )


I haven't been able to figure out what Nxt does.  This isn't because of poor Nxt coding.  It's because I don't have the time to look into it.  If a Nxt guru is around, please comment.


I am not a Nxt guru but i reviewed the Nxt Code and i understand the Nxt forging algo.
Qora's forging Algo is definitely better, if it actually works (safe).
I think the biggest secret is still hidden in these native files.

I am not a crypto-expert, but i think
the problem with ECDSA is that for a specific public key and specific data to sign there are several valid signatures. That makes it normally a bad choice to determinate the next forging account.
Qora must have somehow solved that problem.
But as long as these native libs are not OS we will not know how.


Djinou94 (OP)
Legendary
*
Offline Offline

Activity: 1036
Merit: 1000


View Profile
December 11, 2014, 01:09:26 AM
 #86

AT integrating almost ready!

Congrats to qora for making it OpenSource. Now I am sure nobody will be able to say that qora is a nxt clone. Soon AT will be also launched and added to the repo. I will try to synchronize both releases of AT (qora and burst) so we can also run some atomic cross chain txs. Burst version ( as it is a nxt clone ) is also almost ready, Qora needs some work but is almost ready.  Also, while integrating AT in qora platform we added more functionality (new op codes), you can check the documentation in www.ciyam.org/at to see more info.


https://bitcointalk.org/index.php?topic=881230.200
Pages: « 1 2 3 4 [5]  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!