Wrong chain, maybe - maybe not - no transaction possible, wrong balance... please help! I'm really getting so frustrated - cannot resolve following issue:

My wallet is showing the wrong balance
I cannot transfer any money ("Daemon is busy")

Seems like I am on the wrong chain, right?

So I tried following this guideline:

I forgot to upgrade (from CLI or GUI v0.11 to CLI or GUI v0.12) and, as a result, accidentally synced to the wrong (alternative) chain

I updated from 12.2 to 12.3 and now I've been waiting for days and theres nothing happening. I am on Macosx High Sierra using the GUI version.

This is what my log says:

[31.07.18 09:01] Height: 1622140/1622140 (100.0%) on mainnet, not mining, net hash 458.90 MH/s, v7, up to date, 0(out)+0(in) connections, uptime 0d 8h 1m 44s
[31.07.18 09:02] Height: 1622140/1622140 (100.0%) on mainnet, not mining, net hash 458.90 MH/s, v7, up to date, 0(out)+0(in) connections, uptime 0d 8h 2m 44s

The latest transaction to this wallet happened in block no "1615882" with now "No of confirmations: 12630" - these funds are not showing in my wallet and I cannot transfer the existing funds...

I do not want to delete the whole blockchain and start over from scratch...

Do you have any tips? I really do need the money :( - Thank u

You should try to rescan your wallet for spent output with rescan_spent from the cli. It should remove your spent transaction done on the wrong blockchain.

Otherwise you could try to pop the blocks to restart syncing before the transaction:
./monero-blockchain-import --pop-blocks 6500
This will remove the 6500 blocks and when you will restart monerod it will sync again.

Edit: try first option. If it does not help, pop the blocks and scan again.


Minimum amount of keys needed to recover funds? Is it possible to recover all your xmr funds from providing only your private spend key? Or do you need the private view key too?

What is the minimum one needs to sweep all coins out from an address? And how can this be done in the cli if you only had the private spend key?

Is it possible to recover all your xmr funds from providing only your private spend key?

That depends on whether the private spend key is deterministic or not.

First, a bit of history. In Monero's early days (before 24 (and later on 25) word mnemonic seeds), Monero's private spend key was non-deterministic. In other words, the private spend key and private view key were both independently and randomly generated. As a result, losing access to either of those would result in you not being able to retrieve your funds (note that the .keys wallet file would still contain all your keys). Nowadays, however, the private spend key is deterministic and the private view key is derived from the private spend key by hashing the private spend key with Keccak-256 (hash_to_scalar). Subsequently, the private view key is reduced modulo l (sc_reduce32).

  Or do you need the private view key too?

Thus, in sum, you need the private view key too if the private spend key is non-deterministic. If, however, the private spend key is deterministic, you can simply derive it.

  And how can this be done in the cli if you only had the private spend key?

For "spend" wallets, the CLI will currently only accept full key pairs, i.e., it requires both the private view key and the private spend key in addition to the public address. Thus, the CLI will not derive the private key for you if your spend key is deterministic.

Fortunately, there are tools out there to derive the private view key from a deterministic private spend key. You can, for instance, use this tool from luigi1111 (a Monero core-team member). It is used as follows (in case of merely possessing the deterministic private spend key):

You can either browse to this link or download the ZIP file from here (in case you want to use it locally and/or offline).
Enter your deterministic private spend key in box 2. Hexadecimal Seed:
Click Gen 3. & 4.
Click Gen 5.
Click Gen 6.
Click Gen 7.

You can now take the private spend key from box 2. Hexadecimal Seed:, the private view key from box 4. Private View Key:, and the public address from box 7. Public Address:. Subsequently, you can proceed to restore / recreate the wallet --restore-from-keys <arg> flag from the CLI. This is done as follows:

Windows:

Go to the folder monero-wallet-cli is located and make sure your cursor isn't located on any of the files. Subsequently do SHIFT + right click and it will give you an option to "Open command window here". Note that, if you're using Windows 10, it'll, most likely, give you an option to open the Powershell. Lastly, type the following command:

monero-wallet-cli.exe --generate-from-keys <new-wallet-name>

If that doesn't work in the Powershell, type:

.\monero-wallet-cli.exe --generate-from-keys <new-wallet-name>

If that doesn't work either in the Powershell, type:

./monero-wallet-cli.exe --generate-from-keys <new-wallet-name>

Linux and Mac OS X:

Open a new terminal from the same directory as monero-wallet-cli and subsequently type:

./monero-wallet-cli --generate-from-keys <new-wallet-name>

In the GUI you can simply select Restore a wallet from keys or mnemonic seed on the second page of the wizard (first page is language selection). If you currently have a wallet open, you ought to go to the Settings page and press Close wallet first.

To end, a few notes:

In general, when restoring a wallet, one has to add a Restore height. It's relevance can be found here: What is the relevance of the restore height?
You can currently still generate a non-deterministic private spend key (using the CLI) with the --non-deterministic flag.
A relevant SE question for visibility: Can you sweep a wallet if you only have the private spend key?
Luigi111's tool also has a great informational part (at the bottom under How Cryptonote Addresses Are Created).


Download Link Monero 0.11.0 (Helium Hydra) broken This link (64-bit Linux GUI) is broken. Also the 32-bit GUI has an invalid link. Where can I get the correct file(s)?

The GUI links on the download page were temporarily broken on purpose as the prior Beta 2 GUI was about to be updated in advance of the v6 fork. The Helium Hydra command line release became available before the graphical user interface. As of the time of this edit, the GUI links on the download page are now available too.

The now outdated GUI Beta 2 release files are still available here just like other archived links to prior major releases.


MoneyBit GUI compared with "official" GUI How MoneyBit GUI now in development compare with the official GUI being worked on by Monero developers?

Will they ultimately support the same operating systems? Are they both completely open source? How do the current and planned features compare?

According to the MoneroBit author, Athan Clark the primary differences between MoneyBit and the official QT wallet are:

  the core dev's GUI will always be more secure than mine.
  mine is portable to mobile and alternative platforms fairly easily, and feel more modern than something like electrum. It's also capable of being used as a personal web wallet for internal (or external) networks.
  Mine is written with functional languages, and I wanted to showcase how they can be used to write correct software rapidly. I've already found a few quirks about monero-wallet-cli that in my eyes shouldn't need to exist because I work at a higher level. This project is also something like a proposition to use strongly-typed functional programming languages like Haskell and Elm rather than C++ and JavaScript.

MoneyBit is an independent project without official support from the Monero core team:

  I haven't gotten a blessing from /u/fluffyponyza, nor have I spoken with the core devs about my project to get their approval. The folks on the IRC channel have so far been very appreciative and interested, but that's just speculation. I don't want to step on anyone's toes, and would very much appreciate a "cease and desist" if my project conflicts with the intentions of Monero. But so far I haven't gotten any bad news, but also no good news either. I'm not sure where I stand with them.

Currently Athan Clark is seeking community input on his development proposal and hopes to raise Monero via the Forum Funding System to fund continued development and support of MoneyBit.


Solo mining Monero without downloading blockchain Is there a way with mining Monero solo without downloading the blockchain?

I have about 20 Raspberry Pi’s, which I didn’t pay for also I don’t pay for electricity. Downloading and syncing a large file on a Raspberry Pi isn’t very efficient, so is there a way to set it up without a pool?

I am trying to keep away from a pool because I wouldn’t be able to withdraw my balance until it gets up to a certain amount.

But with 20 free Raspberry Pi’s (half model b+ and half model b) and free electricity, will it be efficient to mine on a pool?

No, definetley not worth the time required to set them up for solo mining, if that's even possible. If it is possible, you'll probably never win a block.

As for pool mining, I guess it depends on the hashrate you can get out of one board but for comparison my i7 does about 90H/s, where a single 1070 will do about 500-600H/s using less juice. If there is software for an ARM board to do pool mining, and if you connect them all to the same address I'd say you'd probably be able to make a very small withdrawal every couple of days if you choose a pool with a low withdrawal limit.

Even so, considering the time spend setting it up you'd be better of mowing your next doors neighboor's lawn once a month for some pocket money and wouldn't surprise me if you'd be making a more money for a LOT less time.


RPC throwing "method not found" error when I'm trying to call from curl I'm new to Monero. When I'm using curl, all the wallet RPC calls are showing "method not found" error but getnumberofblocks method is working. I'm running the daemon, is it is necessary to run the wallet RPC? If yes, how do I run that?

For wallet operations over RPC, you need to have the monero-wallet-rpc running. An example command to run the wallet RPC server:

monero-wallet-rpc --wallet-file /some/wallet --rpc-bind-port 12345 \
    --prompt-for-password

(replacing the wallet file path and port number above to your choosing).

Other options can be specified also, seen via running monero-wallet-rpc --help.

All of the wallet RPC methods are documented here and daemon RPC methods here.


As a XMR recipient after HF4 is there a way I can only accept RingCT payments? This question discusses how both RingCT and non RingCT transactions will be allowed between HF4 and HF5. It also discusses how a user can turn all non RingCT outputs into RingCT outputs.

As a Monero recipient after HF4 is there a way I can only accept RingCT payments and reject non RingCT payments before HF5 arrives?

If by "reject", you mean prevent that transaction from being mined and being available to your private key, then no.

If by "reject", you mean only act on rct payments, then you could ask the client for a monero address to return non-rct payment, possibly minus a small fee to cover the tx fee (for instance, I believe shapeshift will return your monero if you don't pay the exact amount, or if you send too late).

The intent of allowing both transaction types for a while is to leave some time for people to update, and not summarily reject transactions in too short a timeframe. Moreover, switching at once would mean the anonymity set for rct outputs would be pretty small for the first few rct outputs being sent in rct transactions, though that will fix itself quickly.

Please note that if you want rct outputs, you can resend any newly received non-rct outputs to yourself as an rct transaction.


My wallet rpc server's balance doesn't update Pool admin here, I have the money, and I've waited 30 blocks and it says its not unlocked yet along with the rpc server not updating its balance. Should I just wait or is something wrong.

2016-11-10 08:53:54 Error with transfer RPC request to wallet daemon {"code":-4,"message":"not enough money"}
2016-11-10 08:53:54 Payments failed to send to {"amount":100000000000,"address":"x"} { amount: 200000000000,
  address: 'x' }

Waiting 10 more mins until it reached ~60 block maturity allowed me to access my coins. The problem wasn't to do with the server, but to do with the fact that the mined coins must wait much longer than normal transactions before they can be unlocked and spent.


Simulating stealth address construction with JavaScript I am trying to build an exercise. I want to produce a random 256-bit seed to give as an input for creating a Monero stealth address.

1) What are the restrictions on this seed in practice? I know it must be a legitimate scalar, but is that satisfied by it being 256-bit length? Can it be any random 256-bit number? If not, is there a javascript library for that calculation?

2) I have to write this exercise's grading program in nodejs (it is part of a bigger project). Does anyone know where I can find a javascript library that supports the needed calculations? (e.g. keccak, bytes_to_words, words_to_bytes, sc_reduce32, private_key_to_public_key).

For reference, the process for the calculation of a Monero stealth address is explained here very well.

1) Private keys are a randomly chosen 256-bit number mod l. l being 2^252 + 27742317777372353535851937790883648493.

2) All the functions needed are in the source files of the site linked in the questions answer you linked to. Just use your browser debugger to access them.


How far will Monero scale up (gradually or instantaneous)? Say the economy of Iceland decides to use Monero as their official currency overnight. It would fail, right? I am pretty sure that the network could not handle a million daily transactions (how many does it handle now?).

What would the mechanism of failure be:

Confirmations time out due to lack of miner resources?
The blockchain grows too big to be handled by computers?
The network collapses under severe traffic?
Other...

Now if we have time for gradual adoption, will things look differently? Slow growth of the network and some tweaks to the code. Will there still be a technical cap on the adoption of Monero?

I am pretty sure that the network could not handle a million daily transactions (how many does it handle now?)

In the last day, Monero processed an average of 2.22 transactions per block excluding coinbase transactions. This comes to about 2.22(30)(24)= 1598.4 transactions per day. As demonstrated by the August 2014 spam attack, Monero blocksize limits allow for scaling with increasing transaction volume.
Scaling can happen quickly but not instantly. In your hypothetical example where transaction volume goes through the roof overnight, transactions would get relayed but sit in the txpool until expiration. Given enough time, the maximum blocksize would scale to allow the greater load.
Based on these transaction per second estimates Monero can handle roughly 1700 transactions per second with a  Intel i7 2600k quad core processor. Transaction validation is quick and 1 million transactions per day would be extremely easy for all modern computers. 1700 transactions per second(60)(60)24=146,880,000 transactions per day that can be validated by the 2011 computer processor mentioned above.
Hard drives are getting cheaper every year. 2TB SSDs are now available for under 1 Bitcoin (under 100 Monero). The cost of storing the blockchain is not significant for those that value their privacy enough to run a full node.
For the foreseeable future, bandwidth (not validation times or memory cost) will be the limiting factor in parts of the world with outdated infrastructure. Monero is working to reduce bandwidth requirements with things like Fluffy Blocks. Pruning like being experimented with by Aeon and light clients can also reduce the need for bandwidth for those with metered or slow Internet .


Can a remote node know my wallet address? When I connect my wallet to a remote node, does it know my wallet address?

What information about a connecting wallet is revealed to the remote node?

No.
The only leaked data is your IP to the first node as you connect to it. This can however be prevented by the use of VPNs or Kovri once available.


X-Wallet IOS restore wallet I have a X=Wallet on IOS,my phone screen got ruined so after a week my phone was fixed but my wallet just sat froze unable to send or receive.i uninstalled the app then tried on other iphones to restore wallet by the seed to no avail.Can anyone tell me how to properly restore my X-Wallet and on what device i do it on please help me,When i try to restore existing wallet on a Iphone it does nothing ive tried to put the words in every way but after putting in seed you are suppose to hit return after each single word which there is no return on Iphone only enter,

From the XWallet website:

  Recovery
  A standard 25 word mnemonic format means you can recover directly into the Monero reference client.

So just download the official Monero client (GUI or CLI), sync the blockchain and recover wallet from seed.


What is the purpose of enforcing a minimum mixin? Each person can choose a mixin as high as they like when sending Monero.

For those that receive Monero solely from mining (never accepting Monero payments) is there any reason why a minimum mixin enforcement would be beneficial?

For any particular person, maybe not. But in general, a miner might want to hide the fact that he or she may be mining (or even mining a particular block). For instance, if a third party knows you mined block B, and they see coinbase from block B moving, then they know it must be you.

The minimum mixin is imposed to prevent a tragedy of the commons scenario where people sending with mixin 0 would degrade the privacy of others who use (either before or after) those outputs as fake outputs. If outputs A, B, and C are used in a ring signature, then outputs A and B get spent with mixin 0, then C has no privacy added from the use of ring signatures.

The problem is described in https://lab.getmonero.org/pubs/MRL-0004.pdf, which recommends a minimum mixin value.


Tutorial on how to make a trade on the Bisq Decentralized Exchange using Monero to Bitcoin? With the growing adoption of the Bisq exchange, is there an easy to follow tutorial on how to trade Monero to Bitcoin using the Bisq Decentralized Exchange? How does it work exactly? Is there a monero address you deposit your coins to inside the Bisq applicatoin? And do you have to leave your computer on to make a trade as its a P2P (peer to peer) trade?

Check out this guide to understand how it all works.

BTW: Not only has the computer to be turned on, but the trader also has to be online


What changes are in the Monero 0.11.0.0 release? 0.11.0.0 was just released. What are the major changes in this version?

Major improvements

minimum ringsize increased from 3 to 5
mandatory RingCT for all transactions
major synchronisation speed-up
massively improved the blockchain import function
changed terminology from "mixin" to "ring size"
add a --fluffy-blocks option to relay blocks as fluffy blocks if possible
allow for password verification without loading the subsequently unencrypted - - - wallet into RAM
reduced privacy leak risks when using untrusted remote nodes

Full release notes can be found on Github as usual.


What is Monero's release naming convention? The last two Monero releases are alliteratively named Hydrogen Helix and Wolfram Warptangent. Is there a convention used to name those releases, such as Ubuntu's also alliterative adjective/animal archetype (see what I did there) ?

Monero's naming convention of a chemical element + a star or constellation is the result of a discussion on the official forum: "Now for some fun: naming Monero releases"

Regarding alliteration:

  "using alliteration / assonance for maximum awesomeness." (fluffypony)

First release with this scheme is 0.9.0 ("Hydrogen Helix") and has been chosen in thread Name the Next Monero Release!

For v0.10.0 ("Wolfram Warptangent"), the scheme has been partially ignored to honor contributor Warptangent who passed away and had done a lot of work on the project among other on RingCT.

Note: Wolfram is an other name for Tungsten.

(Wikipedia, By Alchemist-hp (talk) (www.pse-mendelejew.de) - Own work, FAL, https://commons.wikimedia.org/w/index.php?curid=10424635)


Generated wallets on testnet receive no transactions I have set up my own testnet. When I generate a new wallet by using monero-wallet-cli --testnet --restore-deterministic-wallet and providing a seed, it works as expected. Wallets receive both mined and transferred coins.

However, if I create a new wallet using monero-wallet-cli --testnet in an empty dir, the new wallet doesn't see any incoming transaction and balances are 0/0. refresh command doesn't help.

Then I issue seed command, copy the words away, exit client, delete all wallet files and start again by monero-wallet-cli --testnet --restore-deterministic-wallet and paste the seed I copied. Suddenly, the wallet now refreshes transactions as expected an calculates its balances properly.

This is most likely the bug fixed in https://github.com/monero-project/monero/pull/2542. If you can't or won't patch your copy to include this small fix, a workaround is to ensure you have a synced daemon when you create the wallet, so that monero-wallet-cli can access it to query the current blockchain height.


Explaining result report at XMR-STAK Here is the example of result report by XMR-STAK:

RESULT REPORT
Difficulty       : 13214
Good results     : 6330 / 6331 (100.0 %)
Avg result time  : 10.0 sec
Pool-side hashes : 83681055

Top 10 best results found:
|  0 |         73934015 |  1 |         70496651 |
|  2 |         42197234 |  3 |         37331106 |
|  4 |         25657807 |  5 |         23286815 |
|  6 |         15785406 |  7 |         14788188 |
|  8 |         13255493 |  9 |          7888863 |

Would be nice to know what exactly these lines mean:

Avg result time
Pool-side hashes
Top 10 best results found

Just shooting from the hip, but

Average time: time between good results

Pool side hashes: all the hashes you sent (Depends on your diff and H/s)

Top 10: results with the highest difficulty

(could be, and probably, off base)


How does TumbleBit privacy and security compare with Monero? How would a Bitcoin implementation of a TumbleBit payment hub compare with Monero?

What are the important differences between the two in the areas of privacy and security?

Update 2018.02.04 In light of recent of environment changes, this answer needs update, since blockchain scalability cannot be ignored anymore. TumbleBit's mixing technique became completely uneconomical, due to high fees. Although Monero has a similar fee problem, not as bad as TumbleBit has. That being said, TumbleBit has a Payment Hub mode, which is just as unusable, because it's unidirectional, however if someone figures out how to make it bi-directional, then things can change. As far as I know, nobody works on its payment hub mode.

Original post:

You are specifically asking for privacy and security, so I will omit the practicality, where Monero would win by far if we wouldn't count that it needs to have its own token to work.

From a privacy point of view TumbleBit's payment hub might be slightly superior, since it's borrowing the anonymity set from Bitcoin users and if there are more Bitcoin users than Monero users that'd result in better privacy.
TumbeBit uses a central server, called the Tumbler.The only disadvantage having a central server is if the server goes offline no payment will happen, but this does not affect privacy.

From a security point of view there is not much to talk about. None of them has the risk of losing money. Both protocol is theoretically secure. How they are/ will be implemented is an other question.
I would also like to mention cryptographers might also make the argument that TumbleBit solely relies on text-book RSA cryptography.


How to check the number of confirmations for a transaction? I assume XMR should have confirmations similar to BTC, so how to check it? I am asking because when I transfer monero to poloniex using monero-wallet-cli, poloniex kept me waiting for a while. When it was Bitcoin, I usually check the confirmations to know how long it will be, but in monero, how can I check it?

Thanks :)

As far as I know there is currently no "amount of confirmations" displayed by any of the block explorers. However, an easy way around this is to subtract the block your transaction was included in from the current blockheight. This will give you the number of confirmations. Thus, let's say your transaction was included into block 1111111 and the current blockheight is 1111130, your transaction has 1111130 - 1111111 = 29 confirmations.

Note that you can check the blockheight of your transaction by entering the transaction ID / hash into MoneroBlocks. The From Block is the blockheight your transaction was included in. The Height on the front page of MoneroBlocks is the current blockheight.


Does the CONOP definition exclude pruning branches from its node definition? Paul Sztorc in his post Measuring Decentralization defined CONOP as

  For this section, the cost of the option to create a full node will be referred to as the “cost of node-option” or “CONOP”.

The implication is that the more full nodes that are being run in a decentralized manner the better.

Monero controls the growth of its blockchain (and thereby the cost to run a node) with an adaptive blocksize that scales based on demand. Riccardo Spagni elaborated on this during his Dynamic Block Size Cap presentation

We know that it is possible to prune Monero (because it is being done already in a Monero fork called Aeon) and that pruning may further reduce the cost of running a node. However, do pruning branches fail to meet the node definition of CONOP as defined by Paul Sztorc? How can Monero balance the security advantages of a network with primarily full nodes with the possibility than pruning might decrease the cost to run a node and lead to more usage?

By definition pruning branches cannot be considered full nodes because they are missing the data that has been pruned. Pruning branches are not full nodes according to the definition of CONOP.

This explanation explains why full nodes (in addition to pruning branches) are necessary.

  Pruning data makes a node unable to supply the pruned data to other syncing nodes. That data is necessary to fully validate the blockchain in a trustless manner, so while a client may decide to trust a pruned node, there should be at least a few "full data" nodes on the network, keeping the entirety of the blockchain, in order to keep the ability to re-verify the whole thing from scratch.


There are three options for CPU mining Monero on a pool. Which one is best? I see Claymore's CPU miner, Wolf's CPU miner, and YAM. How do I know which one to choose?

Try them and see? Of the three Wolf's CPU miner is the only open source option; the other two, claymore and yam are closed source and do "fee mining" for the creator, sending a few percent of the hashes to the creator's pool and address of choice. I don't think there's been a really objective comparison of the three, especially across a range of processors. The best way to see would probably be to use each to mine on a largeish pool for a day or three using each of them when difficulty is relatively flat and see which gives the largest payout.

Edit: there is also now the open source xmr-stak miner, which I believe has a default donation to dev that can be disabled.


Who controls the servers behind the IP addresses used for bootstrapping nodes for (initial) peer discovery? Monero, like Bitcoin has some IPs hardcoded which are used for the initial peer discovery bootstrapping process, see https://github.com/monero-project/monero/blob/35d5aa36c9b2f4bba169e5947039bf7871649ee1/src/p2p/net_node.inl#L374-L392

Currently, the list consists of these 8 IP addresses:

107.152.130.98
212.83.175.67
5.9.100.248
163.172.182.165
161.67.132.39
198.74.231.92
195.154.123.123
212.83.172.165

My questions:

Who controls them?
How does Monero deal with BGP or similar attacks?
Is the communication with these nodes authenticated?
Who decides which IPs are added? What would it take to get my node added to the list?
To how many of them does my node connect (and when)?

As a partial answer, here is a list of reverse DNS lookups followed by their respective WHOIS owners:

107.152.130.98 > monero.cc > Riccardo Spagni
212.83.175.67 > poneytelecom.eu > Unknown
5.9.100.248 > your-server.de > Martin Hetzner
163.172.182.165 > scaleway.com > Unknown
161.67.132.39 > Unknown
198.74.231.92 > Unknown
195.154.123.123 > poneytelecom.eu > Unknown
212.83.172.165 > getmonero.org > Riccardo Spagni

However it looks like these are fallback IPs. Initial seeds are fetched from these addresses:

seeds.moneroseeds.se > Unknown
seeds.moneroseeds.ae.org > Riccardo Spagni
seeds.moneroseeds.ch > Riccardo Spagni
seeds.moneroseeds.li > Riccardo Spagni

  Who controls them?

These core peers are hardcoded and thus only managed by several trusted persons by the core members, as Riccardo Spagni (among his 83+ DNS addresses). You'll see that at least 5 peers are owned by Riccardo Spagni and another one by Martin Hetzner (unknown to me, it is possible that this reverse DNS lookup is wrong). I don't think that someone will come forward and give a full list of names as the anonymity related to some IPs prevents a social engineered attack.

  Who decides which IPs are added?

The core team. Any added IP would however be reviewed through the GitHub PR process preventing any unwanted ones from being inserted.

  What would it take to get my node added to the list?

This won't be allowed as far as I know. These core peers are the backbone of Monero and must be managed by known people to the core team. These 8 IPs and 4 addresses guarantee a sane network and must be running 24/7. Allowing anyone to add their IP would make the network vulnerable to a hostile take-over.

  To how many of them does my node connect (and when)?

Your node seems to try to have 12 connections.
For as far as I know the IPs are used as a fallback if you didn't reached the 12 seeds.
The connection is made upon initialisation. But here again, I might have mis-read the code.

  How does Monero deal with BGP or similar attacks? Is the communication with these nodes authenticated?

Although I don't have a certain answer here, All these IPs and addresses are public as well as Monero's source code. I haven't been able to find any code specifying a special check which would mean that these kind of attacks are possible.
However, I don't see which effect they could have. All they would be able to do is block your transactions or fake your balance without having any definitive actions on your wallet. The signing process on Monero's transactions will prevent them form redirecting your funds. A more productive attack would be that an attacker fakes a website donation page and forces you to make a donation to his fraudulent address.


What is the future potential of MoneroChat? I am aware that this is likely quite far down the line of development goals (https://getmonero.org/design-goals/), but I'm very curious about what is planned for MoneroChat as an encrypted messaging service, possibly with the addition of sending/requesting payments.

Are there any core team members who could expound further on this tool?

Monero/Aeon developer smooth, quoted below explains the encrypted messaging system he is currently researching:

  There are many ways one could implement messaging, but I don't favor storing p2p messages on the blockchain itself. Encrypted is even worse, in a way, since that can't possibly be of any benefit to anyone other than the specific recipient. (At least if you store bible verses or dick pics, there might be a few people who are interested in that.)

  I would propose something like:
  Create and submit a small transaction that pays a fee and includes a hash.

  After the transaction is successfully mined, you may submit a message packet up to some maximum size (for example 32 KB) that matches the hash (assume the message is encrypted, but it wouldn't necessarily need to be) into the mempool, where it will be stored and relayed to peers. Once the transaction reaches a given depth in the chain (for example seven days; 5040 blocks), the hash expires and the message may no longer be submitted or relayed.

  It is true that it is extremely difficult if not impossible to prevent use of the blockchain for storage of arbitrary data that does not benefit most of the people incurring the cost of the system, but providing a useful mechanism that does much the same thing in a less harmful manner is a good way to discourage it.

  Possibly the lifetime and allowable size of the message could be a function of the fee paid, but there is no good way to set the fee, nor a good way to compensate the node operators for storing and forwarding it, so the suggestion of a fixed life and size is intended to limit the cost to something reasonably negligible.


Monero project for charity/non-profit I wound like to create a "split the monero pot" for charity/non-profit organizations.
The process for donating using XMR is easy, it's the people who don't have any crypto wallet to donate.

My thought would be to use MyMonero and exchange site via an API to convert the credit card info into XMR.

I checked the MyMonero site for features but I couldn't find any.  I read that MyMonero can create a wallet via an email address, is that correct?

The idea is for the credit card user to enter their email along with their credit/debit card information. Then the API would use the exchange to convert the money to xmr, then use My monero to create a wallet for the user so that if the user wins the pot, the system would send the coins to their new wallet, then email the user to notify them that they won. Then the user goes back to the site or clicks on the emailed link to determine if they want to convert/use the exchange to send it to their Bank account or keep the coins in their new wallet.

Can MM be used for that process?

Thank you,

Without commenting on the idea... MyMonero is a web wallet which makes it easier for someone to have Monero. It is not a payment processor, which seems to be what you're after. So MyMonero isn't suitable.

Anything touching fiat money tends to be hard to get to due to regulations: most countries demand thorough spying on your customers, so many companies aren't able to withstand the costs of doing so. Something like https://bitpay.com may be close to what you're looking for, though they do settle in Bitcoin, not Monero. https://globee.com/ settles in Monero, but does not accept credit cards as far as I know. Maybe a combination of Bitpay and the API from https://shapeshift.io (to convert Bitcoin to Monero) might work for you ?


Buying Monero and saving to Ledger I wish to buy cryptocurrency (Monero) for the first time: I have no real knowledge of how to do this, and I wish to pay in cash. Can this be done? I have bought a Ledger Nano S but haven't received it yet. Could someone spell out step by step how I do this without getting ripped off? Is Monero a good choice for investment?

You can purchase Monero for cash directly on sites like https://localmonero.co/. Alternatively buy BTC for cash somewhere like https://localbitcoins.com/ and convert to BTC to XMR on something like Bisq or ShapeShift.

You specifically stated "pay in cash" which is why I didn't list alternatives.

To store on a Ledger, you will need to set this up first (either using the Monero GUI or CLI) and use your new wallet address as your receiving wallet when you buy your XMR. A GUI guide can be found here and CLI here.


Is it possible to restrict to scope of rescan_bc in monero_wallet_cli? Is it possible to restrict to scope of rescan_bc in monero_wallet_cli?

A rescan can be quite long, it would convinient to be able to limit it when rescanning a recent wallet, is it possible?

Not directly, but rescan_bc should not be needed in most cases nowadays. It used to be that the wallet's idea about what outputs are spent would get out of sync with the network, but I believe no such bugs exist anymore, making rescan_bc unnecessary.

If you rescan the blockchain by recreating a wallet from seed or keys, you will be prompted for a block height to rescan from.


Question about Moneros privacy I searched a lot, but I can't find an answer to my question. If I send one Monero from wallet A to wallet B. Is it possible to find out how long I was holding this one Monero in wallet A? That's not possible, right? Because you can't even get any information on the sender from wallet A, right?

Thanks for any input regarding this.

Yes that is correct. Only thing that is known is, that there was some transaction. Nobody can tell from which wallet to which other wallet, who did it, which amount was involved and you cant tell the balances of any of the wallets. Not even if a wallet send coins or received coins.

You can basically tell nothing about any transaction. You can just count them without knowing any meaningful context about them.


What would happen if monero were to switch to RandomJS mining algo? There seems to be talk of switching to randomJS for mining. What would this affect? Is there even a gpu miner for something like this and is it even gpu minable?

What's so great about RandomJS vs every other new mining algo that's relatively new?

The problem with literally every static algorithm is that sooner or later someone will find a way how to build a chip just for that purpose, since every algorithm has its own requirements on hardware and on general purpose machines uses just a fraction of available resources. ASIC manufacturers remove all unneeded stuff and create circuits just for one algorithm into silicone. These chips are pretty dumb and cannot perform anything else than their only algorithm, they cannot even be programmed otherwise and when there is just some small adjustment they become useless.

RandomJS (among other attempts) creates random code which has to be executed and a miner does not even have the time to optimise FPGAs for it, but the best ASIC to run it is an CPU (or GPU). The "problem" currently is that there is no full (optimised) JavaScript interpreter for GPU chips yet, but I'm pretty sure it will ship soon, at least for newer GPU generations.

RandomJS would make manually applied algorithm changes for mining obsolete which is just good for the future of the project and the other aims which do so with the block size or min-fees. Manual protocol changes should be the last option, since every time they are applied they also offer new attack vectors.


C/C++ - What is nonceptr in scanhash_cryptonight function? This is a C/C++ programming question related to CPU mining. In the source code for CPU miners wolf-xmr-miner, cpuminer-multi et al there is a function called scanhash_cryptonight that has this the following prototype:

int scanhash_cryptonight(int thr_id, uint32_t *pdata, const uint32_t *ptarget,
                         uint32_t max_nonce, uint64_t *hashes_done);

The parameters pdata and ptarget are pointers to members of a struct that looks like this:

struct work {
    uint32_t data[32];
    uint32_t target[8];

    /* ... */
};

Now when scanhash_cryptonight is called there is this nonceptr variable that is initialized like this (link to scanhash function):

uint32_t *nonceptr = (uint32_t*) (((char*)pdata) + 39);

My question is: what is the value of nonceptr used for and what is the casting in the expresssion doing?

nonceptr is a pointer to the place where the nonce is in the block header (pointed to by pdata). It is defined as a pointer to an unsigned 32-bit integer because the nonce is 32 bits long, and it is used when mining to easily change the nonce (e.g. *nonceptr = new_nonce;).


What's the fastest way to display the block height with a shell script? What's the fastest way to display the current Monero block height with a shell script? Doesn't matter which scripting language. The idea is to call this script or block from other scripts, so it should just return the value.

I propose the following with simple bash scripting using curl and jq.

First, install jq (to parse json)

macOS: brew install jq
Ubuntu: sudo apt-get install jq
Others at https://stedolan.github.io/jq/download/

Then, write a simple bash script

Using the moneroclub public node:

#!/bin/bash

INFO=($(curl -sS -X POST http://node.moneroclub.com:8880/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"\
get_info"}' -H 'Content-Type: application/json' | jq '.result.height'))

echo $INFO

Alternatively, using moneroblocks.info:

#!/bin/bash

INFO=($(curl -sS -X GET http://moneroblocks.info/api/get_stats/ | jq '.height|tonumber'))

echo $INFO


Can pool miners update early and then the pool software will automatically ask its workers for new POW when necessary? Many people mine Monero in a pool.  Monero has recently changed its proof of work, and it is about to do so again.  There may be more changes to its proof of work in the future.

When miners update their mining software, they will presumably do it in advance of the proof of work change, meaning the mining software should be able to use the existing proof of work or the new proof of work.  Miners don't have a blockchain, of course, so the mining software itself doesn't know which algorithm to use.

Pools have a blockchain, of course, so they will know what type of proof of work is needed.  When it is time to change to the next proof of work, will pools automatically request the new proof of work from its miners?  In other words, if miners and pool operators upgrade in advance of the proof of work change, will the network seamlessly switch from one algorithm to the next?

Monero's PoW switch happens at a particular fork, and most miners will switch PoWs at the right block, provided they're up to date. This is possible because the block template which a pool sends a miner contains the block version number, which is incremented at each fork.

Therefore, a miner can, and should, update prior to the fork, and does not need to do anything else.

Of course, this assumes the pool also updated, since a pool using out of date code will get stuck at the fork.


Sent to wallet address before synchronization? I sent some XMR soon after downloading the gui client (unknowingly) before completion of the daemon synchronization... Will my XMR appear eventually or are they lost?

It is a common misconception to those new to cryptocurrencies that the coins are "stored" in a wallet.  In fact, the coins are stored on the blockchain.  They are always there, waiting to be accessed and spent.  Your wallet, at its core, is simply a key holder.  Your wallet holds the key(s) that allow you to spend your coins.

The answer is no, your coins are not lost forever.  Your wallet's public address was used to generate a transaction that consists (among other things) of an output that only your wallet knows belongs to it (because of your wallet's private viewkey), and only your wallet can spend (because of your wallet's private spendkey). (Nearly all cryptocurrencies only have one private key.  Monero is an exception to this.)

Your wallet needs to sync with a fully synced node.  The GUI can be used to connect to and sync with a remote node.  Many people do this (at the potential expense of some privacy).  Usually (but not always), the node you connect to will be in sync with the blockchain; and when your wallet syncs with it, the coins sent to it will appear.  The GUI can also basically act as its own node, in which case it will download the blockchain and verify that it is legitimate.  Once the blockchain sync is complete, your wallet will sync, and you'll see your coins.

In some instances, the blockchain will be fully synced, and the wallet will fully sync, but the coins don't show up.  This is rare, but it happens.  Generally, having the wallet rescan the blockchain will remedy that.  But also, make sure you didn't accidentally set up a new wallet with a new seed, because then your address will be different, and the wallet keys will be different, so your new wallet won't be able to find the transaction output destined for the old wallet.


How fast is the blockchain growing? how fast is the the blockchain growing in MB/day or GB/month etc and what is the current blockchain size?


How is code reliability improved? It seems that blockchain code written in C++ is prone to obscure but serious bugs such as recently seen in Zcoin.

I know that rewriting Monero in a safer language is not practical in the short-term, and there are various tests run during the build process to check functionality which are helpful.

Given that people will be relying on Monero for cryptographic privacy as well as financial security, and formal verification is some way off; what tools for improving code reliability - such as static code analysis or undefined behavior sanitisation - are (or should be) incorporated into the development process in addition to normal development practices such as unit tests and code reviews?

It seems that blockchain code written in C++ is prone to obscure but serious bugs

Well, anything coded in anything can be "prone to obscure but serious bugs", it's not the language used that's at fault.

  what tools for improving code reliability - such as static code analysis or undefined behavior sanitisation - are (or should be) incorporated into the development process

Actually, a number of tools are already being used. Valgrind, ASAN and Coverity for example. These are just some tools, this is aside from the, arguably more important, many developers that review and test others contributions also. Code is not just rushed into releases.

In addition to this, for major newer cryptography, such as the recent Bulletproofs code, the community funded two independent audits before the code was included in a release.


Verifying GUI Seed is Correct I setup a GUI wallet, wrote down the 25 word mnemonic seed. I loaded the block chain, which took a couple days and did a test of 2 monero.
I restored a wallet from  the 25 word mnemonic seed to verify that I wrote it down correctly. If I did write the 25 word seed down correctly, then it would accept my seed and create a new wallet file and create a new password, correct? So then I would be able to either open the new wallet file (restore the original wallet with a new password) or choose the original I set up and login with that original password?
Would that verify that my seed is written down correctly? If I'm able to restore? Restore = Correct?

Thanks

That's correct. Also, it's more simple to check resulting wallet address (not the integrated one, but the first one on the top under "Receive" tab) and you don't have to rescan the 2nd one (unless you want to access your "account" from that instance, too). If the wallet address is matching for both seeds then it's correct!


maximum number of transactions in memory pool Is there a maximum number of transactions that can sit in the Monero memory pool at the same time?

If there is, what happens to transactions that would cause the memory pool to exceed that level of capacity?

It really depends on the amount of RAM/swap you have.

There is no code to stop accepting transactions at any point at the moment, and if you eat up all you can in a spam attack, your kernel will kill bitmonerod. If that happens, you get to restart it, with more swap. If your node was the one the transaction was sent by the wallet, that transasction is nowhere else. If you were sent that transasction by another node, that node still has it, and it presumably got relayed to other nodes as well.

A transaction should not take much more RAM than its binary representation, but it's a bit hard to give an exact figure, since we're talking about std::map overhead, etc. So if you can afford half a gigabyte for the txpool, then, at an average tx size of 4 kB, you get...125k txes ?


Why does proposed transaction fee fluctuate heavily sometimes? I have enabled the always-confirm-transfers feature for my wallet, just to see the proposed transaction fee before I confirm the transaction. I have noticed that it sometimes fluctuates quite heavily from one minute to another. Real example:

[wallet 4*****]: transfer 2 <address> 100
The transaction fee is 0.040000000000, of which 0.010000000000 is dust from change.
Is this okay?  (Y/Yes/N/No)n
Error: transaction cancelled.
[wallet 4*****]: transfer 3 <address> 100
The transaction fee is 0.020000000000.
Is this okay?  (Y/Yes/N/No)y

Here, I changed the <mixin_count> from 2 to 3, and I was proposed a lower transaction fee. Sometimes I see a proposed transaction fee of 0.075 XMR, and then a bit later, I can do the transaction for 0.02 XMR or so. What influences this proposed fee? I suspect it has to do something with the memory pool …

FYI: This occurs with version 0.10.0.0, but noticed the same with 0.9.4.0 before.

Update: Additional example, with just 5 minutes in between:

[wallet 4*****]: transfer 3 <address> 100
The transaction fee is 0.045000000000, of which 0.015000000000 is dust from change.
Is this okay?  (Y/Yes/N/No)n
Error: transaction cancelled.
[wallet 4*****]: transfer 3 <address> 100
The transaction fee is 0.010000000000.
Is this okay?  (Y/Yes/N/No)y
Money successfully sent, transaction <transaction-id>
[wallet 4*****]:

It all depend how much outputs are needed to build-up you transactions.

A higher mixin transactions can result in a smaller size transactions because it so happened that it needed less outputs to build it.

Even if the amount are very close simplewallet might have needed a complete different set of outputs. Sometimes resulting in widely different transactions size to the point (I guess) it has negated the benefit of a smaller mixin.


Where can I find charts of Monero's price to dollar? I'm unable to find them using Google, can anyone help?

Try Poloniex website here, which gives usd/xmr chart:

https://poloniex.com/exchange#usdt_xmr


What cryptography does Monero utilize? Just looking for a brief explanation of what cryptography is used and where/how it is used in Monero. Thanks :)

This Wiki article on CryptoNote explains it better than anyone could do in the confines of a Stackexchange reply.

The Proof-of-Work algorithm is called CryptoNight and has several distinct differences/improvements over the earlier SHA256 algorithm used by Bitcoin and clones.

edit: This looks more like an actual specification


How to setup autostart of monerod in Ubuntu 16.04? I've setup the systemd service:

$ cat /etc/systemd/system/monerod.service
[Unit]
Description=Starts Monero Node

[Install]
WantedBy=multi-user.target

[Service]
Type=simple
After=networking.service
ExecStart=/usr/local/bin/monero-v0.10.3.1/monerod --config-file /etc/bitmonero.conf

But it fails to start with:

Jul 10 18:19:09 uminer systemd[1]: monerod.service: Main process exited, code=exited, status=1/FAILURE
Jul 10 18:19:09 uminer systemd[1]: monerod.service: Unit entered failed state.
Jul 10 18:19:09 uminer systemd[1]: monerod.service: Failed with result 'exit-code'.

UPD: I also tried '--non-interactive' option, but it didn't help.

In the dev's conf there was mentioned that the 'GuessMainPID=no' of the service file is necessary. The sample service file is here.


Where can I spend Monero? Is there an available list or directory of Merchants that accept Monero?

Is it true that Monero can be spent at any business that accepts Bitcoin? If so how does the process work and which service providers facilitate the XMR/BTC exchange?

There is a growing list of merchants that accept Monero below, although the list may not be comprehensive:
https://getmonero.org/getting-started/merchants

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) but slightly higher maximum transaction sizes.

Payment processors such as BitPay and and wallets (such as Exodus) are starting to integrate Shapeshift. Riccardo Spagni has a payment processor in development named PayBee.


monero-wallet-cli mining After running monerod I started mining with the command start_mining (my wallet adress) 1.
After a while I ran the command mining_status.
The result was this:
mining_status
Mining at 101 H/s with 1 threads
PoW algorithm: RandomX
Mining address: 44AQ4...sFrn
Expected: 0.000045739943 monero daily, 0.001395068269 monero monthly, 0.016283419795 yearly

My question is this, how will I be able to see how many Monero I've already made and when will I receive it in my wallet?

Mining directly in the wallet or daemon you don't earn anything until you actually mine a block. With your exceptionally low hashrate (101 H/s), that would be sometime in the next ~75 years.


Detecting the real output in ring signature I have a strange question about the relation of P_i (stealth addresses in ring signature) with x (the one-time private key).

Suppose Alice wants to spend P_1 with her spend private key (x) and we know that P_1 = x*G (G is the base point of elliptic curve).

She chooses randomly P_2 and P_3 to create a ring signature. She computes I (Key image) as I=x*H (P_1) that H(.) is the hash function. She places I in the input.
Adversary calculates the H(P_1), H(P_2) and H(P_3) then she inverse them and multiples them by I:

I * (H(P_1)^-1) = x_1

I * (H(P_2)^-1) = x_junk1

I * (H(P_3)^-1) = x_junk2

Now the adversary achieves the private key x_1 but he doesn't know which one is true so he computes stealth addresses like this:

x_1 * G = P_1

x_junk2 * G = P_junk1

x_junk1 * G = P_junk2

So he can determine the p_1 was the real output that was spent.

I know this is a impossible way but I don't know why. What makes it impossible?
Thank you :)

The reason we use elliptic curve multiplication is that it is a trapdoor function. This means you can multiply by a point, but you can't divide by a point. Trapdoor functions are an essential component in any asymmetric encryption scheme (i.e. anything involving public and private keys). If we didn't need a trapdoor function, there would be no point in using elliptic curves at all.

You can't look at a public key A = aG and determine the private key a by calculating a = A*G^-1 (otherwise written as a = A/G). Similarly, you can't divide the curve point I by the curve point H(P_i).

You can't ever divide one elliptic curve point by another. This is called the Elliptic Curve Discrete Logarithm Problem, and it is one of the fundamental building blocks of Monero's encryption scheme.


Why does mining generate new coins on a fresh testnet? So far I thought that mining is the process, when the network verifies transactions. When a transaction is verified, it gets added to the blockhain. In other words, a new block has been found. Then the miner, who found the block, will be rewarded with some Moneros, in the expenses of the sender.

After checking a few blocks it seems to me that the network "prints" and gives away free Moneros for each participating miners, who do nothing but wasting CPU cycles or consuming electricity.

Could someone explain it, what are the miners doing when there is nothing to verify? And what is the benefit of giving them Moneros for that time?

the miner, who found the block, will be rewarded with some Moneros, in the expenses of the sender.

That also happens, and it is called a transaction fee. Transaction fees are small: 0.002 XMR (per output, or Kb, I am not sure).

On the other hand, what you are observing is the block reward of about 10 XMR per block found which seems wasteful at first glance, but that is what is known as proof of work, and it is what allows decentralization to happen. The point being: the network wants to maintain the integrity of the record of transactions known as blockchain, but if people can edit it at will that is not possible. So the solution, which was Satoshi's real stroke of genius was to create this block reward which works as a lottery in which your chances of winning are proportional to the resources you have invested (hardware plus electricity). The end effect is that it is hard for any agent to get the privilege of editing the blockchain, while at the same time aligning their interests with that of the network, since they only get the reward if they edit the blockchain according to the rules, and also the very coins they get in return derive their value from the integrity of the blockchain, which therefore they should work to protect. It is circular, I know, but it works for bootstrapping currencies.

It is worth noting that those moneros that the miner gets therefore are not "free" since they have to win the lottery, but yes, that is the cost we pay to secure the network. It might seem wasteful, until one notices that physical security of a bank, for example, also cost a lot: building the vault, paying the guards, setting up alarm systems, securing their own networks and databases etc. So when talking about costs it is important to ask: "compared to what?"


Does monero v12.2 work on a raspberry pi zero wireless? Can monero v12.2 work on raspberry pi zero wireless and download the entire 50gb+ blockchain?

I got 12.0 to work, but not running monerod, just the wallet.  Did test monerod, and it started syncing, but didn't want to wait 3 weeks, and didn't have the space.

Now I do have an Orange Pi Zero running monerod (12.0) pretty much fine  (it occasionally just quits)  But the OPi is an ARM7.

When I get a chance, I'll give 12.2 a go.


Monero Hash, how does it work, C++ basisc I am trying to understand xmr-stak miner program. I have understood most of it but having hard time visualizing some pointer manipulation in below code. Its been over 10 years for me to go through any CPP program, any help is apprenticed.

So the question is, what is being assigned to following some of the pointer variables like piHashVal, or piNonce. I have commented my assumptions on each line, but not sure if that is correct. Any explanation with example is very much helpful.

void minethd::work_main()
{
    uint64_t* piHashVal;
    uint32_t* piNonce;

//assign pointer of bResult + 24 bits
piHashVal = (uint64_t*)(result.bResult + 24);

//assign pointer of bWorkBlob + 39 bit - piNonce is at 39th bit of blob provided by pool.
piNonce = (uint32_t*)(oWork.bWorkBlob + 39);

        //value at piNonce is increamented by 1 or address of piNonce is increamented by 1?
        *piNonce = ++result.iNonce;

        //value at piHashVal is compared with target
        if (*piHashVal < oWork.iTarget) {
            executor::inst()->push_event(ex_event(result, oWork.iPoolId));
        }

}

piHashVal = (uint64_t*)(result.bResult + 24);
result.bResult is a pointer to some data structure, it's storing the memory address at which the structure begins. We're not interested in the beginning of that data blob, but want to access some 64-bits starting at  offset 24. The above expression increments the address by offset 24 and casts the result to pointer to uint64_t. This means that the expression *piHashVal will return value of those 64-bits, interpreted as unsigned int. Note about the offset, how much bytes it offsets will depend on the type of pointer result.bResult. See also: Pointer Arithmetic for Structs

piNonce = (uint32_t*)(oWork.bWorkBlob + 39);
This does similar, only we're taking the 32-bits starting at offset 39 from beginning of oWork.bWorkBlob data structure.
*piNonce = ++result.iNonce;
Increment the result.iNonce by 1, and assign the resulting value to *piNonce which is the data stored at memory address piNonce. Note that both variables result.iNonce and *piNonce are changed here. By doing this, we surgically changed some 32-bits in the oWork.BworkBlob data structure since the piNonce points to a part of it and we accessed that part directly with *piNonce.
if (*piHashVal < oWork.iTarget) {
    executor::inst()->push_event(ex_event(result, oWork.iPoolId));
}

So here we compare those 64-bits from the start with the target. We're accessing the value *piHashVal stored at memory location piHashVal.
Appendix - Pointer Example
#include <stdio.h>
#define ARLEN 2

int main(void)
{
    unsigned long a[ARLEN];
    unsigned long *b;
    unsigned char *c;

    for(int i=0; i<ARLEN; ++i)
        a[i] = 100 + i*100;

    b = &a[0];
    /* Note that b = a is equivalent to the above expression, because when a is
     * declared as an array it becomes a pointer but the memory block for the array
     * is allocated at declaration as well. The [] is also known as offset operator.
     * and can be applied to any pointer.
     * After the above assignment, a[i] and b[i] will be equivalent.
    **/

    c = (char*) b;

    printf("Accessing using offset operator:\n");
    for(int i=0; i<ARLEN; ++i)
        printf("a[%d] = %lu = 0x%02X;\n",i,a[i],a[i]);

    printf("Accessing using dereference operator:\n");
    for(int i=0; i<ARLEN; ++i)
        printf("*(b+%d) = %lu = 0x%02X\n",i,*(b+i),*(b+i));

    printf("Reading individual bytes of the array using char pointer:\n");
    for(int i=0; i < (ARLEN*sizeof(long)/sizeof(char)); ++i)
        printf("*(c+%d) = %hhu = 0x%02X;\n",i,*(c+i),*(c+i));

    printf("Setting odd bytes to 0xFF:\n");
    for(int i=0; i < (ARLEN*sizeof(long)/sizeof(char)); ++i)
    {
        if (i%2==1)
            *(c+i)=0xFF;
        printf("*(c+%d) = %hhu = 0x%02X;\n",i,*(c+i),*(c+i));
    }

    printf("Printing the modified long array:\n");
    for(int i=0; i < ARLEN; ++i)
    {
        printf("a[%d] = %lu = 0x%02X;\n",i,a[i],a[i]);
    }
    return 0;
}

Program output (compiled on x86-64 system):
Accessing using offset operator:
a[0] = 100 = 0x64;
a[1] = 200 = 0xC8;
Accessing using dereference operator:
*(b+0) = 100 = 0x64
*(b+1) = 200 = 0xC8
Reading individual bytes of the array using char pointer:
*(c+0) = 100 = 0x64;
*(c+1) = 0 = 0x00;
*(c+2) = 0 = 0x00;
*(c+3) = 0 = 0x00;
*(c+4) = 0 = 0x00;
*(c+5) = 0 = 0x00;
*(c+6) = 0 = 0x00;
*(c+7) = 0 = 0x00;
*(c+8) = 200 = 0xC8;
*(c+9) = 0 = 0x00;
*(c+10) = 0 = 0x00;
*(c+11) = 0 = 0x00;
*(c+12) = 0 = 0x00;
*(c+13) = 0 = 0x00;
*(c+14) = 0 = 0x00;
*(c+15) = 0 = 0x00;
Setting odd bytes to 0xFF:
*(c+0) = 100 = 0x64;
*(c+1) = 255 = 0xFF;
*(c+2) = 0 = 0x00;
*(c+3) = 255 = 0xFF;
*(c+4) = 0 = 0x00;
*(c+5) = 255 = 0xFF;
*(c+6) = 0 = 0x00;
*(c+7) = 255 = 0xFF;
*(c+8) = 200 = 0xC8;
*(c+9) = 255 = 0xFF;
*(c+10) = 0 = 0x00;
*(c+11) = 255 = 0xFF;
*(c+12) = 0 = 0x00;
*(c+13) = 255 = 0xFF;
*(c+14) = 0 = 0x00;
*(c+15) = 255 = 0xFF;
Printing the modified long array:
a[0] = 18374966859414962020 = 0xFF00FF64;
a[1] = 18374966859414962120 = 0xFF00FFC8;


Why Monero block time found reported by pool is always different from explorer timestamp? For example on pool for block  1168994 Time Found is 30.10.2016, 21:57:05
but on block explorer it is shown as Timestamp (UTC)  2016-10-30 19:53:38
and on every block i tried it is different

OK,  I add image for clarity:

Explorer shows timestamp from previous block if you look at the pool for time it was mined

You did not mention which pool or block explorer you are using but the answer is likely related to two things:

Time zone reported by the pool or explorer explains the 19:xx vs 21:xx two hour difference in your example.
Each pool and Block explorer uses a different node. Depending on which peers a node is connected to and network latency there can be a small difference between when blocks are reported.


Can I send monero, even if it doesn't appear in my wallet? I exchanged some BTC through ShapeShift, but my monero-wallet-gui never got the Monero. I followed the instructions here, and it didn't work. I did verify that I got the transaction confirmed and it should be there. The wallet just doesn't say so. Right now, I've switched to local node (from a remote one) and I'm waiting for it to sync in hopes that it will resolve the situation.

I was wondering if I could just go ahead and send the monero somehow. Afterall, the blockchain still regards it as being in the possession of my wallet.

No.

You're right that the blockchain does know that the funds exist. The blockchain doesn't know the amounts of the funds though (due to Monero's confidential transaction encrypted payment amounts), or that you own them (due to Monero's stealth addresses). If your wallet isn't aware of the funds, it will not know how to reference those funds or create the necessary cryptographic signatures in order to spend them.


Can't transfer Monero coins, strange error message (Error: not enough outputs for specified ring size = 5:) I am using latest (v0.11.1.0) monerod.exe and monero-wallet-cli.exe to manage my wallet.

I'd like to transfer all my Monero coins in a wallet to a new wallet, but I receive a strange error message, so far couldn't find any solution for the issue.

Any ideas?

[wallet 4AL7WA]: sweep_all 5 4AL7WAeEmuSVYxScsZPpDKdpmGUC228nG529vhCAcGHNGwA8eMh6M6dSPsZzifftURDRCkYv96fkRYh9tx1ViiVpHAZddkG
Wallet password: **********
No payment id is included with this transaction. Is this okay?  (Y/Yes/N/No): Y
Error: not enough outputs for specified ring size = 5:
output amount = 0.000000289108, found outputs to use = 1
output amount = 0.000000078465, found outputs to use = 1

This error message:

Error: not enough outputs for specified ring size = 5:

Is saying there aren't enough outputs of the matching denomination on the blockchain to make a ring signature of size 5, which means your ouput and 4 others. You have at least one output of a denomination that's rare.

To spend these, use the sweep_unmixable command. This will gather those outputs without enough "siblings" on the chain and spend them at ring size 1. Once that's done, you can sweep_all again at ring size 5.

This is mostly a legacy thing, since the currently used ringct encrypts amounts so you don't need matching denominations anymore, but for older, pre-ringct outputs, this can still happen, as it does here.


Will we eventually get rid of "locked" and "unlocked" balances? My biggest eyesore of Monero which would definitely prevent mass adoption (and adoption by big stores) is that I can only send a single transaction every 20 minutes. Once a transaction is sent, the sending and receiving wallet need to wait for 10 blocks (roughly 20 minutes) before they can spend the funds. This is due to security reasons. It is especially bothersome for the sending party, as it locks her complete account for that time and prevents her from spending anything.

What if I payed for groceries with Monero but forgot to buy apples? Do I need to wait for ~20 minutes?

Do subaddresses somehow fix this issue? What is the recommended strategy except having multiple wallets to spend from? Will this issue ever be fixed / even is a known issue which is being worked on?

Update: Proposal is on reddit https://www.reddit.com/r/Monero/comments/7qepqi/proposal_add_way_to_automatically_split_utxos/

The amount which remains unlocked after a transaction depends on the number of unspent outputs (UTXO) you have in the wallet.

Consider those scenarios:

A: One UTXO

You have filled the wallet with one transaction of 10 XMR. That means your wallet has only one UTXO containing entire balance.
You spend 1 XMR.
The transaction you create has one input of 10 XMR and two outputs of:

1 XMR you pay, which goes to recipient's address
9 XMR (minus fee) change output that goes back to your address

Again, you have 1 UTXO in the wallet. However, before the transaction has received 10 confirmations, its' outputs remain locked.
Therefore, the unlocked balance of your wallet remains 0 for next ~20 minutes.

B: Multiple UTXO

You have received 100 transactions of 0.1 XMR each. Your wallet has now 100 UTXOs.
You spend 1 XMR.
The transaction has 11 inputs and two outputs:

10 × 0.1 XMR → 1 XMR you pay, which goes to the recipient
1 × 0.1 XMR → fee + change output

As a result, your wallet remains with 89 old and 1 new UTXOs.
The unlocked balance is now 8.9 XMR, while locked balance = 9 XMR -
fee

Fees: The transaction from variant B incurs much higher fee because of 11× bigger input set, which makes the resulting transaction significantly bigger.

TL;DR: Funding the wallet with more smaller payments makes it harder to lock-out all funds but results in higher fees.


How can i retrieve XMR sent to my Monero wallet without a payment ID? I withdrew XMR to my Monero wallet, but I didn't use a payment ID as it said it was optional, and I used the receiving address of my wallet which I figured was enough.

Now I can see the funds are withdrawn, and verified with the hash details etc, but can't find any funds in my Monero wallet. When I try to "receive" the funds or search a transaction, it requires I input a payment ID which I don't have....

I'm not sure whether there's still some way to receive the XMR? Any help would be much appreciated.

You do it the same way you do with a payment ID, since payment ID has no relevance to receiving monero to your wallet.

If you don't see the incoming monero, then your wallet or daemon are probably not fully synced yet. Run "status" in monerod, and make sure it has synced to 100%. Then make sure the wallet has connected to the daemon and finished scanning.

In any case, make sure you use the latest version of the Monero software. If you're using a version prior to 0.11.0.0, it will not be able to fully sync. 0.11.1.0 is the recommended version, as it fixes a couple sync bugs with 0.11.0.0.

You'll have to be clearer as to what requires a payment ID in your second to last paragraph, but I suspect there is no requirement, just an option.


Synchronizing painfully slowly monerod on my hybrid server is synchronizing painfully slowly, on the order of only about 20 blocks per minute. Port 18080 is open and I have 11+2 connections (varies). Do I just need to wait or is something else going on? At this rate I'm looking at ~90 hours to go from 86% to 100%. server is INTEL XEON E3-1240V3 - 8GB 200GB HDD with over 75GB disk space free.

To add to the answer provided by fluffyponyza. Hard drive IO is a major bottleneck with synchronizing the blockchain. As an example synchronizing on my desktop took approximately 50 hours on a traditional 7200 rpm disk drive. My laptop was able to fully synchronize the blockchain from scratch in 2-3 hours on its SSD.


Can you only allow certain miners on a cryptonote blockchain? I am creating my own Cryptonote coin for a specific, business need.  Can I only allow certain IPs to mine on it?

A typical blockchain does not include this kind of access control. This includes Cryptonote. However, you can easily add something similar.

Now, daemons could be made to sync only from the set of IPs you specify. If all the allowed IPs are set to only connect to other IPs in the set (for example  using --add-exclusive-node), and set to disallow connections from other IPs, then you will achieve this, absent an attacker.

However, this is fairly brittle, as a single peer managing to connect to one of these allowed IPs will open the floodgates to a new blockchain. Moreover, you might want external IPs to have a "read only" view of the blockchain, so you might well want yourself to have your allowed IPs connect to external IPs for blockchain distribution.

A better way is to allow not by IP, but by public key cryptography. The high level steps are:

create a key pair
give all allowed miners the secret key, which they should keep secret
give any node asks the public key (ie, include it in the source code)
when mining, add a signature of something (say, nonce plus block height) in the coinbase tx's extra field
add a consensus rule that checks this signature is valid

Then mining is limited to those who have the secret key.


Can't find the .bitmonero directory to set up the blockchain.raw file in Ubuntu 17.10? I changed from windows to Ubuntu 17.10 Linux. I'm totally new on it. I've been learning how to work with the terminal, and I have already downloaded my old windows blockchain.raw file located in the my download files. When I try to open the monerod.exe, nothing happens. I open up the GUI and it starts from scratch. I opened

  monero-blockchain-import

And the monero-blockchain-import.log says the following:

  lmdb/db_lmdb.cpp:2674  WARNING: batch transaction mode already enabled, but asked to enable batch mode
  2017-12-03 23:13:33.979     7f1e57c56f00    FATAL   bcutil  src/blockchain_utilities/blockchain_import.cpp:229  bootstrap file not found: "/home/lh1008/.bitmonero/export/blockchain.raw"

I went to my "home directory" and can't find anywhere the .bitmonero export directory. Through the terminal I ran the command to prompt monero-blockchain-import to the download directory where I have the blockchain.raw file but the terminal gave me an answer that "monero-blockchain-import doesn't exist". Have tried several times, read the manual for help but I can't find my error. I can run from scratch the node but I also want to learn how to do it properly. I will really appreciate any help.

Can anyone help?

Thanks :)

You can put this file anywhere, you just need to add --input-file XX and put the file and its path instead of XX, eg:

monero-blockchain-import --input-file $HOME/blockchain.raw

As for  "monero-blockchain-import doesn't exist" errors, this is unrelated, and just means monero-blockchain-import is not in your PATH environment variable. Either add its directory to your PATH, or give the whole path to it (either relative or absolute), eg:

./monero-blockchain-import --input-file $HOME/blockchain.raw

if it's in the current directory, or maybe:

build/release/bin/monero-blockchain-import --input-file $HOME/blockchain.raw

if you've just built it.


Monero wallet doesn't connect to local daemon I have a Monero daemon running on a Raspberry Pi connected to my LAN and it worked fine for sometimes, but lately, I'm unable to connect wallet from another PC to it.

When the issue has happened for the first time, I followed the suggestion to recreate the blockchain (maybe it was corrupted) and everything worked again. The problems happened yet and copying again a new healthy blockchain didn't solve the issue this time.

I use this command on server:

./monerod --rpc-bind-ip=192.168.xx.xx --rpc-bind-port=4008 --confirm-external-bind

And this one on client:

./monero-wallet-cli --daemon-address 192.168.xx.xx:4008 --wallet-file mywallet

The daemon works fine and syncs all the blockchain. If I use status command, I get:

Height: 1487860/1487860 (100%) on mainnet, not mining, net hash 669.86 MH/s, v6, up to date, 8(out)+0(in) connections, uptime 0d 1h 19m 48s

The wallet starts with this message ´Error: refresh failed: no connection to daemon. Please make sure daemon is running.. Blocks received: 0´ and ever shows this prompt:

[wallet 4xxxxx (no daemon)]:

What can I do to solve this issue?

I have removed the folder lmdb from .bitmonero directory, then I started again the daemon and synced the blockchain. All works fine now and the wallet (monero-wallet-cli) can easily connect to the daemon through the LAN.


How can I check if my node allows incoming connections? So I finally setup my own Monero full node, and forwarded the port 18080 to my internal host.

How can I check in the monerod log output that the node allows incoming connections?

How long does it take to be listed in the Monero nodes list? https://monerohash.com/nodes-distribution.html

You can type the command status in monerod. This will show something like the following, in green:

  Height: 1226605/1226605 (100.0%) on mainnet, not mining, net hash
  51.39 MH/s, v4, up to date, 8+6 connections

The first number in the 8+6 connections part refers to the number of outgoing connections. The second number refers to the number of incoming connections.

If you see a positive number after the plus (+) sign, then your node is allowing incoming connections. In the example above, 6 incoming users are connected to my node. If it showed 8+0 instead, I would have no incoming connections on my node and it is probably not set up properly to allow incoming connections.


I'm trying to create a Python miner, can I get some guidance please? I have been wondering how to make a Python Monero miner. I know about py-cryptonight, but does anyone know anything about how to actually code with it? I understand that cn_slow_hash is for mining, but when I try to create a hash, I get a bunch of random characters. I know that Python miners are slow, but this is just an experiment. I know how to code in Python fairly well, but not great. Can someone please guide me along? Thanks!

The general steps are as follows:

Call your Monero daemon's RPC method get_block_template.
Take the blockhashing_blob from the response and convert the hex to binary.
Set a 4 byte nonce in bytes 39..42
Hash the data with cn_slow_hash, you'll get 32 bytes back, that's your hash. Note, this result hash is binary - it's a 32 byte number. If you want to display it, you need to convert it to a hex string.
Compare the result hash against the next block difficulty (again, converted to binary). The calculation to see if your hash meets the difficulty is as follows:

b / h (where b is the base difficulty, 2^256-1, and h is your result hash)
If the result is greater than or equal to the next block difficulty (as returned from get_block_template at step 1), you've mined a block and can submit it to the network using the RPC call submit_block.
If it's not, repeat from step 3 with a new nonce.

Doing this all in Python is pretty straightforward because Python supports big numbers, but, it will be terribly slow.

I've omitted specifically how to call cn_slow_hash as the README already shows how trivial it is to call.


XMR-stack optimization. beginner troubles I am currently using the latest version of XMR-stak that self-sets-up, but I am only seeing a hash-rate of around 100 H/s.

Here are my system specs:

laptop: Lenovo Y50 touch

processor: Intel Core i7-4720HQ CPU

RAM: 8GB

graphics: Intel HD graphics 4600

And here is my mining configuration:

"cpu_threads_conf" :

[

{ "low_power_mode" : false, "no_prefetch" : true, "affine_to_cpu" : 0 },

{ "low_power_mode" : false, "no_prefetch" : true, "affine_to_cpu" : 2 },

{ "low_power_mode" : false, "no_prefetch" : true, "affine_to_cpu" : 4 },

],

I am basically wondering if there is anything I can do to get above 100 H/s or is that the best a laptop can get without booting Linux.

Thanks in advance!

EDIT: formatting

Thats about right per: http://monerobenchmarks.info/searchCPU.php

CPU MODEL              HASHRATE         APP         PARAM       OS          TDP         Date
INTEL CORE I7 4720HQ    110 H/s      MINERGATE 7.2  N/A     WINDOWS 10 x64  43 W    Jan, 2018.


Graphic card and general questions Am new in this mining job but i will try to ask some constructive questions :-). Am planning to mine Monero / ZEC and maybe ETH.
To do so, am planning to install some graphic card that i can afford and at first this would be something in Radeon RX560 Gigabyte 4gb range.
I will use one graphic card setup.

1.) Can i use this card for mining xmr / zec, and how much hashes would i get with this or similar GPU ?

2.) What low power consumption graphic card would you suggest to get 5000 or more hashes ?

3.)Am looking at this calculator
https://www.cryptocompare.com/mining/calculator/xmr?HashingPower=5000&HashingUnit=H%2Fs&PowerConsumption=200&CostPerkWh=0.12

I am not quite sure how all this works but if i understand currency, one can mine some amount of currency (daily,monthly,yearly) and if in this time, XMR or ZEC get some peak value ( fast jump ), this is recorded as extra income.

Shortly, if the XMR value is let's say $400 and in few days this value jumps to $600, miner gets nice income, but at the same time, complexity gets higher and miner needs 20% higher hash power(stronger GPU), to keep his earnings level. Is this correct ? Or better, is this the situation with XMR / ZEC currency ?

4.) what wallet and what sw would you suggest ?. Am running desktop pc with linux ubuntu...

Best regards and thank you all for future answers !

Hello and welcome to mining. Since this is monero-based Q & A i will try to guide you abut monero mining.

1) Indeed, You can use that Rx 560 for mining xmr and zec. I can tell you that you will get around 300-400H in xmr, and not sure about zec, would be like something between 80-130 sols.

2) There is not a card capable of doing 5000H in xmr. Instead, you can get about 15 Rx 560s to achieve that hasharate. That is, building minining rigs (2 rigs of 8 GPUs each for example).

You can get your Rx 560 into mining, but dont expect high rewards. Instead, use that card to learn how to mine properly. Once you manage to max out the perfomance of that card, you can add more later. Take it as a hobbie at the beginning, if you end up liking it so much, get serious and build a rig. You got the basics somehow covered, that is, mining rewards depend of variables like difficulty, luck, latency to the pool you are mining, and so on.

4) You can check out the Monero reddit, at the right sidebar you will find some wallet options. As for mining software, there is xmr-stak, claymore cryptonote (most popular).

Feel free to navigate the stackexchange to get more info about Monero.

P.S. If you want to mine zec, you should consider getting Nvidia cards, the big Rx brothers (x70-x80) or even a R9 390 which is a very nice card (but really expensive and power hungry). I hope this helps a bit. Kind regards...


What is the difference between Monero (XMR) and Ryo (RYO)? I would like to have a comparison between the privacy features of Monero vs Ryo. I have heard some people say that these are privacy-oriented coins, and I would like to learn more.

History

Ryo is a fork of Sumokoin (SUMO), which itself is a fork of Monero (XMR).

Sumokoin (SUMO) launched with the following statement:

  Sumokoin is forked from the source code of Monero cryptocurreny, one of the most innovative digital coins which is well-known for security, privacy, untraceability and active development, therefore, naturally inheriting all of those great features, yet without the burden of its past.

Sumokoin (SUMO) launched following the initial release of the "An Empirical Analysis of Traceability in the Monero Blockchain" paper released on 13 April 2017. While this paper introduced a number of Monero privacy limitations, the majority of them were limited to pre-RingCT outputs, ones that Monero had not used in meaningful numbers since January 2017. Future transactions were subject to the "guess-newest" heuristic for some time after, but Sumokoin (SUMO) did not change the selection algorithm. Thus, the claim that the fork removes the "burden of [Monero's] past" is dubious, since there was no practical benefit to Sumokoin (SUMO) transactions at the time of launch.

According to the Ryo roadmap, the following occurred in June 2018:

  Sumokoin hardforked to ASIC friendly POW and Ryo continued on with the original chain.

Ryo forked following accusations that the Sumokoin (SUMO) team had printed additional funds for the founders than was publicly claimed. The Ryo team that resulted felt that the Sumokoin (SUMO) team was not knowledgeable enough to maintain a Monero fork.

Code Changes

Ryo began on a largely Monero codebase and merged a number of upstream features, including multisig, fluffy (compact) blocks, and bulletproofs.

Monero and Ryo use their own custom Proof of Work (PoW) algorithms.

Payment IDs

Monero has slowly been deprecating payment IDs, working on removing both forms completely and eventual subaddress adoption. Monero currently supports legacy payment IDs and short payment IDs. Ryo removed support for legacy payment IDs. Ryo and Monero automatically include a short payment ID in all transactions. Ryo developers argue that removing long payment IDs is good for privacy, which is true. However, it is incorrect to say that Ryo transactions are necessarily less identifiable as a result, since Ryo has fewer transactions.

I haven't found a good resource that reports the number of Ryo transactions per day, but I estimate there are less than 500. Monero typically has >4000, so there is a greater total number of other transactions that match various spend behaviors. Of course, users should reduce their exposure by avoiding payment IDs whenever possible.

Note that Monero and RYO now offer equal payment ID protections.

Ringsize

Monero uses ringsize 11. Ryo uses ringsize 25. Ryo proponents argue that larger ringsizes are better, which is strictly true. I have included a graph below indicating the proportion of rings that would be compromised (y-axis) if attackers had knowledge over a certain proportion of outputs (x-axis). Both cryptocurrencies provide essentially the same protection until 65% compromised. The larger ringsize protects similarly until about 82% compromised. This buffer of protection is useful.

However, it is simpler to have visibility over the same proportion of outputs for a smaller cryptocurrency than a larger one. Suppose I create 500 transactions in perpetuity on both Monero and Ryo, and I have no access to any other information. I would have visibility over about 500/(500+500) = 50% of Ryo outputs, while I would have visibility of only 500/(4000+500) = 11% of Monero outputs.

Put another way, let's compare the number of perpetual transactions I would need to have visibility over to compromise 1 ring per day. With Monero, I would need to create approximately 3100 transactions. With Ryo, I would need approximately 575. Ryo would need ringsize ~42 to provide the same protection as Monero against someone creating 3100 transactions.

Larger ringsizes may be better for privacy if you compare a small vs. large ringsize for a single network. However, large networks naturally have better protection from the other transactions and their entropy. Small cryptocurrencies need larger ringsizes to provide the same privacy level according to this one metric. There are many other metrics of assessing relative privacy levels, but this is one for a basic form of attack.

Relative Pool Information

The number of pool-related transactions do not scale proportionally to network size. Small networks have a higher proportion of pool-related transactions than large ones. While transactions paid to miners may partially scale, blocks mined don't scale the same way.

Public mining pools often provide a lot of public information that observers can use to have visibility over outputs. At the time of writing, https://ryo.miner.rocks controls ~60% of the hashrate, and they publish lists of blocks mined and transactions paid. Observers can use this information to construct a list of outputs that can only be spent by the pool, not by other network participants. Many Monero pools also publish this information, but the total impact of this information is lower for Monero since the mining pools are a smaller proportion of network activity.

Fees

Monero uses 3 main preset fee values. Ryo uses 1 main fee value. Single fees are better for privacy, but there are some usability tradeoffs when network congestion is high.

Transaction Structure

Ryo imposes some stricter transaction restrictions on the consensus layer in some cases, which prevents malicious or oblivious wallets from sending some types of revealing transactions.

Summary

Monero and Ryo are very similar, since they share most of the same code. Only a few parameters are changed between them. However, any changes to the code are relatively minor if the network is significantly smaller. Ryo has some strict improvements, but they need to weighed against Monero's larger network size. Comparing certain parameters in a vacuum without considering the wider network situation leads to false conclusions.


Am I understanding PPLNS correctly in this example? I want to be sure I understand how the PPLNS pool payment system works.  As I understand it, the theory is to reward loyal miners as opposed to people who continually switch pools.  So I've been mining in this pool -- https://mixpools.org/xmr/# .  Its advertised PPLNS shares are 100,000.  Does that mean if a block is found and I will get a pay out if

1. I contributed one or more shares in the last 100,000 since the pool found that block.
  2. I satisfy the minimum payment threshold (that they list as 0.2 XMR).

But I'm failing to understand the core theory behind this.  If I contribute a share now, and then jump offline for a while, I'll still get paid if the pool finds a block in the next 99,999 shares contributed?  That's great for me, but it feels like I got lucky as opposed to being rewarded for a lot of pool loyalty.  Maybe I'm misunderstanding something.

You are paid proportionally to the number of shares which are yours in the last N (in this case 100000).

If only 1/100000 of those are yours, you'll only get 1/100000 of the block reward.


Hiding transaction values using pederson commitments and range proofs in accounts model Conceptually how does one hide transaction values using pederson commitments and range proofs in ethereum(accounts model)?

The key issue is how can we make it happen in an accounts model and not in an UTXO model. Monero has an UTXO model.

I have understood the following partially so far- https://cryptoservices.github.io/cryptography/2017/07/21/Sigs.html

The author explains pederson commitments, range proofs, schnorr signatures, ring signatures, Borromean signatures.

I'll describe conceptually how they work in Monero, since this is the Monero stackexchange. I'd assume they would work similarly when implemented elsewhere.

Output amounts are encrypted by the sender using the transaction shared secret, and bundled with the transaction. The transaction shared secret is the result of a Diffie Hellman exchange between the sender and the recipient. The recipient decrypts the amount in order to figure out the value of the funds that have been sent.

It is also necessary to provide a Pedersen commitment for each output amount, so that the network can verify that no funds have been created out of thin air. The Pedersen commitment does not reveal the amount of the output and does not allow for values to be compared to one another, but does provide a mathematical mechanism to allow it to be proven that a set of Pedersen commitments sum to zero. This allows the network to verify that no Monero is being created out of thin air. The same mechanism described in the paragraph above for encrypting and sending the output amounts is used to additionally encrypt and bundle the Pederson commitment blinding factors to the recipient. Knowledge of these blinding factors is necessary for the recipient to construct a transaction in the future that can spend the outputs that are received in a past transaction.

Ring signatures prove that in at least one combination of the sum of possible inputs and outputs, one of those combinations does sum to zero. Since the sum of Pedersen commitments is a public key, and since the proof of a Pedersen commitment summing to zero is effectively a signature that demonstrates knowledge of the Pedersen commitment's private key, Pedersen commitments are easy to combine with ring signatures (since ring signatures prove knowledge of one private key for a given set of public keys).


How do I set transaction priority with the JSON RPC wallet? I'm trying to find how to set the payment priority when making a transfer using the JSON RPC wallet, but can't find the parameter in the documentation, probably because it hasn't been updated since the last hardfork.

Can I simply use these parameters (https://getmonero.org/knowledge-base/developer-guides/wallet-rpc#transfer) and add a "priority" parameter with a value between 1 and 4 (0 being the default anyway)?

I have read here (https://www.reddit.com/r/Monero/comments/65oqao/fees_barely_went_down_why/) that a default priority can be set in the CLI wallet, but I'm not sure this applies to the RPC wallet.

Thanks!

The transfer_split RPC indeed has a priority field, which may be set to 0-4, as you suspected. 0 stands for default (which is 2 currently, but will use the default you set via simplewallet if any), and 1-4 for their respective priorities (unimportant, normal, medium, highest).

The documentation does indeed need updating, this is one of these neverending tasks that often get behind.


Are payment id's publicly viewable on the block explorers? I'm looking for a way to expose some type of data publicly without providing my private view key to the public. Is there a way to expose payment id's in block explorers? Or is there some other way of exposing this?

There are two types of payment ID. The first is the older style 32 byte unencrypted payment ID. This will appear on the blockchain for anyone to see.

The second type is the newer style 8 byte encrypted payment ID. That gets encrypted with the transaction shared secret before hitting the blockchain, so that would not be suitable.

Monero has a tx_extra field that can be of any length, so you could even create specially formed transactions that could put much more than 32 bytes unencrypted onto the blockchain. The structure of the tx_extra field is described here: https://cryptonote.org/cns/cns005.txt

Here is an example transaction on the blockchain:
https://xmrchain.net/tx/91be5c4bf7afa2a80bdb82db4eacefa8a212aefed41cca75f06e83f16ebef742

The tx_extra field is:

0221005d5ef173175a81d7e82ee3627fb7ef578f2f5803c552c93967d3caa36a920934019aeca56f3e9e0b6b849993ec27cf2eae0bb157e85ee2e4249afb03683eccc879

The first byte 02 means the first field is of type "tx_extra_nonce", which means either an encrypted or unencrypted payment id will follow. The second byte is a varint 21 which means that the field we're about to read is 33 bytes long (21 in hex is 33 in decimal).

Therefore the "tx_extra_nonce" field is the following 33 bytes:

005d5ef173175a81d7e82ee3627fb7ef578f2f5803c552c93967d3caa36a920934

The first byte of the field is 00 which means the rest of the field is a 32 byte unencrypted payment id:

5d5ef173175a81d7e82ee3627fb7ef578f2f5803c552c93967d3caa36a920934

If the first byte of the tx_extra_nonce field was 01, then an 8 byte encrypted payment id would have followed.

For completeness, note that the next field in the tx_extra is marked as type 01. This means that the 32 byte transaction public key follows.

The transaction public key is:

9aeca56f3e9e0b6b849993ec27cf2eae0bb157e85ee2e4249afb03683eccc879


Ubuntu 16.04 : Monero wallet stopped working Wanted to load monero wallet but it has stopped working.
monero-gui-0.11.0.0

Getting these messages in console:

app startd
qml: check next false
qml: Checking seed
qml: check next false
qml: check next false
qml: log level changed:  0
qml: transfer page loaded
qml: PrivacyLevel changed:0
qml: mixin count: 4
qml: qrScannerEnabled disabled
qml: setting demo token
qml: initializing..
setLanguage   "en"
qml: transfer page loaded
qml: PrivacyLevel changed:0
qml: mixin count: 4
qml: opening wallet at:  path/monero.dat , testnet:  false
Wallet* WalletManager::openWallet(const QString&, const QString&, bool): opening wallet at path/monero.dat, testnet = 0
Checking for updates
Failed to create OpenGL context for format QSurfaceFormat(version 2.0, options QFlags(), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples -1, swapBehavior 2, swapInterval 1, profile  0)
Aborted (core dumped)

After restarting my laptop this issue has gone away.
I suppose it was a driver that didn't boot up correctly or something.

I'm glad it works again
I'll download and use the new wallet when my blockchain has synced


Will there be a January hard-fork for RingCT? If there is a earlier hard-fork.

Will only the RingCT code be included in the version or every improvement until then?
Will this skip the March hard-fork or will the March fork use version 5?

From the Monero website:

  Note that the v4 hard fork has been moved to the beginning of January, 2017, although the v5 hard fork remains set at September, 2017. This is to enable early availability of RingCT transactions on the Monero network, although they will not be enforced as the only possible transaction type until the v5 hard fork.

The hard fork in January 2017 will contain all the improvements for Monero up to that point, but the largest one by far will be RingCT.
There will be no March hard fork. The v5 hard fork will still be in September 2017.


Does the Monero executable for Windows not have a code signing certificate? I was getting really nervous about using the Monero wallet. It seemed like the download page was ww.getmonero.org/downloads, which I thought was weird. Additionally, the executable for Windows wasn't signed at all.

It this correct? If it is, it should change.

Monero is one of the most steal-able cryptos.

The website URL is correct. Once you've downloaded, you can check against the supplied hash and verify the signature of the hashes list. Details on the releases page of the project (where you can also download from).

Instructions on how to verify your download can be found here.


Xmr Stak CPU Miner Socket Error Testing out the new XMR Stak Miner, currently using Wolf's CPU miners. I'm on Ubuntu 16.04, and the build works as in the README, setup the config for my address, and fixed the memory alloc issue here (Failure when using XMR Stak CPU Miner on Linux).

The output I'm getting is:

[2017-04-17 20:22:56] : Connecting to pool pool.minexmr.com:7777 ...
[2017-04-17 20:22:56] : Connected. Logging in...
[2017-04-17 20:22:56] : SOCKET ERROR - invalid address used for login
[2017-04-17 20:22:56] : SOCKET ERROR - RECEIVE error: socket closed
[2017-04-17 20:22:56] : Pool connection lost. Waiting 10 s before retry (attempt 2).

It seems the connection to the pool isn't getting created. Is this my end or the pool's?

There's no issues on the repo or subreddits about the socket error

Did you try a different Address or checked your Address if it is correct? I tested it using an invalid address and I got almost the same error. However, valid address works!

[2017-04-18 00:38:10] : MEMORY ALLOC FAILED: VirtualAlloc failed.
[2017-04-18 00:38:10] : Starting single thread, affinity: 0.
[2017-04-18 00:38:10] : Starting single thread, affinity: 1.
[2017-04-18 00:38:10] : MEMORY ALLOC FAILED: VirtualAlloc failed.
[2017-04-18 00:38:10] : Connecting to pool pool.minexmr.com:7777 ...
[2017-04-18 00:38:14] : Connected. Logging in...
[2017-04-18 00:38:14] : SOCKET ERROR - invalid address used for login