Author

Topic: [XMR] Monero - A secure, private, untraceable cryptocurrency - page 837. (Read 4670673 times)

legendary
Activity: 2968
Merit: 1198
BTW, I am not knocking the contributions made as just by my cursory looks at the code it is a daunting task to be able to contribute anything code wise. I am just pointing out the Documentation HAS to be added as the work progresses and kept up to date for proper project management. this really doesn't need to be said though. Every programmer knows this.

This has been done. The new code has extensive comments, including block comments that describe design and implementation issues and decisions. Several other areas of the code have had comments added (by various project contributors). The original code apparently had nearly all the comments programmatically stripped out. (I have no idea how well commented it was before they were stripped, of course.) We have to do the best we can with that.



Good to know, are the code portions that have been fixed been commented as well? As soon as there is a flowchart the task of absorbing this project may be to the level where I can manage it. Smiley Getting old and forgetful is a real bitch. :|

You should really try using doxygen to create graphs. It won't create a flowchart of the whole thing down to the individual statement level but it does create call graphs, class heirarchy graphs, usage graphs, etc.

Quote
pull request

We use the same git source code control for documentation and the web site itself.

What this means is that if there is something in terms of documentation or the web content you think should be added, changed, improved, etc. you don't need to ask someone else to do it, you can (and should) do it yourself. Even small pieces are helpful.



legendary
Activity: 3836
Merit: 4969
Doomed to see the future and unable to prevent it
Quote
This is a list of the daemon and wallet RPC calls, along with their inputs and outputs.

According to this comment that should be the entire list, if my English comprehension is not failing me. Smiley

Yes that is clearly the intent. If you find some missing you can open issues or better yet a pull request with a fix.


That is another thing that has been confusing me, I keep seeing "Add a Pull request" and my understanding of pull requests are Code changes.
legendary
Activity: 3836
Merit: 4969
Doomed to see the future and unable to prevent it
BTW, I am not knocking the contributions made as just by my cursory looks at the code it is a daunting task to be able to contribute anything code wise. I am just pointing out the Documentation HAS to be added as the work progresses and kept up to date for proper project management. this really doesn't need to be said though. Every programmer knows this.

This has been done. The new code has extensive comments, including block comments that describe design and implementation issues and decisions. Several other areas of the code have had comments added (by various project contributors). The original code apparently had nearly all the comments programmatically stripped out. (I have no idea how well commented it was before they were stripped, of course.) We have to do the best we can with that.



Good to know, are the code portions that have been fixed been commented as well? As soon as there is a flowchart the task of absorbing this project may be to the level where I can manage it. Smiley Getting old and forgetful is a real bitch. :|
legendary
Activity: 2968
Merit: 1198
Quote
This is a list of the daemon and wallet RPC calls, along with their inputs and outputs.

According to this comment that should be the entire list, if my English comprehension is not failing me. Smiley

Yes that is clearly the intent. If you find some missing you can open issues or better yet a pull request with a fix.
legendary
Activity: 3836
Merit: 4969
Doomed to see the future and unable to prevent it
Quote
This is a list of the daemon and wallet RPC calls, along with their inputs and outputs.

According to this comment that should be the entire list, if my English comprehension is not failing me. Smiley
legendary
Activity: 2968
Merit: 1198
BTW, I am not knocking the contributions made as just by my cursory looks at the code it is a daunting task to be able to contribute anything code wise. I am just pointing out the Documentation HAS to be added as the work progresses and kept up to date for proper project management. this really doesn't need to be said though. Every programmer knows this.

This has been done. The new code has extensive comments, including block comments that describe design and implementation issues and decisions. Several other areas of the code have had comments added (by various project contributors). The original code apparently had nearly all the comments programmatically stripped out. (I have no idea how well commented it was before they were stripped, of course.) We have to do the best we can with that.

legendary
Activity: 2968
Merit: 1198
...

Hueristic, did you see the commit MoneroMooo posted which adds RPC definitions to the Developer Guide on the web site? That's work-in-progress, so not there yet, but on the way.



I haven't, is it a full list? From the posts it seemed it was not, maybe I misread the conversation?

Here's what I see there now.  I don't know if it is complete but it looks close:

https://github.com/moneromooo-monero/monero-site/blob/wallet-rpc/knowledge-base/developer-guides/wallet-rpc.md

This is what I was referring to.

...
There is not completely RPC documentation that is up to date

So now we know (which I didn't know earlier) there is active work-in-progress on it.
legendary
Activity: 3836
Merit: 4969
Doomed to see the future and unable to prevent it
...

Hueristic, did you see the commit MoneroMooo posted which adds RPC definitions to the Developer Guide on the web site? That's work-in-progress, so not there yet, but on the way.



I haven't, is it a full list? From the posts it seemed it was not, maybe I misread the conversation?

ADDED:

This is what I was referring to.

...
There is not completely RPC documentation that is up to date, unfortunately. The best place to look is the code, which in that respect is quite readable.

https://github.com/monero-project/bitmonero/blob/master/src/wallet/wallet_rpc_server_commands_defs.h
https://github.com/monero-project/bitmonero/blob/master/src/rpc/core_rpc_server_commands_defs.h

BTW, I am not knocking the contributions made as just by my cursory looks at the code it is a daunting task to be able to contribute anything code wise. I am just pointing out the Documentation HAS to be added as the work progresses and kept up to date for proper project management. this really doesn't need to be said though. Every programmer knows this.
legendary
Activity: 3836
Merit: 4969
Doomed to see the future and unable to prevent it

i assume you're referring to Dr. Moo, aka Moneromoo, and technically he's a funded part-time developer.

https://www.youtube.com/watch?v=Ll6LLGePYwM


My bad, part time. Well any programmer worth his salt that knows the code should be able to kick out a flowchart in no time. It's simple.
legendary
Activity: 2968
Merit: 1198
hey i think you mix two differen things up:

he was asking for RPC documentation. This means he just want to see a place where he can see what parameters he has to give to a function and what he will be getting back. the best solution to do this IS looking inside the code, since even people that can not code could read it if they know what they are looking for.

Yes that's exactly what I meant. Specifically the RPC definitions in the code. You don't even need to understand the code to read them.

Quote
how to deal with it? the funding page needs more content anyway and people at monero forum are trying to define a work package for the "monero about" page (https://forum.getmonero.org/7/open-tasks/346/about-monero-page-content). this would be the right way to go if your intention to change this should bear fruits one day . maybe we could inculde it there ?

Yes I agree, crowdfunding is a good approach to this.

Hueristic, did you see the commit MoneroMooo posted which adds RPC definitions to the Developer Guide on the web site? That's work-in-progress, so not there yet, but on the way.

legendary
Activity: 1260
Merit: 1008
hey i think you mix two differen things up:

he was asking for RPC documentation. This means he just want to see a place where he can see what parameters he has to give to a function and what he will be getting back. the best solution to do this IS looking inside the code, since even people that can not code could read it if they know what they are looking for.

the thing you are talking about is documentation about cryptonode internal functionallity like ring signatures, stealth addresses etc. i agree documentation on this things are not good enough for the common public, but this was not the right way to bring this issue up since smooths answer was the best one to give.

how to deal with it? the funding page needs more content anyway and people at monero forum are trying to define a work package for the "monero about" page (https://forum.getmonero.org/7/open-tasks/346/about-monero-page-content). this would be the right way to go if your intention to change this should bear fruits one day . maybe we could inculde it there ?

the problem is, there are not a lot people who really know how all this works. only the devs can make such graphs

I actually was just pointing out that even something as simple as the rpc list should be easily accessible and updated as a matter of course and good programming practices.

Since there is a full time developer now wouldn't it be a good idea to create a flow chart?

https://github.com/monero-project/monero-site/issues/49

As much fun as the cryptonote whitepaper is to read a programmer has no need for the theory behind but rather the implementation of such. That is what is sorely lacking ATM.

i assume you're referring to Dr. Moo, aka Moneromoo, and technically he's a funded part-time developer.

https://www.youtube.com/watch?v=Ll6LLGePYwM
legendary
Activity: 3836
Merit: 4969
Doomed to see the future and unable to prevent it
hey i think you mix two differen things up:

he was asking for RPC documentation. This means he just want to see a place where he can see what parameters he has to give to a function and what he will be getting back. the best solution to do this IS looking inside the code, since even people that can not code could read it if they know what they are looking for.

the thing you are talking about is documentation about cryptonode internal functionallity like ring signatures, stealth addresses etc. i agree documentation on this things are not good enough for the common public, but this was not the right way to bring this issue up since smooths answer was the best one to give.

how to deal with it? the funding page needs more content anyway and people at monero forum are trying to define a work package for the "monero about" page (https://forum.getmonero.org/7/open-tasks/346/about-monero-page-content). this would be the right way to go if your intention to change this should bear fruits one day . maybe we could inculde it there ?

the problem is, there are not a lot people who really know how all this works. only the devs can make such graphs

I actually was just pointing out that even something as simple as the rpc list should be easily accessible and updated as a matter of course and good programming practices.

Since there is a full time developer now wouldn't it be a good idea to create a flow chart?

https://github.com/monero-project/monero-site/issues/49

As much fun as the cryptonote whitepaper is to read a programmer has no need for the theory behind but rather the implementation of such. That is what is sorely lacking ATM.
legendary
Activity: 1105
Merit: 1000
My question isn't really answered yet:

how can a spectator know that the image key is associated with at least on of the inputs in the transaction?

See the whitepaper section 4.4, step VER.



thx, will reread it more carefully Smiley

Yes indeed, was going to point you there, but hadn't refreshed forum in a while (so smooth already answered).

edit2: the transaction private key is never used, am I right? It's only used to calculate the transaction public key?

It is used, but only by the transaction creator. It's how they create a "shared secret" with the receiver.

ECDH(receiverViewPub, txPriv) == ECDH(txPub, receiverViewSec)
legendary
Activity: 1470
Merit: 1000
Want privacy? Use Monero!
My question isn't really answered yet:

how can a spectator know that the image key is associated with at least on of the inputs in the transaction?

See the whitepaper section 4.4, step VER.



thx, will reread it more carefully Smiley
legendary
Activity: 2968
Merit: 1198
My question isn't really answered yet:

how can a spectator know that the image key is associated with at least on of the inputs in the transaction?

See the whitepaper section 4.4, step VER.

legendary
Activity: 3136
Merit: 1116
what is the different between monerowallet.com and mymonero.com?

I think mymonero makes you log in with list of words, and monerowallet lets you set up a user/pw more like most websites.
sr. member
Activity: 448
Merit: 255
what is the different between monerowallet.com and mymonero.com?
legendary
Activity: 1470
Merit: 1000
Want privacy? Use Monero!
My question isn't really answered yet:

how can a spectator know that the image key is associated with at least on of the inputs in the transaction?
If we can't verify that, Bob can just make up an image key, send it along and keep double spending his funds

It's probably obvious, but I don't see it Wink


edit: btw, thx for the annotations, Luiigiiiii Smiley
I knew that due to the denominations, there are a lot of in and outputs, but didn't want to make it more complicated than necessary.


edit2: the transaction private key is never used, am I right? It's only used to calculate the transaction public key?
legendary
Activity: 1105
Merit: 1000
just write a narrative of the diagram following the numbers. I've never tried this, here goes

1. from the blockchain, a transactions public key is mashed together with a random number
2. a specific output is used
3. bobs private key is used
4. the above three things are mashed together into a private key
5. another random number mashes with a public key
6. number 5 gets mashed with the following

and I got lost and im at work and peeps gettin coffee.

Well, no, that's not really how it works. Smiley

1. For the sender, a random transaction private key is chosen.
2. The sender does a ECDH with this private key and the receiver's public view key.
3. From that derivation and an output index, he is able to use the receiver's public spend key to create a one-time output public key for which only the receiver will be able to generate a private key.

To generate this private key:

1. The receiver does an ECDH with his private view key and the public transaction key (from tx extra)
2. From this derivation (which matches exactly that from step 2 above), the receiver does the same as step 3 above.
3. If his result matches, he knows he owns the output. He can then use his private spend key to generate the corresponding output private key (to actually spend the output).

I figured as much, but that was my point - the diagram is not very helpful for those of us that are all like "my compooter gone did done some mafs"

Thank you though! - the above is short and sweet, but dnaelor's actually matched up with the diagram numbers. And yes, one of those "floating hand draws and some guy talks" animation things would be cool

Yes, I was only covering the stealth address portion, which, IMO, is harder to "get" than the ring signature portion. dnaleor's covers the full transaction, but also isn't quite correct. Smiley

The graphic doesn't really explain stealth addresses at all, so the first part of this is basically inline, but I've added a bit to it anyway.
let me give it a try Smiley

Bob wants to spend XMR he received in his account and send it to Carol.
How does he compose the transaction?

A: Bob gets acces to his "real input" that was send to his "stealth address"
1. Bob needs the public key from the transaction that contains the output he received and wants to send - Bob needs to ECDH this key with his private view key
2. Bob also selects the exact number of the output from the transaction that contains the output he wants to send. The other output(s) in this transaction is/are change (Bob doesn't have the private key for those other outputs) Note: typically, due to auto-denomination, Bob will have more than one output per transaction that belongs to him.
3. Bob needs the "master" private key of his account - private spend key, to be precise
4. 1,2 and 3 are used to calculate the private key for the specific output he wants to send. (the public key for the transaction can be calculated from this private key - This is correct, but the public key is also stored on the blockchain.)

B: to protects Carol's identity, Bob will do the folowing to generate a "one time" public key for this transaction, making it impossible for others to link all transactions send to Carol to the same "stealth address"
5. Bob generates a random number scalar, this one isn't clear from the graphic at all
6. this random number is hashed into the transaction public key the transaction private key, and is scalar mult'd into the transaction public key
7. he selects the number associated with the outputs (due to auto-denom) that Carol will receive, the other output(s) is/are change that goes back to Bob.
8. he needs the "master" public key from Carol to be able to send it to her stealth address - Carol's public view key
9. 6,7 and 8 are used to calulate the public key for the specific outputs he wants to send

C: to "mix" the inputs, Bob creates a ring signature
10.  He selects the actual public key (+ that output's private key) from the output he wants to send, but he also adds other public keys into the mix.
11. to prevent double spending, Bob needs to send a valid "key image" together with the public keys of the outputs (or inputs if you prefer).
12. he signs the combination of inputs and the key image with his private key, prooving the key image is valid (Bob owns the private key associated with the key image) and that (somehow? I don't know how this works) one of the public keys is used to generate this key image, but as a spectator of the blockchain, we can't know which of the used outputs is "the real one that is being transferred". His private key and the other chosen public key(s) are used to create a ring signature; they'll be one signature for each input, collectively making a ring signature. The key image is an additional public key computed from the output private key (not public key) that's actually being spent.
13. This is the collection of outputs that is signed. He grabbed the "fake ones" from the blockchain. He doesn't need permission from the owners for that. This isn't quite right: those are the outputs that are doing the signing. A hash of the TX prefix is "what" is actually being signed.
14. This is the key image he signed. If Bob ever tries to send the same output again, the exact same key image will be generated and thus the double spend will be detected.
15. this "ring signature" is added to the transaction containing the publi keys that are used in the transaction and proving Bob's ownership of one of those inputs.



tell me if I was terribly wrong Wink


edit: damn it, luigiiii is faster than me Tongue
legendary
Activity: 1260
Merit: 1008
just write a narrative of the diagram following the numbers. I've never tried this, here goes

1. from the blockchain, a transactions public key is mashed together with a random number
2. a specific output is used
3. bobs private key is used
4. the above three things are mashed together into a private key
5. another random number mashes with a public key
6. number 5 gets mashed with the following

and I got lost and im at work and peeps gettin coffee.

Well, no, that's not really how it works. Smiley

1. For the sender, a random transaction private key is chosen.
2. The sender does a ECDH with this private key and the receiver's public view key.
3. From that derivation and an output index, he is able to use the receiver's public spend key to create a one-time output public key for which only the receiver will be able to generate a private key.

To generate this private key:

1. The receiver does an ECDH with his private view key and the public transaction key (from tx extra)
2. From this derivation (which matches exactly that from step 2 above), the receiver does the same as step 3 above.
3. If his result matches, he knows he owns the output. He can then use his private spend key to generate the corresponding output private key (to actually spend the output).

I figured as much, but that was my point - the diagram is not very helpful for those of us that are all like "my compooter gone did done some mafs"

Thank you though! - the above is short and sweet, but dnaelor's actually matched up with the diagram numbers. And yes, one of those "floating hand draws and some guy talks" animation things would be cool
Jump to: