How to get the r value for commitment in mlsag sign Refer to ZtM2 chp3.5, we can see that in step 5

rπ = α − cπ * kπ (mod l)

It's fine for public-key-ring part because there is private key kπ.
But what if it is commitment-ring? How to do with no kπ?
Please help to answer it. Thanks!

#Thanks for the reminder from @Koe.
Refer to ZtM2 chp 5.4...
The kπ here for "commitment-ring" should be xj-xj'
So that the challenge is
cπ+1 = Hn(m, Kπ, [α1G], [α1*Hp(K)], commitment_to_zero, [α2G])

Where commitment_to_zero can be derived fromxj-xj'.


How to get components of m (message) for verifying I am trying to verify a transaction manually..but not knowing some components of message m.

The message is derived from:

m = H( H(tx_prefix), H(ss), H(range proofs) )

where

tx_prefix = {
    tx version (ringCT = 2),
    inputs {key offsets, key image},
    outputs {one-time addresses},
    extra {transaction public key, payment ID or encoded payment ID, misc.}
    }

ss = {
    signature type,
    transaction fee,
    pseudo output commitments for inputs,
    ecdhInfo (masks and amounts), output commitments
    }.

My questions are...

[1.] What is the format of key offsets?

Take a transaction as an example:

b43a7ac21e1b60ad748ec905d6e03cf3165e5d8c9e1c61c263d328118c42eaa6

The key offsets above is [799048, 782511, 1197717, 216704, 841722]. However they should not be the input format for hash. What the right format looks like?

[2.] What is the format of transaction fee?

The txnFee above is 26000000000 but the hex format is 8088e2ed60. Should I use 8088e2ed60 instead? And how it transforms from 26000000000?

[3.] What is the range proofs

In the example, Is the range proofs "rangeSigs"?

I am stuck here for a long time.. Please help on it, many thanks!

Consult to the Varint description and transform from decimal to variant format for key offsets and transaction fee.

[1.] What is the format of key offsets?

799048 -> c8e230
782511 -> afe12f
1197717-> 958d49
216704 -> 809d0d
841722 -> faaf33

So the key offsets should be c8e230afe12f958d49809d0dfaaf33

[2.] What is the format of transaction fee?

Same as [1.] transaction fee should be 8088e2ed60

[3.] What is the range proofs?

I am not sure but I think the range proofs in MLSAG verifying is the concatenation of all asig and Ci. If it's wrong please correct me. Many thanks!


What is the checksum at the end of a mnemonic seed? What is the meaning of the checksum at the end of a mnemonic seed?

Is the checksum always a word found earlier in the mnemonic? what is the purpose of it?

Can a valid mnemonic seed be created without a checksum?

General

The purpose of a checksum is exactly what the word means - to "check" something, and the simplest form of it is to check the sum.

In general, checksum is a way to let you know if you got the right sequence of numbers. Let's say you have to write down 4 numbers, and use an extra 5th digit as a checksum where the 5th number is calculated by summing the first 4 number and taking the last digit of the result.

Example:
63841
(6+3+8+4 = 21)

Now, if I mistype one digit:
63941, the checksum would be invalid (6+3+9+4 = 22) and the mistake would be detected before, for example, sending funds to wrong acct. number or whatever you use the number for.

Monero Mnemonic Seed Checksum

The checksum is well described on https://xmr.llcoins.net/addresstests.html, and it's insightful to download the javascript code and inspect it to find answers.

  Mnemonic (Electrum or Deterministic) Style – In this style, the
  Private View Key is derived from the Private Spend Key, so you only
  need to remember one thing: the seed, which is actually just a
  representation of the Private Spend Key itself. This 256-bit scalar
  can be easily converted to a "24-digit" Base1626 "number" in the form
  of a mnemonic seed, which is 25 words long with the last word being
  used as a checksum. Mnemonics convert on a ratio of 4:3 minimum: four
  bytes creates three words, plus one checksum word; eight bytes creates
  six words, plus one checksum word; and so on.

So, yes - last word is the checksum, and current implementation won't accept 24-word seed. In theory, one could recover his wallet from 24-word seed, but would need to tweak the code himself to skip the checksum check, or recompute the 25th word before restoring the account.

Looking into the code, we find that the checksum is calculated by concatenating first 3 letters (if English dictionary is used) of each word, calculating CRC32 checksum of the string, and picking the word from the list, corresponding to the checksum result (divide CRC32 by number of words being checksummed, and the result is a 0-based index of the checksum word).

So, checksum word can be unique (i.e. not found earlier in mnemonic), but it will always repeat one of the words found in your mnemonic. And yes, you could, with some tweaking, create a mnemonic without the checksum, but it's not advised to do so.

Monero Mnemonic Seed Checksum Calculation Example

Inspecting the mnemonic.js file found on this site, made by one developer from the core team (Luigi1111), we find the relevant function:

function mn_get_checksum_index(words, prefix_len) {
    var trimmed_words = "";
    for (var i = 0; i < words.length; i++) {
        trimmed_words += words[i].slice(0, prefix_len);
    }
    var checksum = crc32.run(trimmed_words);
    var index = checksum % words.length;
    return index;
}

What that function does is: assemble a string of prefixes of each of your 24 words, run a CRC32 on that string and use the resulting number to pick a checksum word. The word is picked from one of the words found in your mnemonic.

For example, if we have the mnemonic:

skirting trash phase buckets apology gags sedan coffee vinegar else fifteen pitched idled gorilla siren cucumber urban junk vastness laboratory rift rhino situated taxi

The string which we feed to CRC32 will be:

skitraphabucapogagsedcofvinelsfifpitidlgorsircucurbjunvaslabrifrhisittax

and the result of CRC32 performed on it will be
1790087523.

Performing a mod on that number with the number of words in your checksummed data (24 in this case) will give you an index of the checksum word:

3.

So, the checksum is the 4th (note that index is 0-based) word of your mnemonic:

buckets.

Why is it good to have?

The main purpose is the error-check. If you're restoring a wallet from backup and make a mistake somewhere, the checksum would tell you that you made a mistake. Of course, you could also check yourself that the resultant address is matching, but this is a lighter check done automatically so that you don't have to compare all those letters.

In addition, it helps with recovery if you lose one or two words. If you know the matching address and have the checksum, it takes about 40 minutes to recover the 2 missing words using one tool written in javascript. Without the checksum it would take roughly 24 times that - 16 hours!


Does /get_transaction return ring signatures or key image? i am trying to use https://www.getmonero.org/resources/developer-guides/daemon-rpc.html#get_transactions To get the signatures.. But i was wondering if they are the correct data or not?


Previous balance showing after upgrade and resync I'm new to this, so please bear with me. I'm using GUI 0.17.1.4 to run a single wallet on a Mac.
I made a transfer from my exchange to my wallet. The transfer didn't arrive, so I went to getmonero.org to look for help and saw that I needed to upgrade to 0.17.
I updated and the transfer arrived successfully. At that point, my antivirus software quarantined a file related to Monero. I didn't make a note of the file's full name, but it included "MacOS:Milner" or similar. I restored the quarantined file from antivirus and all appeared fine.
However, after closing the wallet and reopening it later, the daemon wouldn't start. Searching for a solution took me to this solution. I followed the instructions described there, which involved resyncing from scratch.
The daemon now starts, but the balance and most recent transactions are from before I upgraded to 0.17. The most recent transfer has gone. What's the best way for me to recover please?

This problem was caused by me not understanding how the GUI update process works. I didn't realise I had both the old and new versions on my system, and was inadvertently opening the old version. My balance is now accessible as expected.


Do stealth address only work with elliptic curve cryptography ? Monero uses elliptic curve for stealth address generation. And all the things i have read about stealth addresses mention elliptic curve. My question is are there other cryptosystems out there which could allow us to do the same ?

If so, do we also have PQC-Algorithms which would allow us to create stealth addresses ? Not that I'm concerned about Quantum Computers breaking privacy but I'm just curios.

I found a few related answers and comments regarding the importance of elliptic curve cryptography for stealth addresses, but none of them seem to answer this question directly.

On a reddit thread about stealth address there is this comment by "Natanael_L" which says:

  ECDH with the private key of Bob gives the same result as ECDH with the private key of Alice and the public key of Bob. This is a neat feature of the Elliptic Curve cryptography algorithms (some other algorithms have this too, but there's more to come....

Also i found one related question what-is-elliptic-curve-cryptography-and-why-is-it-important-to-monero

But nowhere is mentioned if this is feature which only exists on Elliptic Curve Cryptography or if there are also other possiblities.

Monero's stealth addressing works like this:

You start with a destination wallet address, which is a pair of public keys A, B which have corresponding private keys a, b known only to the recipient.
A Diffie-Hellman exchange is performed, resulting in a shared secret which can be transformed to produce a private key s.
A public key S corresponding to the private key s is determined.
A homomorphic encryption scheme is used to combine S with B. Homomorphic means that the private key corresponding to the public key S+B can be determined only by someone (i.e. the recipient) that knows s and b. S+B is published as the one-time output public key, and only the recipient (and not the sender or anyone else) can determine the private key for this one-time output. This means the sender can't spend the newly created output themselves.

Steps 1-3 can be done using any asymmetric encryption scheme, such as RSA.

To achieve step 4, you need an asymmetric encryption scheme which is homomorphic. I'm not an expert, but it's possible that the RSA unpadded scheme may work for this: https://en.wikipedia.org/wiki/Homomorphic_encryption#Unpadded_RSA

I don't know if any PQC asymmetric encryption schemes exist which support homomorphic encryption.


What happens if we send using an unencrypted payment ID after the new v0.15 upgrade? With the upcoming v0.15 update for Monero, unencrypted payment ids are going to be removed. But what happens if someone sends to a Monero address using one of these payment ids? Would the coins be lost since payment ids aren't supported anymore?

The Monero wallets, from v0.15, will no longer allow transfers with an unencrypted payment ID.

No coins will be lost in an attempt to use these unencrypted payment IDs; the sending wallet will simply report an error explaining that unencrypted payment IDs are bad for privacy and abort the transfer.

The short, encrypted payment IDs can still be used (such as the ones in integrated addresses), so either use those or better still, use subaddresses.


Not enough spendable outputs error on MyMonero Sometimes when I attempt to send multiple payments (totaling less than the sum of my balance) in a short period of time from MyMonero.com I receive the error message:

  Not enough spendable outputs

Why am I seeing this message, when I know that I have enough Monero to send the transactions?

When you send a Monero transaction the sum of the outputs used in the ring transaction will exceed the amount of your payment. Once the transaction is confirmed the change is returned to your wallet. Change like all incoming transactions is unlocked after 10 blocks.

Change:

  Monero sent as part of a transaction, but unique in that returns to your account instead of going to a recipient.

Monero does not support chained payments in the same block. Doing so would not be practical on chain. Off chain solutions would bring additional security and privacy concerns.


how to login on xmrpools.net I read the "Getting Started" section, but i dont quite understand it.  I downloaded XMR-AEON and have it setup with my MyMonero Payment address.  Everything seems to be working, its mining, Im getting a hashrate, and when i enter my payment address in the dashboard to see my status it shows up, but i still cannot log in.

When setting up XMR, it asked for the Pool address, i entered.  My payment address, i entered.  And password.  It said I could leave it blank, put in "x", or enter my own.  I entered my own, thinking this is what I use to login on xmrpools.net.  but this doesnt seem to be the case...

I started mining right away in the XMRPool, using my payment address as the username and [worker label]:[my email] as the password.

When I login, I paste my payment address and use my email as the password. No worker label.

In the dashboard, paste your payment address again and click track live stats, so you can get a nice graph and some additional information.


Does using seed to restore a wallet change its address? I have been using a wallet generated using monero-wallet-cli on Ubuntu. I have not yet received funds on this address, but have been mining in a pool using this address.
I had a harddisk problem so I used a new harddisk to install Ubuntu on, and restored my wallet from seed.
I noticed the wallet-id that I used for mining on the previous harddisk, is different from the wallet-id that is generated from the 25 word seed. I have tried twice, both times the same (new) id was generated.
As I have not received any payment, I can not check wheter the account balance is the same, but I'd like to receive the mining payments, once my threshold is reached.

Is this normal behaviour? Are the 2 address id's pointing to the same info? A Google search did not get me an answer to this question.

A same seed will restore the same wallet. Checking the address is a good way to check that you got your seed right. For example, the seed

tanks ticket muffin eclipse lectures degrees gymnast technical deodorant hefty lunar casket zapped bovine skater bypass frying acquire inkling ammo army myriad soggy tepid hefty

will always result in the address

4ABD4g9KKzqdXtMdmgKF4pHg1qPthzmtBXiBMKLT3rPT4L7gCAKMZ1yD9nA3JVCVRpWn9X3aZeqKkfX81bemg2V2UQnve4o.

However, that's a standard address. If you use integrated address (which is just your address + some random data packed in), then it will be slightly different for each different payment ID packed in:

4Kst5UxowGMdXtMdmgKF4pHg1qPthzmtBXiBMKLT3rPT4L7gCAKMZ1yD9nA3JVCVRpWn9X3aZeqKkfX81bemg2V2hVfa2bxWtuzMXeekK9 (payment ID = 1961b07fc64d25b5)
4Kst5UxowGMdXtMdmgKF4pHg1qPthzmtBXiBMKLT3rPT4L7gCAKMZ1yD9nA3JVCVRpWn9X3aZeqKkfX81bemg2V2hbkcazxrXezR8kXAqL (payment ID = ba01b042e8b04bd5)

and so on.

Even if the letters look different, all these addresses are encoding the same thing. Your public spend and public view key + optional payment ID.

Funds sent to all 3 addresses will go to the same wallet, but the last 2 will come in with a "message" (payment ID).

You can play around to see how it works here.


Can monero be compiled/linked statically? As my system updates to newer versions of certain libraries, monerod breaks every once in a while with errors among the likes of:

monerod: error while loading shared libraries: libunbound.so.2: cannot open shared object file: No such file or directory

I then recompile and the binary is back to a working state by having it realize that we're now at libunbound.so.8.

In order to avoid that necessity, I'd rather statically link the entire binary (ending up with one big single file).

A Stackoverflow answer on the topic suggests that success cannot be guaranteed, but maybe any of you has experience on this?

Maybe there's an even better way to permanently solve this?
(No "symlink the old name to the new lib and cross fingers" please)

You can't make static monero binaries. The closest you can do is a dynamic build which links statically against most libraries, such as boost, etc.

The Makefile has a number of predefined targets for this, called *static* (because close enough). For example:

  make release-static

You'll still end with a few dynamic libraries, but a lot fewer.


How can I use Monero to pay a Bitcoin accepting merchant? Can I use Monero to pay a Bitcoin accepting merchant in a untraceable manner?

If so what is the process?

Any business that accepts Bitcoin can be paid with XMR.to which automatically converts Monero from the buyer into Bitcoin that will promptly be sent to the Bitcoin merchant.

Shapeshift.io offers a similar service to xmr.to but with slightly slower payments (they wait for tx confirmations instead of scanning the mem pool like xmr.to) and much lower maximum transaction sizes.

The only caveat to the above statement is that the goods/services being purchased must cost less than the maximum transaction limits (As of August 2017, 20BTC for xmr.to and <1.5BTC for Shapeshift.io).

Although the BTC payment to the merchant can be traced back to xmr.to or Shapeshift, it cannot be traced back to you because your Monero payment to xmr.to or Shapeshift was untraceable.

For maximum privacy connect to xmr.to or Shapeshift over Tor.

xmr.to logs are deleted in the following manner:

  To be precise, we purge your order from our database after the bitcoin payment we make on your behalf has 144 confirmations (about 1 day). After 2 more days, your order will be purged from our backups. That means all records of your payment will be gone from our system after 3 days.

If using Shapeshift, do not use the return address feature for an XMR address that can be tied your public identity.


How to restore Monero RPC Wallet from seed I would like to use the seed to restore wallet from RPC. However, I couldn't find it in this RPC command list below.

https://www.getmonero.org/resources/developer-guides/wallet-rpc.html#create_wallet

If it is not possible, would there be any other practical way to do this task?

A command has been added to restore from a seed, the documentation is just a little outdated.

The parameters are:

  uint64_t restore_height;
  std::string filename;
  std::string seed;
  std::string seed_offset;
  std::string password;
  std::string language;

Which should all be self-explanatory.


Did not receive a transaction after a day from supportXMR I was using supportXMR for a few months and I had received 3 transactions of a little less than 0.3 XMR at certain times before. However, now on their end it shows that they sent their fourth 0.3 XMR yesterday with an assigned Txn Hash and 6 mixins,  yet on my monero-cli I don't see the transaction. I even upgraded from v0.11 to v0.12, yet the balance did not change.

My monerod is fully sync as it shows:

Refreshed 1557004/1557004, synced, daemon RPC v1.19

and using show_transfers, it only shows the ones up to this one and the date and the amounts match with the one mentioned on suppoerXMR, however, the last payment is not shown. Also show_transfers pool does not return anything. Is there anything wrong on my end? How can I verify this issue? Thanks.

I found the issue and leave the answer here.

As of later March, there was a hard fork on the Monero network and the old databases (on Mac and Linux is found at ~/.bitmonero folder should be removed and refreshed. So all needs to be done is the following:

1- Kill/close the running daemon
2- remove the `~/.bitmonero` folder. Note that it is a hidden folder.
3- Download the latest official Monero binary from [getmonero][1]. As of now it is `v.0.12` and paste it into a new folder.
4- Copy your keys and wallet files from the previous folder.
5- Run the monero daemon (`./monerod --detach`) and wait till it synced with the new fork. (You can use external untrusted nodes instead of running daemon locally, but that always comes with its own risk)
6- After daemon was synced connect the wallet to the daemon and you find the missing transaction.


Will there ever be a Monero Foundation? Major cryptocurrencies like Bitcoin and Ethereum have foundations, but Monero does not. Why does one not exist? And will there ever be a Monero Foundation?

No "Monero Foundation" exists at this point because nobody has taken the initiative to create one.

The priorities and actions of both the Bitcoin Foundation and the Ethereum Foundation have been criticized by large parts of their respective communities. Sometime foundations can develop conflicts of interest with the community they were designed to support.

So far the Monero community has seemed more receptive to the idea of supporting projects with a more specific and well defined purpose via the Forum Funding System or "FFS". The closest we have seen to a "Monero Foundation" so far was the Monero Economy Workgroup or "MEW" and it was subsequently abandoned.

The Monero community seems very keen on not centralizing decisions more than necessary. In the short term, it more likely for more specific tasks to be funded by the FFS rather than a "Monero Foundation" being created with undefined or open ended objectives.

If any private party wants to create and fund a Monero Foundation on their own they are free to do so. The degree guarantee of community support (or lack thereof) would depend on its purpose and execution of its stated objectives.


ELI5 why Monero blacklists are impossible If an exchange is given a court order generated by an uneducated prosecutor to blacklist deposits from a Monero certain address, what is the simplest way to inform the prosecutor of the impossibility of that request?

The recipient of a transaction does not know the address the money came from. Monero addresses aren't on the blockchain at all.

In Monero, every single output is on its own one time address. Only someone with the view secret key of the matching Monero standard address can tell whether a given output corresponds to that address. So the recipient of the transaction, having just their own view secret key, can only tell the incoming outputs are for that address (good!), but cannot tell where they are from.

A good way to visually understand this is to imagine a large open ground, with lots of RC vehicles in there, and a number of people at the side, each controlling a number of those. The people on the side have their standard address and keys (the remote controls), and the state of the vehicles on the open ground is the blockchain.

Now, an observer can't tell which vehicle is controlled by whom. Everyone's playing with their remote controls, vehicles drive around, but no way to tell who controls what.

Now, a vehicle sports a slogan a prosecutor deems Very Bad(tm). The prosecutor wants to know who controlled that vehicle. No way to know without extraneous evidence (eg, CCTV evidence showing the person handling the vehicle, etc).

Now, every single person will know which cars are theirs, and they're able to leave them stopped, or move them around. But an observer doesn't know.

You can then give one of your remote control to another person. That person now controls your car, and you can't anymore. Someone watching the open ground can't tell what happened. The car can still move around, but the controller is different.

Note that this addresses your question about "funds coming from a certain monero address". There are other arguments that can be made for other requests such as "funds moving this particular output on the blockchain", if you were to ask that question :)


How do I convert my old v0.13 node to a v0.14 pruned node when I already have the full 65gb downloaded? I run monerod via the Ubuntu command line. I'm on v0.13 and I want to prune my Monero node's database and take advantage of the v0.14 features. How can I do this? What command do I need to type?

Upgrade to v0.14.x and after you have upgraded and run, the database will be migrated to the latest version. You can then exit the daemon and run monero-blockchain-prune, which will prune the database.

Note that pruning is not scheduled for release until 0.14.0.1.


Equivalent of TX index=1 in Bitcoin I believe that the Monero blockchain database is already the equivalent of running Bitcoin core with txindex set to 1. Is this correct?

Are there any options to increase the TX or other metadata stored in the blockchain database, or is everything possible already being stored and indexed?

Blocks, txs, outputs, and spent keys are already indexed. What else is there? The complete DB schema is here https://github.com/monero-project/monero/blob/master/src/blockchain_db/lmdb/db_lmdb.cpp#L148


How do I restore / recreate my Ledger Monero wallet? I have lost my Ledger device and/or cannot access the system with my Ledger Monero wallet files. How do I restore / recreate my Ledger Monero wallet?

I've noticed some confusion lately on how to restore one's Ledger Monero wallet. I have therefore written this guide.
In case you have also lost (access to) your Ledger device, you first have to restore the 24 word Ledger mnemonic seed in another Ledger device.
Restoring / recreating a Ledger Monero wallet is fortunately fairly trivial thereafter.
GUI:

Basically you ought to follow this guide with one minor tweak to recreate / restore the Ledger Monero wallet. That is, the Restore a wallet from device option has to be selected (in step 8). This allows you to set a Restore height that is in advance of the first transaction to your Ledger Monero wallet. A detailed explanation about the Restore height parameter can be found here. For convenience, I've added a table with restore heights to the appendix.

Note: Use this work around if you cannot access the Restore height box:

There is a fix for the time being: You can access the restore height window by selecting the wallet location and pressing tab once.

CLI:

Basically you ought to follow this guide with one minor tweak to recreate / restore the Ledger Monero wallet. That is, you have to append the --restore-height flag (with a proper block height as value) to the command that is used / executed to recreate / restore the Ledger Monero wallet. A proper restore height is set by choosing a value (block height) that is in advance of the first transaction to your wallet. A detailed explanation about the Restore height parameter can be found here. For convenience, I've added a table with restore heights to the appendix.

Appendix:
My wallet was created in | Restore Height I should use
November  2020           | 2175000
October   2020           | 2155000
September 2020           | 2135000
August    2020           | 2115000
July      2020           | 2095000
June      2020           | 2075000
May       2020           | 2055000
April     2020           | 2035000
March     2020           | 2015000
February  2020           | 1995000
January   2020           | 1975000
December  2019           | 1955000
November  2019           | 1935000
October   2019           | 1915000
September 2019           | 1895000
August    2019           | 1875000
July      2019           | 1855000
June      2019           | 1835000
May       2019           | 1815000
April     2019           | 1795000
March     2019           | 1775000
February  2019           | 1755000
January   2019           | 1735000
December  2018           | 1715000
November  2018           | 1690000
October   2018           | 1665000
September 2018           | 1640000
August    2018           | 1615000
July      2018           | 1590000
June      2018           | 1565000
May       2018           | 1540000
April     2018           | 1515000


Windows users, do you want to prepare your OS to use full node wallet, solve some sync issues and make your chaindata less likely to be corrupted? Get to read this before using your Windows wallet-gui or cli, and to fix some sync issues.

After seeing this as a common issue, im gonna try to give you a way to "prepare" Windows for using your full monero node. The post its from my authory and its the result of my own research.

Im gonna try to guide you about a common issue related to Windows. First of all, make sure you have set Windows to synchronize the hour automatically from internet:

https://image.ibb.co/jcQcsw/synchour.png

It doesnt matter if it doesnt sync at the first try. Just make sure you have auto sync enabled. This apply for the hour and time zone, just set them both to auto. Open a cmd window as admin (shift+right click on windows start logo on windows 10), or search for cmd and right click the icon-run as admin. Once you get on cmd as admin use this commands:

net stop w32time

w32tm /config /syncfromflags:manual /manualpeerlist:0.pool.ntp.org

w32tm /config /reliable:yes

net start w32time

w32tm /resync /rediscover

Each line is a command (press enter after each command ofc).

If you feel like some old Window users, you can restart your PC after fixing the hour. At this point, its fixed already.

Those commands are intented to synchronize your local host hour from ntp public servers (you can use 0,1,2 or 3.pool.ntp.org).

There is a common issue with Windows time not being synchronized in a precise way, making some apps to malfunction (Some real time software like monero daemon is one of them). This is not Wallet-Gui-related, instead is a common issue with Windows.

After that, you can use your wallet-gui and synchronize your monero node the usual way, waiting for it to sync the blckchain (if its the case that you actually have problems with your blockchain sync). If the blockchain doesnt sync after a while, close gui and follow this guide I am using the GUI and my daemon doesn't start anymore After you have done that, open wallet-gui again, and this time it will sync the proper way. Note that if you fail when using the guide above and decide to delete "data.mdb" you will have to wait for it to download the entire blockchain data again.

If you read this before using wallet-gui for the first time, you dont have to delete anything. Just fix the hour issue before running your node.

Remember that your wallet its saved in the directory you pointed it when ran wallet-gui the first time. The content of that folder its your wallet data, make a backup of it, the seed and pasword too.

I have done this before using full nodes (ETH-mist and UBIQ-Fusion) and have been able to avoid some issues with blockchain sync. If you follow the steps above, you will have less issues when connecting to peers, hence the blockchain data will be less susceptible to get corrupted.

wallet-cli users: remember to close the daemon properly (in the cli write "exit" when you finish using it) to help avoid issues too.

That's it. I hope this helps the ppl having issues with blockchain data and/or wallet-node sync.

P.S. This is a monero-adapted guide of a post made by myself about UBQ-Fusion wallet in the UBQ reddit.

This works on any Windows version, not just Windows 10. Kind regards...


How to Connect a a Monero Wallet to a Monero-Based Website and How to Keep it Safe? I'm hoping to create a Monero-based website based on the work by 'TheKoziTwo' (https://github.com/TheKoziTwo/xmr-integration).

I'm nearing the end of the project and I'm now hoping to connect the wallet to the website, but how do I do so?

There is little information given in the git explaining how to connect the wallet to the website, neither is there much information out there on the internet.

It does mention Cryptonote, though, although after having a look, I'm unsure on what exactly I need to do and I fear making a mistake by not following exact instructions.

Also, what would be the best securities measures to take to ensure the safety of the wallet?

Apologies for my stupidity and ignorance on this particular topic.

I'm assuming the monero-wallet-rpc is on the same host as the website.

In init.php, define a username and password for the rpc wallet:

// RPC login credentials for monero-wallet-rpc. Use --rpc-login user:pass when starting the rpc wallet.
// Example: monero-wallet-rpc --rpc-login user:pass --wallet-file wallet.bin --rpc-bind-ip 127.0.0.1 --rpc-bind-port 18082
define('RPC_CRED','user:pass');`

Your username and password can be anything. In these examples they're user:pass but change them in your code.

I like to use tmux on my server. In one pane I'll run

./monerod --rpc-bind-ip 127.0.0.1 --rpc-bind-port 18081

...and in another tmux pane I'll run:

monero-wallet-rpc --rpc-login user:pass --wallet-file wallet.bin --rpc-bind-ip 127.0.0.1 --rpc-bind-port 18082

Another tmux pane runs cron.php with php ./cron.php

At this point your web pages should be interacting with the database, monerod, and monero-wallet-rpc.

As for security, that's the never-ending job. At a minimum, rename init.php, cron.php, and config.php. I've seen where people have tried to access those pages on my server, but I renamed those files with completely random names.

Also, in init.php where it has the line:

define('APP',true);

...change APP to something else...whatever you want. You'll need to do this on every page that references APP, which I believe is almost every page.

Make sure to block the wallet port (18082 unless you've changed it) on your firewall, log php error messages instead of displaying them, and keep your server patched.


Scanning of View only wallet with monejuro shows different balance I have setup a view only wallet using android monejuro wallet. I took the public key and the secret view key to make a view only wallet. However, this wallet is showing a different balance than my initial monero core wallet.

What could have gone wrong?

On the view wallet I see there is an extra transaction which I should not have received. this transaction does not show up on my monero core wallet with the full 30gb blockchain downloaded.

How can I fix this? Maybe I have to do a rescan?

View wallets only see incoming monero, not outgoing monero. In order to know outgoing ones (and thus see the balance), you need to import key images from the full wallet (the one with the spend keys).

See How can I check the balance of a Monero paper wallet? for instructions.


Vcash privacy and scaling compared with Monero? How do Vcash privacy and scaling functions compare with Monero?

How does the privacy provided by Chainblender, used by Vcash compare with RingCT for Monero?

Monero has had dynamic block sizes since day one. How does that scaling algorithm compare with what was introduced by Vcash in May of 2016?

Unlike Monero which has many developers, Vcash arguably has a bus factor of 1. After recently being doxxed, its developer is alleged to have made harmful changes to the code before abandoning the project:

  Zero day flaw that allows miners to opt-out of paying incentive rewards to nodes

The operator of the suprnova mining pool had this to say:

  I've thought about this, but it would be necessary to fork away from "his" code into a trusted coinbase setup as he simply could have coded too many "backdoors" into his code.. It was him obviously very easy possible to fork off pools and bigger miners from "his" chain and make "his" chain the valid one, even if the "bad pool" had much more power than him, this should never be possible for any coin.. not with > 51% of the power of the net and of course not with less.. I see lots of problems with the current code.

The security of any coin with that level of centralization of development and control is dangerous:

  Obviously he was able to fork off pools/miners from "his" chain without even having more than 51% of the network, if that is not evidence enough.. Well..
  And no, it wasn't only my pool Smiley

  I'm running pools for years and I know very well how to "protect" them, or was anything hacked ? He forked off and banned the node(s) of my pool three times, invalidating blocks on the pool even while the pool had a lot more than 50 % of the network.

Regarding scaling, Monero developer "smooth" said:

  I'll start with this deleted post that was removed by one of their scam promoters claiming that Bitcoin is going "copy Vcash" by adding an adaptive blocksize. I pointed out that Monero (and previously Bytecoin) had such an adaptive blocksize almost a year before Vcash launched.

Well known Bitcoin developer Greg Maxwell posting a warning about Vcash on Bitcointalk and after the failure of "John Connor" to remedy a clear copyright violation:

  FWIW, I politely reported the copyright violation (the code being a copy of Bitcoin Core run through an auto-formatter with all the attribution removed) as an issue on the github for the project and john-connor accused me of stalking him and then hid the issue tracker on that github from public view. :-/

  I suppose I shouldn't be surprised as it's consistent with the rest of the concerns that resulted in creating this thread-- that there is some ongoing effort to keep that work out of the sunlight.

As a result of these warning signed, other developers avoided the project. With a bus factor of one a thorough review of the Vcash privacy system was never completed. It appears to use some sort of a CoinJoin based mixing system similar to DASH meaning it does not offer privacy by a default like Monero. It also means that the privacy provided is far inferior to Monero with ring signatures and stealth addresses today and RingCT in January.


Making sense of monero-wallet-rpc get_transfers returning 3 TXs for a TXID I'm writing an app where I fetch and transparently display all TXs for a wallet.
When I send a POST request to the monero-wallet-rpc with the get_transfers method and the in: true parameter, I get three outputs for the same TXID.

Amount is 0
Very small amount
Actual TX amount with added suggested_confirmations_threshold: 1 object property

I assume #2 is the TX fee, and #3 is the actual TX to the receiver. Not exactly sure what #1 is.
How can I make sense of this returned data?
Request (NodeJS):
fetch(config.xmr.wallet_RPC_URL + "/json_rpc", {
            method: "POST",
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify({
                jsonrpc: "2.0",
                id: "0",
                method: "get_transfers",
                params: {
                    in: true
                }
            })

Response:
{
  address: 'mywalletaddr',
  amount: 0,
  confirmations: 788609,
  double_spend_seen: false,
  fee: 20000000000,
  height: 1511844,
  locked: false,
  note: '',
  payment_id: '0000000000000000',
  subaddr_index: { major: 0, minor: 0 },
  subaddr_indices: [ { major: 0, minor: 0 } ],
  timestamp: 1518905851,
  txid: 'thetxid',
  type: 'in',
  unlock_time: 0
}
{
  address: 'mywalletaddr',
  amount: 0,
  confirmations: 788609,
  double_spend_seen: false,
  fee: 20000000000,
  height: 1511844,
  locked: false,
  note: '',
  payment_id: '0000000000000000',
  subaddr_index: { major: 0, minor: 0 },
  subaddr_indices: [ { major: 0, minor: 0 } ],
  timestamp: 1518905851,
  txid: 'thetxid',
  type: 'in',
  unlock_time: 0
}
{
  address: 'mywalletaddr',
  amount: 874585636991,
  amounts: [ 874585636991 ],
  confirmations: 788609,
  double_spend_seen: false,
  fee: 20000000000,
  height: 1511844,
  locked: false,
  note: '',
  payment_id: '0000000000000000',
  subaddr_index: { major: 0, minor: 0 },
  subaddr_indices: [ { major: 0, minor: 0 } ],
  suggested_confirmations_threshold: 1,
  timestamp: 1518905851,
  txid: 'thetxid',
  type: 'in',
  unlock_time: 0
}

Running the rescan_blockchain method fixed the issue. Now only 1 TX is returned per TXID.
Thanks to @jtgrassie for helping resolve this.


How do I generate a QR-code for a Monero address? I would like to know if there's a tool to generate a QR-code image for a Monero address. I know that https://moneroaddress.org has a button to display the QR-code, but only for wallet addresses generated there.

Follow-up question, if possible, does this also work for integrated addresses?

QR-codes have nothing specific to Monero. They are just a 2D representation of a string.

It should work with any qr-code tool, and for any alphanumeric string of less than 4296 characters. So this includes monero public keys, private keys and integrated addresses.

For example on Linux :

Install packages : apt-get install qrencode zbar-tools
Generate a QR-code : qrencode -o addr.png "4A................."
Read the QR-code : zbarimg -D addr.png

There also plenty of websites that offers this service. However, please note that by using them, you may be giving up a bit on privacy.


Why Monero address is converted to base 58 in blocks, instead of all at once? I realize that the public address, which is 69 byte, is converted to base 58, but is not converted as a one large number, but rather each 8 bytes are converted separately.
What's the motivation for that?

The base58 encoding used in Bitcoin converts all the data to an integer, and then encodes it using divisions by 58. If there is a lot of data, the integer will get very big, which requires having a library dealing with bignums. And usually bignum operations (in this case bignum divisions) are not very fast.

Encoding the data by blocks of 8 bytes at most is much faster because you only have to manage 64-bit integer (a 64-bit integer division will be a single instruction on a 64-bit CPU).

It also allows knowing easily what the size of the encoded string or decoded data will be:

8 bytes of data <=> 11 base58 characters
7 bytes of data <=> 10 base58 characters
6 bytes of data <=> 9 base58 characters
5 bytes of data <=> 7 base58 characters
4 bytes of data <=> 6 base58 characters
3 bytes of data <=> 5 base58 characters
2 bytes of data <=> 3 base58 characters
1 byte of data <=> 2 base58 characters


Is there a list/repository of online markets / vendors that accept Monero? As the title says,  I'd like to know where I can currently spend Monero be they DNMs or otherwise,  and not just something where there is shapshift automagically converting things in the background,  something where the vendor is selling for Monero?

Yes! There is, on the official getmonero.org website:

https://getmonero.org/getting-started/merchants

The nice part about this site is that the page is hosted on github, and anyone can add a merchant to that page but submitting a pull request here:

https://github.com/monero-project/monero-site/blob/master/getting-started/merchants.md

You can look at past edits to that page if you need help with submitting an edit.


What is block propogation in Monero network? I hear this certain term in Monero sometimes but what does it mean? Is it related to mining maybe?

In a cryptocurrency network (like Monero and Bitcoin), miners are finding solutions to blocks. When a solution is found, the miner has created a block and this new block can now become the tip of the blockchain (the newest block).

In order for this block to become the tip of the blockchain, the block has to get to every node in the network - the block has to propagate. This occurs through the peer to peer network. The miner creates the block, and sends it to the peers it is connected to. These peers validate the block, and then relay it to their peers.

This is block propagation.


Why wallet app from getmonero.org need 3 pieces of information to recover wallet, when only 1 is enough? As my understanding, secret view key and address can be derived from secret spend key. Or my understanding is wrong ?

Secret view key can usually be derived from secret spend key. It is only the case if you generate a wallet this way. It does not have to be this way. The address can be derived from both secret keys. Asking the address too introduces a way to spot errors when entering the data. If the address does not match what the secret keys generated, then you know you made a mistake in the inputs.


Create monero browser mining module I am a young programmer, still in college, interesting in creating a universal plug-in in python that I can apply to a few applications I have created. I would like to develop a python3 module that adopts user cpu threads, and uses the threads to mine cryptocurrency, monero specifically, whenever a user is active on my site, is this impossible to do without manually configuring a miner from user device?

Follow Up-- If I do not need to manually config, and include this in a terms & agreement can I run this module as long as a user access token remains valid?

Sidenote: I am not interested in using Coinhive

Based on your comment, mining from a python script, your best bet is to build a python c extension.

You can include the relevant crypto hashing functions and take it from there. An example, albite a JS WASM module, is here. Essentially rework the main.cpp as your python extension api.


What is the deterministic hash to EC function used to construct the key image? Ring signatures alone would allow double spending, so Monero (as a result of following the CrpytoNote whitepaper) has to use a 'key image', which is the same across identical transactions and hence causes attempts at double spending to be rejected.

The key image is formed I = x*H(P), with I the key image, x the private key, H a deterministic hash function, and P a ephemeral public key for use in this transaction only.

My question is, in Monero's specific case, what hashing algorithm does H represent?

Looking at the code, we can see how it's generated.

void crypto_ops::generate_key_image(const public_key &pub, const secret_key &sec, key_image &image) {
    ge_p3 point;
    ge_p2 point2;
    assert(sc_check(&sec) == 0);
    hash_to_ec(pub, point);
    ge_scalarmult(&point2, &sec, &point);
    ge_tobytes(&image, &point2);
  }

The hash_to_ec function is called to hash pub (which is your P) into point, giving us your H(P). Then, scalar multiplication is performed and result passed into point2, which would be your x*H(P). Some transfromation ge_tobytes is applied and the result is passed into image which is your I.

I'm not sure what this ge_tobytes transformation does, though. It could be just changing the format of I in memory. Implementation specific, I suppose.

The hash_to_ec function is presented below.

static void hash_to_ec(const public_key &key, ge_p3 &res) {
    hash h;
    ge_p2 point;
    ge_p1p1 point2;
    cn_fast_hash(std::addressof(key), sizeof(public_key), h);
    ge_fromfe_frombytes_vartime(&point, reinterpret_cast<const unsigned char *>(&h));
    ge_mul8(&point2, &point);
    ge_p1p1_to_p3(&res, &point2);
  }

We see that the cn_fast_hash function is called, which would be the Keccak hash function.
After getting the hash h, it is passed through some functions, which I suspect perform scalar multiplication of h with something, but my understanding stops here. This ge_fromfe_frombytes_vartime might be of interest as Shen Noether did a dedicated write-up on it. Also, here we see the importance of using a secure hash function for the key images. Apparently, to do this something after the Keccak is quite important.

Shen Noether's implementation in Python could provide some insights as well, but I'm not sure if it's up to date.


What is the minimum length of a payment ID? When including a payment ID with a transaction, what is the minimum length of that payment ID? And since it's only input in hexadecimal format, does that mean it only accepts A-F and 0-9 characters?

There are two kinds of Payment IDs:

the original kind is 32 bytes long, and are plaintext on the blockchain.
the new kind of 8 bytes long, and are encrypted on the blockchain.

The new kind are normally embedded in the address, forming an integrated address. The old kind is not, and is specified manually.

They're usually input as hexadecimal, so indeed only [0-9a-fA-F] are allowed (and a byte is represented by two hexadecimal characters, so 32 bytes -> 64 hexadecimal characters, and 8 bytes -> 16 hexadecimal characters).

Note that since payment IDs' purpose is to convey some information to the recipient (hey, this payment is from me, Alice), if you're receiving your own monero to your own wallet, you don't need one.


August 2014 spam attack Please explain how the sophisticated August 2014 Monero network spam attack was designed and conducted.

How did the Monero core team respond to the attack and prevent any lasting damage?

You'll find an extensive analysis here.

The tl;dr version is that the attacker exploited an obscure edge-case bug to fork the network. The fork was the intention and the net-effect. The devs promptly notified the community and the exchanges and released a fix.


Is it planned to implement Hashed Timelocked Contracts (HTLC) through the monero multisig wallet? In other words, will be  there equivalent of the command 'locked_transfer' for sending funds to multisig wallet?
So a sender can return the funds by using just his signature (ONLY through the 'number of block to lock').

It will be necessary for implementation of HTLC, cross-chain atomic swap and returning erroneously blocked  funds.

I don't believe that's planned just yet. In any case, Monero's time lock implementation is incompatible with that of Bitcoin-based currencies, so right now atomic swaps between Monero and, say, Bitcoin wouldn't work. At least a modification to the atomic swap protocol would be needed. https://github.com/monero-project/monero/issues/1184


Which payment ID to receive XMR on an address generated with moneroaddress.org? I created an address with a local copy of MoneroAddress.org (based on a custom entropy string, which I stored securely) and I want to send some XMR there.

The sending client asks for the address and a payment ID. In earlier cases, whenever sending Monero the recipient specified their payment ID but now I have to create one myself.

Note: I don't need to receive more XMR (or be able to distinguish different sources) on this address than just this one transaction.

Can I just specify any random payment ID there? Payment IDs seems to be 256 bit hex strings, can I just take the sha256 of some random gibberish input and use that?

Do I need to save the payment ID in order to spend my funds later?

Payment IDs are not required if it is your own wallet address.

Payment IDs are only required if sending to a custodial wallet because most custodians only have one XMR address thus the need for a unique payment ID which the custodian will provide to you.

You can however always set any payment ID you want either 16 or 64 characters hex (0 thru 9, A, B, C, D, E and F) to your own wallet address.

Examples of custodians requiring payment IDs:  poloniex.com, monerodice.net, shapeshift.io


How can I have Monero historic price (USD) to download? I´m having problems finding Monero historic prices in USD for my University project. Could someone advise me where to find this data?

See the accepted answer here:
https://opendata.stackexchange.com/questions/6884/cryptocurrency-historical-prices

You would have to slightly modify it to get XMR rather than ETH, and then get a BTC v. USD data set over the same time period and figure it out, but I'm not sure there is a better way.

There's really not much price history pre-poloniex, except smooth's OTC thread on bitcointalk and TheKoziTwo's short-lived cryptonote exchange.


Cant't find out where replace the nonce to get a blob hash I'm trying to understand the basics of mining and have a very specific question about hashing a blob. When I start a miner and capture the packets, I get a job from the pool and then the work submitted by the miner.

Job recieved from the pool:

{
  "jsonrpc": "2.0",
  "result": {
    "job": {
      "blob": "0b0befdeecee051358860383d8e14f3529859e0c2f64c31a631addef3f9ca97eedcc738324fbd9000000009e18d5ad6a814f39bb79c9558f292aea7101e154c114e57c2205732d2e8b7eca02",
      "target": "37894100",
      "job_id": "8241143554386990819",
      "time_to_live": 5,
      "height": 1974336,
      "algo": "cn/r"
    },
    "status": "OK",
    "id": "1177745781301023725"
  },
  "id": 1,
  "error": null
}

I think that I have classified these right, if not please correct me:

Versions: 0b0b
Timestamp: efdeecee05
Prev Id:
1358860383d8e14f3529859e0c2f64c31a631addef3f9ca97eedcc738324fbd9
Nonce: 00000000
Transactions Tree Root:
9e18d5ad6a814f39bb79c9558f292aea7101e154c114e57c2205732d2e8b7eca
Transaction Count: 02
Hashing blob: 0b0befdeecee051358860383d8e14f3529859e0c2f64c31a631addef3f9ca97eedcc738324fbd9000000009e18d5ad6a814f39bb79c9558f292aea7101e154c114e57c2205732d2e8b7eca02

Share that the pool accepted:

{
  "id": 2,
  "jsonrpc": "2.0",
  "method": "submit",
  "params": {
    "id": "1177745781301023725",
    "job_id": "8241143554386990819",
    "nonce": "41000000",
    "result": "78aeeba968470a2b000c42e46ce60e3e422efbd2fb58fa275384855cd8131d00"
  }
}

My question boils down to:
Where in the blob 0b0befdeecee051358860383d8e14f3529859e0c2f64c31a631addef3f9ca97eedcc738324fbd9000000009e18d5ad6a814f39bb79c9558f292aea7101e154c114e57c2205732d2e8b7eca02 do I need to insert the nonce 41000000 to get the result 78aeeba968470a2b000c42e46ce60e3e422efbd2fb58fa275384855cd8131d00 after feeding the blob through the CryptoNight hashing algorithm?

If my understanding is correct, I need to replace the bytes 00000000 with the 41000000 found nonce, but when I do that, the resulting hash is different from the miner submitted hash.

I'm using a C implementation of CryptoNight and I'm checking the results with an online implementation that I found here.

You have the correct location for the nonce bytes. However, are you using the same CryptoNight variant? I doubt this.

The current version (CN/R), also requires a height parameter as input. Therefore we can know for sure the version you linked to is not using CN/R (it is not asking for a height parameter as input). So unless you are mining to an old pool / chain, you can also be pretty certain you are mining CN/R, which explains why your result hash sent to the pool differs from the one using the link.


On xmrchain what do the l, e and - pID symbols mean? On xmrchain, under the in/out/pID row, what does the l e or - symbols after the number of inputs and outputs signify?

l means the legacy CryptoNote pID type is being used. It is an unencrypted 32 byte payment id that is separate from payment address. Exchanges have traditionally been the most common user of this pID type as a means to know from whom the payment came from.

e is the newer "integrated address" pID first implemented by Monero. It encrypts the pID and combines it with a Monero address. For usability reasons exchanges have gradually moving to this standard over the older l type pID.

- simply means no pID exists for this transaction

Going forward it is assumed that sub addresses introduced in Monero 0.12.0 will replace most uses for both l and e pIDs. This will improve network privacy by making transactions that traditionally use one pID type over another (or none at all) look more alike on the blockchain.


Ledger Monero wallet What is the long address I see on my Ledger Nano S when I open in the Monero app?

Are the 24 seed words for the Ledger BTC wallet also needed to restore the Monero wallet? Because in Monero, the restore wallet option is asking for 25 words. I'm a little confused.

Thanks to everyone who can help me.

Your 24 word seed is your Ledger device seed which is used for restoring the Ledger. It is used in the Ledger Live app when you need to restore a device. Recall that the Ledger has your wallet private keys, not the Monero GUI application. Each Ledger device only uses one seed phrase; you do not have different seeds for each cryptocurrency you use your Ledger for.

Ledger has a full guide for using Monero with your Ledger and there is also a guide on StackExchange. There is also this guide for restoring a Ledger with Monero.

The long address you mention I can only assume is your wallet address, though I don't have a Ledger to confirm this.


RingCT equivalent for output_histogram Based on the answer and comments to this question about available outputs by denomination, I understand that things will change once RingCT arrives.

Exactly how will the number of outputs change with RingCT? With RingCT can outputs of any denomination be used in a ring signature?

Instead of building a histogram for the number of outputs for a specific denomination how can I calculate the number of possible outputs available for use in a RingCT transaction?

All unlocked rct outputs will be eligible for inclusion in a ring signature. Those outputs will be stored with the placeholder 0 amount, the real amount being unknown except to the recipient (and the sender, though needing extra information kept outside of the blockchain).

Outputs from the block rewards, which will still be in the clear, will also be available as rct inputs, and will be stored as rct outputs. This will make smaller coinbase transactions, even though their amount is known.

To sum up, the number of eligible rct outputs will be the number of unlocked outputs at amount 0 (and there are none before the fork).


Help-Sent Monero From Changelly and did not received funds I am a total Tech NOOB. I set up the Monero GUI wallet yesterday and moved BTC to Changelly to convert to XMR. Changelly shows the transaction record but something went wrong did not get the funds in wallet. I think it was syncing still. I however have read notes have no real clue how to resolve. If anyone can help in simple step by step I would highly appreciate you!!!! I tried to put the block hash in blockchain tracking sites and said not found. I would appreciate any and all help. Thanks

Check that Changly actually sent the funds. Get the TXID from them and try to find it here: https://xmrchain.net/ If they didn't send, you need to work it out with them.
If funds were sent, you can verify they were sent to the correct address even if your wallet is not yet up to date: https://monero.stackexchange.com/a/4598/57
If you verified it was sent correctly, try this: Outputs on xmrchain.net show that I have a balance but command line says no balance


Is the GUI Safe for storing thousands of monero? How safe is it to store 5,000 monero on the GUI? I know it's beta though others have stated that it is safe to store there.

As of today's date, there have been no publicly reported losses of XMR due to the newness of the GUI, so using it is likely safe. However, the Monero-Wallet-CLI (available at https://www.getmonero.org/downloads/) has a long track record of being trustworthy and secure, so using it is best practice for significant Monero storage and transactions.

Once the GUI is out of beta, it should be good for large funding amounts as well.

That said, the truly safest way to store large amounts of Monero (for example: 5000 XMR is worth $90,000 today) is in a securely generated paper wallet as outlined by Gingeropolous here: https://www.reddit.com/r/Monero/comments/48cgmd/an_extensive_guide_for_securely_generating_an/


Is there somewhere I can see a graph of current and future inflation rates of supply? Per title,   like right now in bitcoin the inflation is something like   (12.5*6*24*365)/(16,000,000)
i.e. reward times blocks per year / (current outstanding supply)

This spreadsheet compares Monero's emission with that of Bitcoin.
https://docs.google.com/spreadsheets/d/1qXi7zUSIh7F6UuSuhOryyFbHEy_LJuym3I3neAga_2s/edit#gid=239466694

Credit to luigi1111 for making this.


Is it possible to get the wallet address from an integrated address? From the wallet address, the address string looks like :-

43qKZHxtoDJGteTbsSM9Eo31bFxCsE8WzMbpCvFVzWuEjfCMV5TmmVsZhvS472NgV8DQ1XMNimBbgavj3nX9XD7178Pbt6C

I have created an integrated address, which I am told consists of the above address and payment id but still refers to the same wallet.

Is it possible to discover my wallet address from the integrated address ?

Yes, you can use Box 8 in the Check Address section of this tool: https://xmr.llcoins.net/addresstests.html


Where and when was Monero started? I'd like to know where and when was Monero started please.

Here's a collection of StackExchange posts talking about the history:.

This one is of particular interest: What is the origin of Monero and its relationship to Bytecoin?

See also a nice collection of history-related posts found here.


Steps to Fork Monero I am a newbie to Monero development.

I am trying to understand what steps I would need to take to to Fork Monero, make some changes to number of coins etc and create a wallet. Can anyone outline the steps?

Monero is based on Cryptonote, which has a forking guide. This guide will show you the places in Monero's codebase that you'll want to examine and modify: https://github.com/cryptonotefoundation/cryptonote#cryptonote-forking-how-to

The main things you'll want to do are:

Name the fork
Decide on the total money supply, emission curve and time between blocks
Have a unique value for the daemon Network identifier so that your fork doesn't clash with existing Monero nodes
Set up seed nodes where new nodes will connect to discover the blockchain to sync to
Set a wallet address prefix that is different to Monero's, to prevent confusion
Create the genesis block
Build the code to create executables


What's the explanation for certain high fee transactions/blocks? From my understanding transaction fees are calculated automatically based on the transaction size in bytes, the current average block size, etc. I've noticed recently that transactions have been appearing with 0.2 monero transaction fees despite being nominally the same size as other transactions using 1/10th the fee. For example: https://monerohash.com/explorer/block/1283872

Obviously any miner will gobble up these high fee transactions and prioritize them in any block they are constructing -- the miner that found the above block got nearly 1 extra monero vs. the average block reward.

Any idea what's going on here? Does the monero wallet have an option to specify transaction fees I'm not aware of? Why would someone (purposefully or otherwise) pay so much (nearly $4 in USD) in fees for a transaction when at a time the mempool was nearly empty and their transaction would appear in a new block shortly regardless?

From my understanding transaction fees are calculated automatically based on the transaction size in bytes, the current average block size, etc.

That's right. It's the minimum fee, and the fee (per kB) is actually calculated based on only the current block reward, and last 100 blocks median block size. The constant parameter chosen means that the minimum fee is enough to make it economic for the miner to expand the block size for exactly 0.6% as it wold result in the biggest earnings per block.

  Does the monero wallet have an option to specify transaction fees I'm not aware of?

There is a setting in the wallet offering 3 priority levels: 1, 2, and 3. The first level is your minimum fee, 2nd level is 20x that, and the 3rd level is 166x the min. fee. After the HF, there will be 4 levels with x1 x4 x20 and x166 multipliers, where x4 will be made the default. Note that due to HF changing the min. block size, the x4 will cost/kB the same as x1 does right now. This will make x1 a kind of "low priority".

Anyway, monero CLI wallet allows you to set the level to use with set priority <level> command. Thing is, it remembers the setting for all following transactions.

  Any idea what's going on here?

We can only speculate. Maybe someone needed to move a big amount urgently for catching some trading wave so the high fee would not really be an issue considering the value of a transaction. If he forgot to set the fee back to low, he'd be accidentally making high-fee TX-es even after the rush-hour.


Can Monero transactions contain scripts? Does Monero contain a scripting system for transactions like Bitcoin does?
If so, what OPs does it have and where is it defined? Is it the same script as in Bitcoin or different?

There is no scripting language in Monero at the moment (the Cryptonote paper describes a simple one, though, if memory serves).


What does the mining-proxy do? Do I understand everything correctly?
The pool gives the task to the worker (proxy in our case), like this:

{"id": 1, "jsonrpc": "2.0", "error": null, "result": {"id": "42d954ef-ceee-446c-b2ea-f95c421df573", "job": {"blob" : "02028eb4bcd40519fb82d0d47097f00022d6792976051dd53d86d0718ff029fdc3803d4077a9f1000000004afa5cfe5901bfef02bbc4e29f3a960bf2dfd29a123dd942b9ab6b90673c493503", "job_id": "Wjc5VI / ANH3mAnkhaKtw0WSeJP9h", "target": "b88d0600", "id": "42d954ef-ceee-446c-b2ea-f95c421df573"}, "status": "OK"}}

where the blob is the task itself, which is parsed based on this documentation https://cryptonote.org/cns/cns003.txt

The proxy breaks the blob into parts with a lower diff and distributes to the connected workers based on their capabilities. Then, proxy collects everything in a one job result and send it to the pool.
Am I right?

The pool sends the job to the proxy.

The jobs blob already has extra space reserved which the proxy adds a worker id to so that each worker (miner) connected to the proxy has their own unique blob to hash.

The target of the job is adjusted by the proxy for each of its connected miners based on how quickly each miner is hashing jobs.

When miners send results to the proxy, they are forwarded onto the pool (after some basic checks).


I accidentally deleted my keys file I have been using the wallet perfectly fine for a few months but because my wallet wasn't sending (due to update that I didn't know at the time), I was frantically looking through the wallet folders on my drives and accidentally deleted my wallet keys file for the Monero GUI wallet.
I keep it on an encrypted USB and had to run some recovery software to get the file back but it came back corrupted and does not work.
Are the funds still on the Ledger and how would I retrieve them and get them back into the wallet?
But wait, it gets worst... I then compounded the problem by creating a new wallet from hardware device in the Monero GUI desktop app and sent even more XMR to what I thought was a brand new wallet and address on the same old Ledger.
Well it turns out that it may not have been a brand new address because the coins never came after some time and I thought that was odd, so when I checked the address I sent the XMR to, it was exactly the same address as the old account that I deleted by accident.
I then tried to use the 24 word recovery phrase for my Ledger using the seed recovery option of the Monero wallet (based on some advice), but it said something about my Electrum words failed.
I am just wondering if the Monero still exists on my Ledger Nano S and if it is at all possible to retrieve. Thanks guys.
PS. as you can probably tell I am not at all computer savvy and am lost in listening to some of the brilliant stuff dEBRUYNE and others have been advising. Please help!

The Monero is on the blockchain.
To recover the Monero seed see the section "Seed recovery" in this Ledger guide:
https://support.ledger.com/hc/en-us/articles/360006352934-Monero-XMR-
Not easy but remember, the Monero are on the blockchain so there is time to recover the seed. They are only lost if your Monero seed is lost.


Performance comparison of Wolf's open source compared with Claymore's closed source miner I have an AMD R9 390 graphics card. What is the expected hash rate difference between:

Wolf's open source GPU miner
https://github.com/wolf9466/wolf-xmr-miner/releases
Claymore's closed source miner
https://bitcointalk.org/index.php?topic=638915.0

If I decide not to pay the 2.5% Claymore fee, how is the performance comparison changed?

I have MSI R9 290X and on stock settings it gives 775H/s with Wolf's miner vs 790H/s with Claymore's miner with fee turned on. With -nofee 1 flag Claymore's miner shows 760H/s. Of course these numbers slightly vary.


What is the block height from which RingCT was implemented? Can we know the block height from which the ring signatures were implemented. Because i read few blocks which are pre-ring signature blocks where I see there are ring members repeating for a single transaction.

Ring CT was implemented in block #1220516 in January 2017. After September 2017, this feature became mandatory for all transactions on the network.

https://ww.getmonero.org/resources/moneropedia/ringCT.html

It's worth noting that RingCT is an improvement which added the Confidential Transactions part to the transaction format. Ring signatures existed before RingCT was implemented.


Anyone know if CoinHive uses the new Monero hashing algorithm? When I visit https://coinhive.com/ , I see a "Start Mining" button at the center of their page.  I know recently Monero changed its hashing algorithm to be CryptoNight v1 (variant 1).  Does Coinhive use their new algorithm ?  Their site gives no documentation about this.  If they don't, then is it just a charade when you click the "Start Mining" button?

They announced support on Twitter back in April:
https://twitter.com/coinhive_com/status/981102585460543489


How many Monero will be mined in total? How many Monero will eventually be mined? Is there a fixed supply?

The initial number of moneroj in existence will be approximately 18.4 million.  However, once that number is reached, a perpetual tail emission of 0.6 XMR per 2 minute block (same rate as the original 0.3 XMR per minute tail subsidy plan) will go into effect.

The block subsidy constants are as follows (modified for clarity):

MONEY_SUPPLY = 2^64 - 1 // The max number of Tacoshis created before tail emission begins
FINAL_SUBSIDY_PER_MINUTE = 0.3 // Tail emission
const int target = version < 2 ? DIFFICULTY_TARGET_V1 : DIFFICULTY_TARGET_V2;
const int target_minutes = target / 60;
const int emission_speed_factor = EMISSION_SPEED_FACTOR_PER_MINUTE - (target_minutes-1);

The 'target' code was implemented when we switched from 1 minute per block to 2 minutes per block.

The tail emission and block subsidy are defined here:

uint64_t base_reward = (MONEY_SUPPLY - already_generated_coins) >> emission_speed_factor;
if (base_reward < FINAL_SUBSIDY_PER_MINUTE*target_minutes)
{
    base_reward = FINAL_SUBSIDY_PER_MINUTE*target_minutes;
}

The tail emission kicks in when the number of Tacoshi in existence (the smallest unit, there are one trillion in each Monero) is between (2^64 - 1) and (2^64 - 1 - .6*1000000000000), or .6XMR worth of Tacoshis away.


How can i sweep out a whole wallet to another address? Since currently it's not possible to manage multiple addresses easily with one simplewallet instance, I would like to fire them up on the go.

I am on windows with the binaries bitmonerod and simplewallet running.

But the problem is I would like to move every bit out of there. I found sweep_dust, but it only sends it back to your own wallet. I don't really know how that could help.

So for example, at the moment, I have a wallet with 0.003315200000 as balance. How would I get the amount out of there?

sweep_all sends all outputs to the address you specify.

However, 0.003315200000 is smaller than the smallest fee, so it is not actually spendable by itself, you'd need other outputs to increase the total so that minimum fee can be paid.


What is the command in monero cli to send some coins to an address or multiple addresses at once? What is the cli command to send some coins to 1 address and the command to send to multiple addresses by paying a fee once?

transfer should do it

  transfer [< priority>] [< ring_size>] < address> < amount> [< payment_id>] - Transfer < amount> to < address>. < priority> is the priority of the transaction. The higher the priority, the higher the fee of the transaction. Valid values in priority order (from lowest to highest) are: unimportant, normal, elevated, priority. If omitted, the default value (see the command "set priority") is used. < ring_size> is the number of inputs to include for untraceability. Multiple payments can be made at once by adding < address_2> < amount_2> etcetera (before the payment ID, if it's included)

you can transfer to multiple addresses but you can transfer using only one payment_id per transaction ie:

transfer <address_1> <amount_1> <address_2> <amount_2> <address_3> <amount_3> <payment_id>


What data does the Monero client write as it processes the blockchain? The Monero client allows configuring the blockchain location. My assumption is that only public blockchain information gets stored here, so I configure it to an unencrypted SSD.

However, it seems possible that the client would cache other information, like which transactions or unspent outputs are mine, in order to resume syncing quickly after a restart.

Besides the public blockchain, what else does the client write, and where? Does any of it reveal information about my address or transactions?

The Monero daemon (started by hand or automatically by monero-wallet-gui) only writes data that is publicly available (the blockchain). Therefore you can choose a directory on an unencrypted partition as data directory for monerod.

The Monero wallet (monero-wallet-cli, monero-wallet-rpc or monero-wallet-gui) writes the wallet files, which must stay private. These files are encrypted using your password, so they can also be stored on an unencrypted partition. But storing the wallet on an encrypted partition will make it even more difficult for someone stealing your computer to try to steal your money.


GUI LoadLibrary failed with error 1114 on Windows I am using an HP laptop on Windows 10 x64. I have downloaded the latest beta of the Monero-core GUI from this link. Monero 0.10.1 is fully synchronized and running on my computer, and when I click on monero-wallet-gui.exe, an error message pops up. It says "LoadLibrary failed with error 1114: A dynamic link library (DLL) initialization routine failed." How can I fix this and properly run the GUI?

This is an error with the Switchable Dynamic Graphics power setting in Windows. If you open Power Options, expand "Switchable Dynamic Graphics" and then "Global Settings", and then set "On battery" (if applicable) and "Plugged in" to "Maximize performance", it should run properly. Click apply and try running monero-wallet-gui.exe again.


Why was the block time changed from 1 to 2 minutes? Faster block times lead to faster transaction confirmations. Why was the Monero block time changed from 1 to 2 minutes?

If Monero usage increases so will orphan blocks and chain-reorganization. Bitcoin forks with much shorter average block times (compared to the 10/min per block BTC average) have far more many orphans. CryptoNote based coins like Monero are more susceptible to the effect of chain reorganizations than Bitcoin forks so it was decided that 1 minute blocks were too short. Longer confirmation times make chain reorganizations less common.

  Perhaps the strongest reason to make this change is to guard against an increase in popularity (and the size of the network) causing the chain to become unstable. This has been seen on Bitcoin forks with 30 second blocks, where long chain (10 blocks or more) reorgs become extremely common and the network may fail to converge at all for long periods of time (or in theory permanently). Similar effects are seen to a lesser extent on BTC forks with 60 second blocks, and CryptoNote is somewhat more sensitive to the effects of reorgs, so staying at 60 seconds puts us in (or at best close to) a potential danger zone. The coins with the fastest block times that don't seem to commonly run into this trouble are the LTC-style 2.5 minute blocks.

2 minute block times will also cause the Monero blockchain to grow in size at much a slower rate (particularly now when many blocks are still empty) thereby improving scalability.

The above benefits were balanced against the impact slower confirmation times may have on merchant and user convenience. In the future if network latency and/or transaction volume changes dramatically the block time decision can be revisited.


How can I tell what difficulty my solution is? I read that sometimes a pool will report a "Low difficulty share" error if the solution indeed did not match the specified difficulty but it could also be reported if someone had already found a nonce that hashed the block and you were too late submitting yours.  So for example, my pool sent me

{"jsonrpc":"2.0","method":"job","params":{"blob":"0707eb98d1d8058f35da5374c2ce3a22dfe0b13517a1545230a15a9f64b28af3f8ad14f254f02900000000c25dab02b54a81ddb25b3874bfd361a3081057eb5e0c38d748373b620a89d0d314","job_id":"L0Nx52ZKaq878cIhlGEXRueUnJAl","target":"37894100","id":"242737ff-d36a-4a32-9886-cb7031d6e126"}}

I then submitted

{"type":"submit","params":{"job_id":"L0Nx52ZKaq878cIhlGEXRueUnJAl","nonce":"6e00d22b","result":"6146867498517f1a431aabf4a0ff3f5e8643b3051775ec0877cb1fc82a8f3900"}}

to which I got the response

{"id":"c018e089ab7e70a54232623d","jsonrpc":"2.0","error":{"code":-1,"message":"Low difficulty share"}}

I'm pretty bad with the calculations.  How can I tell if my share (based on the information I've provided here) indeed didn't match the difficulty target or is it possible that someone else already submitted a nonce that hashed the block?

You can find the difficulty of a submitted hash (which is just a big endian hex encoded string) by dividing the base difficulty (2^256-1) by your hash.

As such, nodejs-pool (the most common pool software), checks your submitted hash difficulty as follows:

let hashArray = hash.toByteArray().reverse();
let hashNum = bignum.fromBuffer(new Buffer(hashArray));
let hashDiff = baseDiff.div(hashNum);

if (hashDiff.ge(blockTemplate.difficulty)) {
    // valid here against block, so mined a block
} else if (hashDiff.lt(job.difficulty)) {
    // invalid here (this is where you are failing the test)
} else {
    // valid, record share
}

Using your supplied hash and target (which is also BE encoded hex string) you would yield:

job.difficulty = 4294967
hashDiff = 472

Hence it is of low difficulty (thus an invalid, low difficulty, share).


Blocks get mined every 2 minutes on average regardless if there are transactions or not. Your node is the one mining them. You are getting the mining reward.


Median block size calculation What's the easiest way to calculate the median size of the last 100 blocks programmatically?

I have tried using monerod and the print_block and print_bc commands but neither shows the block size directly.

If you have a recent enough daemon, you can run the bc_dyn_stats 100 command, which will include the median block size over the last 100 blocks, among other things.

If you have a recent, but not so recent daemon, you can try the getinfo RPC call, which includes the current block size limit, which is twice the last 100 blocks median:

curl -v -X POST http://127.0.0.1:18081/getinfo -d '{}' -H 'Content-Type: application/json'


Harmonizing Monero with HD Wallet BIP32 Technology? Bitcoin and many of its altcoin forks have defined the following two variables that specify the first four characters of BIP32 extended private and public keys that are frequently base58check encoded:

EXT_SECRET_KEY
(0x04)(0x88)(0xAD)(0xE4) - which maps to the xprv prefix

EXT_PUBLIC_KEY (0x04)(0x88)(0xB2)(0x1E) - which maps to the xpub prefix

BIP 32 secp256k1-based technology for synthesizing extended public keys can't in its current form be extended to synthesizing xpub keys for Ed25519, see Is BIP32 Technology Cryptographic Curve Aggnostic.  Hence currently specifying EXT_PUBLIC_KEY values for Monero makes little sense.  However, having the ability to deterministically specify EXT_SECRET_KEY still has considerable value.

Here are two candidate BIP 32 related Monero EXT_SECRET_KEY (extended secret key) prefixes to use as base58check extended prefixes for seeds:

1) msec => (0x03)(0xa4)(0xf9)(0x5c) = 61143388 base10

2) mprv => (0x03)(0xa3)(0xf9)(0x88) = 61077896 base10

What EXT_SECRET_KEY will the core Monero Team choose?

I'd recommend sticking with xprv and xpub in accordance with the BIP43 recommendation which states:

  Because this scheme can be used to generate nodes for more cryptocurrencies at once, or even something totally unrelated to cryptocurrencies, there's no point in using a special version magic described in section "Serialization format" of BIP32. We suggest to use always 0x0488B21E for public and 0x0488ADE4 for private nodes (leading to prefixes "xpub" and "xprv" respectively).


If I send two transactions to the same recipient, can they infer the true sender? I send two transactions to the same recipient.  The two sets of mixins used to generate the transactions would each include my public address.  Is the recipient then able to reasonably infer that my address is that of the true sender?

Your public address will never appear on the blockchain. What you're spending is amounts sent to one-time destinations so they're unlinked. Not only that, but each one-time addres will be "mixed" with a few others. With this, there's no way to link the two payments together. To the recipient, they will seem unrelated unless you tell him yourself they're coming from you.


Cheapest GPU that is possible to mine on What would be the cheapest GPU someone could mine on. It doesn't matter the speed, coins per watt, etc.
Just the cheapest, not for profit, just as a hobby.

Cheapest GPU is the one you have available. I mean, you can start mining with an integrated GPU like an AMD Radeon HD 7480D and get around 50 H/s.

If you want a full list of GPU Benchmarks, feel free to check my website:

http://monerobechmarks.byethost5.com/

Website's Reddit Thread

Website's Bitcointalk Thread


What is the best way to pop the top block from the monero blockchain and fix a bad "unknown top block" error in the sync data process? It appears whilst syncing the blockchain the computer halted resulting in a bad block at the top of the chain.
After restarting no more blocks are being added and just repeated errors.  There is probably a way to pop the top blocks off the stack of blocks and begin resyncing, is there a command for this with the new LMDB database format?

A sample of the error is:
2016-Oct-01 16:22:34.684999 [P2P3][104.168.166.221:18080 OUT]Sync data returned unknown top block: 1141839 -> 1148279 [6440 blocks (8 days) behind]
SYNCHRONIZATION started

While getting a bad block on top should not be possible in the first place, it could happen in case of crashes, etc, on some systems.

Popping one or more blocks can be done with blockchain_import, eg: blockchain_import --pop-blocks 1 will pop the last block. However, if the blockchain got corrupted somehow, this might not work.

Last, note that the message you are quoting here does not indicate any sort of corruption. It just tells you that a peer has a top block you don't know about (and thus may either be on a different fork than you, or synced further then you). In this particular case, you seem to be catching up with the network. From your wording, it appears you're constantly getting this message as well as not progressing, but the message itself is expected. set_log 1 in the daemon will tell you more about what the syncing problem is, if popping the last few blocks does not fix things for you.


What security risks are associated with accepting Instant Transactions? If a merchant decides to accept a Monero payment the moment it appears in the memory pool (before confirmation) what risks are being assumed?

Based on the probability of these risks being exploited, might there still be a business compelling need to accept them if amounts involved fall below a certain threshold?

The risk is that this transaction will not be included in a block, ever, and thus never pays the merchant.

The risk are the same as with Bitcoin, since Monero uses the same type of PoW system, so you may want to read up on doing this with Bitcoin.

One possibility for attack is that the transaction being sent to the merchant has an input which will be spent in another transaction that is being mined, but either not relayed to the merchant, or rejected by the merchant's daemon (since it spends an output that's already being spent in the pool). This requires that the second transaction be sent after the one to the merchant (so the merchant node can't receive it before from other relays), but reach mining nodes before the one sent to the merchant. So it's a timing race.

Another possibility is that a tx is sent to the merchant only. The merchant's daemon would normally relay it to ther nodes, so this only works if the merchant is in "listen only" mode. There is no such thing in the current monero daemon, but this might be done as an optimization in the future by a merchant who wants to save bandwidth.

As to how to balance the risks vs the loss if an attack succeeds, that is a decision for the merchant to take. If quick service is part of the merchant's appeal, there is an incentive to.


MINING AT LOW HASH RATE I'm very new to digital coin mining and I'm now just exploring this thing. I've got a rather outdated computer, and I'm now trying to mine monero with Wolf Miner. My current hash rate is around 35 h/s, which is, I assume, very low. So, I've got two basic questions:
1. With this hash rate, is it even worth the trouble to mine monero? Electricity does not count, as it is very cheap in my country, but my GPU and RAM become very loaded when I put the miner on, so I cannot do that 24/7, as I need my computer for other tasks. And what I'm worrying about is that if I need around, say, two years to mine XMR0.1, this will be just a waste of time...
2. I've been mining for around 2 days and got 250 shares. Is there any way to figure out how much XMR I have mined so far? I did not get paid to my monero wallet yet, of course, as it looks like I have mined a tiny fraction of a coin, but I still would like to know at least the approximate amount.

Thanks!


Does PayBee have a trademark? When I searched for PayBee today, in addition to https://payb.ee/ which is run by fluffypony I found another business with the domain https://www.paybee.org/.

After remembering this prior incident with Moneero, I wondered about PayBee

Does PayBee have any trademark protection?

Not in the US or EU jurisdictions. We're not bound by the name in any event:)


Error restoring from .keys file I lost my mnemonic seed and therefore would like to restore from my .keys file I created with Monero version v0.8.8.6. Being certain that I am using the correct password, I received the following message when opening my .keys file:

  You had been using a deprecated version of the wallet. Your wallet file format is being upgraded now. ( in green)
  Error: failed to load wallet: file not found "wallet" ( in red)

If I cannot locate my misplaced mnemonic seed, is there any way I can recover the Monero I have in my wallet?

Your Monero is safe. There was a load-from-keys bug with v0.8.8.6

Download the current Monero release or build from source and you will be able to recover using your .keys file and password

After recovery use the "seed" command in simplewallet and record your mnemonic seed in a safe place for offline cold storage.


Migrating Monero Fork from Test to Production When migrating from Test to Production of a Monero Fork, what needs to be considered? For example, launching the Seed Nodes in "--restricted-rpc" mode.

The only reason you don't have to worry about "--restricted-rpc" in testing is if the test servers are firewalled off from the world so that no external machines can connect.

In production, you need to worry about general operational security and availability/uptime issues. Your nodes should be running on servers that are properly firewalled so that only access to the Monero node ports is possible, and not to other services running on the server.

You'd check you have two factor authentication with your domain host and with your server hosting, so that people don't break into your accounts there and take over your machines. You'd do a standard server hardening, including things such as installing the latest OS updates and only allowing passwordless (public/private key based) access to SSH on the machine.

You'd need to ensure your server had enough bandwidth to serve potentially huge numbers of people that wanted to download from your node, and ensure that you have DDoS mitigation just in case someone wants to take your server down to mess up your big launch.

You'd also want multiple seed nodes in entirely different datacenters so there's no single point of failure. You'd want the datacenters to be in different jurisdictions so that no one country could shut them down. You'd probably reference the IP addresses of these machines by domain name, so you'd want domains from multiple TLDs so that no one domain authority can take over all of your domains.


Is there a list usable Monero Faucets? I am new to this forum.
Just wondering is there a list usable Monero Faucets somewhere?

As far as I know there are currently no faucets available for Monero. If I recall correctly though, MoneroDice is going to implmenent one in the foreseeable future.

Alternatively, if you want some spare change to play around with, people on IRC will generally give you some (there's a tipbot in #monero). The channel is #monero on freenode. To join this channel, simply connect to the freenode server in your client and join #monero. If you don't have a client, you can use this. Pick a nickname and set the channel to #monero.


What flags should I run with monerod to be the most helpful to the network? Additionally, do I have to port-forward in my router to let others sync off me?

The p2p interface doesn't require port forwarding at the router but the RPC interface does for remote access. Therefore if you wanted to help users needing a public remote node (e.g. for using a light wallet), you'd need to port forward to whatever RPC port you decide to listen on (--rpc-bind-port, the default being 18081). If you're going to do this, I suggest also using --restricted-rpc.

Now the p2p traffic, there are a couple of settings you can tweak which affects both the usefulness of your node to others and your bandwidth:

--out-peers arg (=-1)                 set max number of out peers
--in-peers arg (=-1)                  set max number of in peers
--limit-rate-up arg (=2048)           set limit-rate-up [kB/s]
--limit-rate-down arg (=8192)         set limit-rate-down [kB/s]
--limit-rate arg (=-1)                set limit-rate [kB/s]

For example, if the node is exhausting all your bandwidth, lower --limit-rate-up; if you have plenty of spare bandwidth, up it.

If you have significant bandwidth to share, and are opening up RPC, and you are going to maintain the node, you could also list your node on sites like moneroworld.


Implementation of monero on other curves Are there any other implementations of curves in the Monero code (other than Curve25519)?

I'm asking because the code is very optimized to this curve (e.g. the multiplication in 8 when computing the stealthy address).

And, I'm trying to add some feature, but the field of the Edwards curve is not suitable for my needs.

Thanks.

There are two birationally equivalent variants of X25519, which are Curve25519 and Ed25519. Monero uses only Ed25519.

There might be performance reasons for using Curve25519 vs Ed25519 depending on whether you're doing variable base or double base scalar multiplication, but I can't think of a reason that Ed25519 would limit you functionally. Curves provide a trapdoor function, and you should be able to functionally achieve the same result with any curve.


Lost Monero Coins but have seed words Back early 2018 I installed monero full node with intention to learn to mine, then actually purchased 7 coins. I wrote down the 25 words, but was too smart for my own good with the other passkey info. I wrote it in a way that I have info, but I basically know the info is incorrect. All I can guarantee is the date I opened the wallet, and the 25 words. This was pre ledger. I today installed GUI to a new computer, and tied wallet to ledger. I now have a synced wallet, but balance and history are both 0. The actually computer that was running the node was scrubbed. Have I lost my coins?

If you have the 25 words you can restore the wallet and recover the coins.  I'd do this on a PC and not a ledger at first. (Find the money then move to a ledger if desired)  The wallet has to fully sync to a fully synced daemon/node. If restoring by date/height make sure its a bit before that. or just do a full refresh.


lost my phone with 2FA code I lost my phone, so I lost my 2FA code too.
Now I have new phone and I cant to login to the my wallet in step 2. where I need to get 2FA code from Authenticator.
I am using Monero app on iphone.

I have numbers there.

Please help me with.

Thank you very much!

You’l need an Authenticator installed on new device. You can use your back up code/ recovery key to restore your account access.
Get your back-up code that you saved at the time of setting up 2FA with your older phone. This document has the recovery key that you can now use to restore Poloniex account on your Authenticator app.

P.S found it with a simple search on google ;)


Question about mining to a remote online wallet I am running a full node on my Mac and I want to start mining some XMR.

What is the right way to mine directly to my MyMonero wallet?
Is it start_mining my address ?

Will it auto send the XMR to my wallet? Or do I manually have to send the XMR to my wallet?

Yes, the start_mining <addr> command will send your mined Monero directly to the address you specify.

Most people that run their own full node will mine to a local wallet, but mining to a web wallet while not necessarily recommended for privacy reasons is possible. Mining directly to an exchange is only possible if the exchange supports integrated addresses.


Private key - implications of sharing and relationship to public address 1) What is the relationship between the private view key and its associated public address?

2) What concerns are there about sharing or even publicizing a private viewkey?

The public address is basically your public spendkey and public viewkey.  When you provide your public address to someone, they use the public spendkey and public viewkey to create outputs which only your private viewkey will identify as belonging to it and only your private spendkey will be able to spend.

Here's a partial quote from a reddit thread by core team member cloud10again:

  Secret (Private) spendkey: a 256-bit integer - only used in Monero transactions to compute the one-time "output private keys", which are actually used to sign transactions; however with current deterministic key derivation, the spend key also allows deriving everything else.
  Secret (Private) viewkey: another 256-bit integer - used in Monero to "decode" which outputs on the blockchain actually belong to your account. Can be given to an auditor or 3rd party, allowing them to discover your outputs as well.
  Public viewkey: a 256-bit representation of an elliptic curve point, svk*G. Used by a sender to compute a shared secret for stealth address creation.
  Public spendkey: a 256-bit representation of an elliptic curve point, ssk*G. Used by a sender to compute the actual output public keys from the shared secret, ensuring that only the private spend key can compute the key necessary to spend those outputs.

  Added "(Private)" by me, for clarity.

You can choose to share your private viewkey, or you can choose not to.  Monero has privacy by default, and the ability to be open is optional.  If a person or organization is okay with sharing a tool that allows for all deposits in their account/address/wallet to be verified in real-time, then that's their perogative.  In some cases, it may even be desirable, possibly such as in the case of a public charity or a government entity.  Many end-users value Monero for its privacy, so sharing the private viewkey in their case would not be desirable.


What purpose is served by the file p2pstate.bin? There are times when it is advised to delete this file, since it will be recreated the next time monerod (or the GUI, running monerod within it) is started.  But what's in this file?  What does it do?  Does deleting it do any harm?

This file contains the list of peers the node knows about, along with the time they were last seen. Deleting it clears that memory, and the node will have to rely on seed nodes to get a new list of peers.

Keeping this file means that you don't have to rely on the seed nodes to be able to connect to the Monero network, as you already know of a large number of other potential nodes to connect to. This decreases the centralization whic comes with asking the seed nodes first (while there are a dozen or so, I believe they're run by the Monero core team).

When talking to other nodes, lists of known peers are exchanged, so you can then keep up to date without having a need for seed nodes (though those may also be contacted, as they are normal Monero nodes too).


Will the viewkey ever be able to view both incoming and outgoing transactions in a wallet? I am aware that the current viewkey setup allows us to check for funds sent to our wallets.  However, in the example case of cold storage, it would be very nice to be able to check if funds are still there as well, giving us a sort of "live" view of a wallet balance.  Is there a possibility of the viewkey giving us that ability at some point?

Very unlikely, unless the crypto changes substantially.

However, if your goal is to see whether your cold storage has gone bye bye, there is a way to do this (though no current tooling to allow you to do this easily currently): the cold wallet can export the key images for the outputs it received, and a hot wallet can watch the blockchain for those. If they appear at some point, it means the corresponding output was spent. Hopefully by you :)

Feel free to file a bug on https://github.com/monero-project/bitmonero/issues asking for that particular capability to be added to the tooling.