Generating key derivation in construct_miner_tx Good day!

I am trying to understand the construct_miner_tx function inside cryptonote_tx_utils.cpp and I am stuck on comparing what is being discussed in the zero to monero reference pdf regarding multiple outputs. Where it generally states (based on what I understand), tx pubkeys are generated in derive_public_keys in crypto.cpp, where one of its parameters is the key derivation. So based on the code, key derivation is called in construct_miner_tx in:

bool r = crypto::generate_key_derivation(miner_address.m_view_public_key, txkey.sec, derivation);

In the paper it states that the PvK and tx sk are multiplied by a cofactor of 8 to ensure that the output point is within G subgroup.

So key derivation is 8*(PvK txsk), right?

Then derive_public_key is H(8*(PvK txsk) || output_i)G + PsK?

PsK = Public spend key
txsk = transaction secret key
PvK = Public view key

Do all my assumptions make sense? And is the output of generate_key_derivation a plain public key? And is the shared secret key the output of hash_to_scalar?

Thank you very much for the clarification.

Let's start by first defining a couple of things. Outputs created in a coinbase transaction can later be spent by using them as inputs to a subsequent transaction. A transaction also has a public key, which is used as the public part of a secret (it's shared, it's in the tx which is on the blockchain).

When constructing a coinbase (miner) transaction, the generated coins are placed as outputs of the transaction. These outputs are only spendable by the miner - they are constructed in such a way that only the miner can spend them (you would need the miners private spend key).

So, in construct_miner_tx:

crypto::generate_key_derivation(miner_address.m_view_public_key, txkey.sec, derivation);

Where miner_address.m_view_public_key is A (the miners public view key) and txkey.sec is r (the tx private key), the output of the function generate_key_derivation (which is placed in derivation), is 8rA.

  So key derivation is 8*(PvK txsk), right?

Correct.

Then:

crypto::derive_public_key(derivation, no, miner_address.m_spend_public_key, out_eph_public_key);

This is placing H(8rA||i)G + B in out_eph_public_key. This is an output key that becomes spendable by the miner. There can be more than one output key (hence this is in a loop and is indexed by i in H(8rA||i)G + B).

  Then derive_public_key is H(8*(PvK txsk) || output_i)G + PsK?

Thus, correct.

  Do all my assumptions make sense? And is the output of generate_key_derivation a plain public key?

Not quite. generate_key_derivation is creating 8rA (a point), which is then used by derive_public_key to create an output key (or in Monero parlance, a stealth address).

  And is the shared secret key the output of hash_to_scalar?

No. hash_to_scalar just takes a hash and converts it to a scalar. The public part of the shared secret is the tx public key, created earlier in construct_miner_tx:

keypair txkey = keypair::generate(hw::get_device("default"));

This is creating r and R (in txkey). The shared part is R which is included in the tx as the tx public key (stuffed into the tx field tx_extra, add_tx_pub_key_to_extra). Only someone with r or a can derive the shared secret aR or rA (as used in the calculations above). The recipient uses aR in their side of the calculations when scanning transactions, to know the transaction is destined for them. r is not stored in the transaction, it is used for the sender-side of the shared secret (rA above).

Hope this helps!


Can someone show me how to hash with CryptoNight in Python? I need a Python(2 or 3) Monero miner that outputs hashes to terminal.

Please ask me if you need clarification.

I'm assuming this is a follow-up question to your previous question.

Here is an example that shows how to hash a block hashing blob with a supplied nonce:

import binascii
import pycryptonight
import struct

bhb = binascii.unhexlify("070786a498d705f8dc58791266179087907a2ff4cd883615216749b97d2f12173171c725a6f84a00000000fc751ea4a94c2f840751eaa36138eee66dda15ef554e7d6594395827994e31da10")
nonce = 1234
bin = struct.pack('39B', *bytearray(bhb[:39]))
bin += struct.pack('I', nonce)
bin += struct.pack('{}B'.format(len(bhb)-43), *bytearray(bhb[43:]))
hash = pycryptonight.cn_slow_hash(bin, 2)
print(binascii.hexlify(hash))

Where bhb is the binary of a blockhashing_blob as returned from a call to get_block_template, and nonce is your nonce for this particular hash.

To create a miner, follow the steps in my answer to your other question.


how to get 'generator point' for Monero transaction I am using get_transactions of daemon rpc to get specifics of a transaction.

Trying to check incoming transactions manually by checking this method :

is_mine(out, R, i):
    P = Hs(8aR||i)G + B
    return P == out

Credits to jtgrassie

How do I get G from get_transactions?


Finding mixins with daemon RPC call What is the best way to get the random mixins from the daemon to be used to sign a transaction?
There was a daemon RPC call "get_random_rctouts.bin" but not anymore. What should I use instead?

You use the get_outs.bin RPC. You give it the indices of the outputs you want.

If you don't know which outputs you want, then you can't ask the daemon anymore. This RPC had three problems: (1) the daemon had control over the outputs (an obvious attack vector), (2) the wallet could ask particular setups which would cause the daemon to spend a LOT of time carrying these out (a DoS attack vector), (3) the algorithm the daemon implemented was old and picked outputs with less quality than the wallet already did. Thus, the call was removed.

Note that this is only needed if you go really low level. In normal usage, you'd use the wallet's transfer_split RPC which handles all this transparently.


If I saved my view key and spend key can I recover my wallet if my mnemonic seed is lost? I accidentally deleted by my wallet file and mnemonic seed. Can I recover my wallet with my view key and spend key? If yes, then how do I do so?

Yes, it is possible to restore your account with just the view and spend keys.

monero-wallet-cli has the --generate-from-keys <name> option, which will create a wallet with the given name, and prompt the user for: address, spendkey and viewkey.

Example:

$ monero-wallet-cli --generate-from-keys myWallet
Monero 'Helium Hydra' (v0.11.1.0-release)
Logging to monero-wallet-cli.log
Standard address: 45FofLeGb1oAR7fDhrNsmvHHxjaY3at6YLxHq7S9YvQ54sMSn6BxtHe9tKYKfQm1YgE4WUyhLcMPiCJ17LQAtnjAQA3Nmh4
Secret spend key: 4941baf224dc238d7329a8c9ef672b3340ccb26eaf460f6c4cc8afa97a735a0c
Secret view key: 8fc685263e28604ebca23e2877e0847d034dc380db3ba800238a481b8719ea09
Enter new wallet password:
Confirm Password:
Generated new wallet: 45FofLeGb1oAR7fDhrNsmvHHxjaY3at6YLxHq7S9YvQ54sMSn6BxtHe9tKYKfQm1YgE4WUyhLcMPiCJ17LQAtnjAQA3Nmh4
Restore from specific blockchain height (optional, default 0),
or alternatively from specific date (YYYY-MM-DD): 2017-11-25
Restore height is: 1450154
Is this okay?  (Y/Yes/N/No): Y
Starting refresh...
Refresh done, blocks received: 1419
Balance: 0.000000000000, unlocked balance: 0.000000000000
Background refresh thread started
[wallet 45FofL]:

If you don't remember your standard address, then there's a sligtly more complicated way, the --generate-from-json option. You then have to create a small JSON file with that information, called, data.json, for instance:

{
  "version": 1,
  "filename": "restoredwallet.bin",
  "password": "some string",
  "viewkey": "abcdabcd...",
  "spendkey": "1234124..."
}

Then:

./monero-wallet-cli --generate-from-json data.json

Once your wallet is recreated, you can view its reconstructed seed with the command:

seed

(only if viewkey is deterministic, non-deterministic wallets don't have seeds)


What is the difference between a "cold storage" wallet and a "hot" wallet? What is the difference between a "cold storage" wallet and a "hot" wallet?

Is it possible to sign a transaction to be sent from cold storage without converting it into a hot wallet?

Cold storages are wallets created offline and maintained offline until you want to make a definitive move with the coins, they are kept safe from hacks or unauthorized access from the Internet since they should never reside on a computer that is or will be connected to the Internet (perfect method for storing coins).

Hot wallets are easily accessible with the Internet like mymonero.com since the seeds are created online you can't ever be 100% sure they can't be compromised.


How is the quadratic miners penalty calculated For blocks above the median block size of the last 100 blocks but below the 2x the median block size dynamic cap a quadratically increasing penalties is applied to miners.

How is this penalty calculated?

Can miners avoid the penalty by refusing to mine any transactions that would exceed the threshold where the penalty exceeds the transaction fees earned for including those transactions?

When a block is built a block larger than the median size of the last 100, then a quadratic penalty is imposed on the miner such that:

penalty = base subsidy * ((block size / median size of last 100 blocks) - 1)²
subsidy = base subsidy - penalty

Miners can avoid this fee altogether by refusing to include transactions in blocks that would lead to exceeding the median block size, although this is likely not the optimal practice as including such transactions will often still be profitable.
Miners can create their own criteria for including transactions in blocks by balancing transaction fees collected against the quadratic miners penalty that will be applied.
For example for all blocks exceeding the median blocksize they could enforce minimum transaction fees with a formula that scales fee requirements to compensate for the quadratic penalty.


What is the limiting factor for synchronization speed? I'm syncing a node right now from scratch. It seems to be going slower than I expected. CPU/Memory/IO/Network all do not seem fully utilized. What is the limiting factor here?

My assumption is it might be it's doing a lot of random IO which is a lot slower than sequential IO.

Possible causes explained to me in #monero:matrix.org:

Verification tends to be limiting factor.
Using an HDD is known to be significantly slower than SSD/NVMe.
Apparently HDD seek time is a significant bottleneck.
Verification operations are not very parallelizable therefore if a single CPU core is spiked to 100%, that could be limiting factor, even if others are idle.  Monero code doesn't seem to properly utilize multiple CPU cores.
A single slow peer might be able to slow things down overall.
Wallet syncing at the same time as blockchain syncing -> very slow.

Notes:

I was just syncing the most recent few thousand blocks.
I was using an HDD rather than SSD/NVMe, so my bottleneck may not apply to you.

[1] Per selsta: "yes, because bottleneck is verification not network speed"
[2] Per selsta: "yes, HDD will always be extremely slow during verification."
[3] Per moneromooo: "It's seek time that matters, not contiguous r/w speed."
[4] Per Inge-: "disk queue length is indicative (while transfers/sec will be very low for random reads on a HDD) and if any single cpu core is pinned at 100% (overall CPU utilization could be very low as there is a limit to how parallelizable the workload is))" and "the number of cores that can be utilized are limited. I would expect parallel verification of transactions is possible, while parallel validation of blocks is more difficult"
Q: Wouldn't users complain about multiple cores not being used?
A: hyc: "you probably would never have noticed. I have 8 cores and pretty much never see more than 4 cores used
there's definitely something artificially limiting throughput
I just don't know how to pinpoint what it is"
[5] Per moneromooo: "If none is used, it's possibly waiting on data from a peer. If that peer's busy, it might wait a bit before sending."
[6] Per moneromooo.


Will CPU mining cause high power consumption? I have an AMD FX 6300 and i'm using VirtualBox to assign two cores and mine. I get around 100h/s, however, will this cause a much higher energy consumption and a higher electricity bill?

Thanks.

It will cause more electricity usage. How much electricity depends on several factors such as the number of threads used, which you noted. The only way to know for sure is to measure the electricity usage at the wall with a device like a "Kill A Watt" meter. Measure the watts being used while the computer is on but not mining. Then measure the amount of watts used while mining on one thread, then with two threads, up to the total number of threads your CPU supports. The difference of those measurements will tell you how much electricity the computer uses while mining on the different number of threads.

From those measurements you can determine which mining arrangement gets you the most hashes per watt. You will want to take measurements incrementally with each thread because, depending on the system, 2 threads may be more efficient than 3 threads. Or, 6 threads may be more efficient than 8 threads, and so on.

Also keep in mind that mining will create heat and this could increase your need for air conditioning, and that will add to your costs. One CPU won't make much of a difference...maybe 1 to 3 degrees F in a bedroom, but your results may be different.


At what point will Monero forego forced hardforks One of bitcoin's greatest strengths is it's resistance to change that is not truly endorsed by the majority. At what point will Monero mimic bitcoin's censorship resistance in the form of truly releasing control to the ecosystem? I anticipate the answer may be complicated.

samwellj posted the answer 'hardforks are good for updating the network'.
The Monero dev's are taking a different stance on hardforks than bitcoin does, but it's a weighted decision where hardforks are announced 6 months beforehand and miners activate hardforks by sagnalling for it.

If I understand correctly, a certain percentage of miners signalling for the hardfork is what activates it. An argument in moneros favor for miner-signalled hard-forks are it's  (potentially) more decentralized mining.  If bitcoin tried that we'd be forked already


start-mining with monerod doesn't seem to turn on mining When i start monerod with

  monerod --start-mining [MY_WALLET_ADDRESS] --mining-threads 1 --bg-mining-enable --bg-mining-ignore-battery --detach

I get :

global  src/daemon/main.cpp:279 Monero 'Helium Hydra' (v0.11.1.0-release)
Forking to background...

Suggesting that the daemon and mining have started. However when I do:

  monerod --status

I see:

Height: 1455991/1461539 (99.6%) on mainnet, not mining, net hash 283.02 MH/s, v6, up to date, 8(out)+0(in) connections, uptime 0d 0h 2m 34s

This suggests it is not mining . What am I missing?

I don't think you can start mining until fully synced.

Start monerod without the --start_mining, and just start it once it syncs.

show_hr / hide_gr in monerod will show / hide your mining hashrate.


What does Shares/Diff number represent on pools found blocks When the pool I am mining finds a block what does the "Shares/Diff" number represent?

This is a proxy for "did we get lucky or not".

The shares numerator is the total number of weighted shares sent by miners trying to find the block. When you mine, you're asked to solve an easier problem on that block template (and if you solve it with a large enough gap, you find the block). When you find one of those "subblocks", you submit it to the pool, which accumulates the difficulties of the submitted shares. When a block is eventually found, that accumulated number is roughly proportional to the number of hashes the pool's miners have expended trying to find the block. So the shares numerator is a proxy for the total work done by the pool's miners.

The Diff denominator is the block's difficulty, which is proportional to the estimated number of hashes needed to find the block.

So the fraction represents how easily this block was found. If less than 1, you were lucky (it took less shares to find the block than expected). If more than 1, you were not (it took more shares to find the block than expected).


Can the import\export key images command can be used to check the balance of a paperwallet? The import/export key images command can be used to check the balance of a view only wallet.

But is there a way to use it to check the balance of an already set up Paperwallet?

Is it possible to get a transaction key image from a Paperwallet without exposing the spendkey or seed?

Is it possible to get a transaction key image from a Paperwallet without exposing the spendkey or seed?

It depends on your definition of "expose". Key images can of course be computed offline, even by some self-contained hypothetical device, but you are still "exposing" your spend key to that device.

You could do the necessary math on paper if you want, but you still expose your spend key to the paper. I do not recommend this method. :)

Christopher King has proposed an idea where the key image would be generated by a view key-derived output, but it needs some more review (and also involves substantial protocol changes).

It is also possible to compute some number of key images when you first generate the seed (it's "exposed" at that moment anyway) by using pre-chosen txkeys. However, there is currently no UI that implements such a thing (MyMonero is the easiest method of doing it manually).


Installing XMR-stak CPU only on Ubuntu 18.04 Where can I find instructions for installing XMR-stak CPU on Ubuntu 18.04.  I notice every one are having issues with their graphic cards, however I just want to use my CPU. That being said I am still having issues installing and or loading the program on Ubuntu.

You can find instructions on xmr-stak repository itself.
You should basically download the ubuntu/debian release, extract the file, and launch the miner through cli.
It does auto configuration on the first launch IIRC.


How does Monero verify a tx outputs key image? I'm new to Monero and I'm trying to get to grips on transactions compared to BTC.
What I'm trying to understand is - what prevents a transaction using a completely random string for 'x' within I = xHp(P) when generating the TXO key image?
Is the key image generated with the spending TXOs private key, and that key is then passed into the ring signature function, which will sign the transaction assuming one of the public keys given, was used to generate the key image?
Any guidance in helping me understand the mechanism intuitively would be much appreciated.

Intuitively:
You are spending an output P, where P=xG. You spend an output by providing a signature proving you know the private key x corresponding to the public key P.
If you also declare the key image I=xHp(P) as part of the transaction, you are declaring a public key I with private key x.
You are correct that in isolation, transaction verifiers cannot know you have declared the correct key image.
However, when you provide your signature proving you know x for P, you extend the signature to simultaneously prove you know x for I, in a way such that mathematically, the combined proof would only verify if both values of x were the same.
Thus, you have proven that the key image was calculated using the same private key x that applied to the output one-time public key.
You can't use just any value of Hp(P), since the verifier calculates that themselves based on the P you are spending, and uses that calculated value to verify the signature.
For the math, see page 30 of Zero to Monero


When generating a random payment id, why doesn't the integrated address also change in the receive tab in the gui wallet? Doesn't the payment id get integrated into the monero address during generation? I click on generate and the integrated address stays the same. Also how can one generate a new monero address? Or do we just stick with just one? There isn't an option in the gui to generate a new address.

I'm trying to integrate this into my ecommerce site and I need to be able to generate a new address or payment id for each customer.

The address looks like its not changing because the first part of the address is the same for all integrated addresses. Its only the last part of the address shows the unique payment id add on.


What are some proposed solutions to preventing ASIC's from mining Monero? Monero forks every 6 months or so to prevent ASICs, but this doesn't fully deter ASICs from being built. Even with the new proposed RandomX pow algo, eventually ASICs will be built. What are some other proposed solutions to prevent ASICs?

Monero forks every 6 months or so to prevent ASICs

Monero does a fork, which we call a network upgrade, roughly every 6 months. The upgrade isn't specifically to "prevent ASICs", that has just been one of the many things that have gone into the last couple of upgrades. Features both big and small get released in these upgrades - including ASIC resistance changes.

  Even with the new proposed RandomX pow algo, eventually ASICs will be built.

This is not necessarily correct. An ASIC (Application Specific Integrated Circuit), is built for one specific task (hence the Application Specific part of the name). RandomX/CryptoNightR are designed to be efficient on general purpose hardware by creating random tasks. A CPU (and GPU) are general purpose chips. For an ASIC to be developed that works with RandomX/CryptoNightR, it would essentially have to be designed in the same way as a CPU/GPU - e.g. be general purpose.


blockchain.raw download for the testnet? I've started running monerod connected to the testnet but the sync is extremely slow. Is there a download for the testnet blockchain as per the regular blockchain (https://downloads.getmonero.org/blockchain.raw)?

No.

Spam for stupid length check not wanting short answers.


Low security sync mode? I'm wondering if anyone has thought about or implemented a low security sync mode?

Presumably the client would only need to grab the TX hash, P and R values, and number of outputs, to be able to fully scan the whole blockchain for outputs that belong to them.

It would be low security because you would need to trust the node a little, however, unlike full light wallets (MyMonero), the remote node can't see your coins or steal them, however, the node would be able to make you see a false view of the blockchain state.

However, this seems like a nice trade off, especially if run through a mixnet, then the node will have trouble feeding it's modified state to clients, since it will be hard for it to distinguish a target.

Let's first start with what's needed to compute which outputs are destined for you:

The tx public key (R)
Each one-time output destination destination key in the tx (P)
Your wallets private view key (a)

Therefore, a wallet either needs to offload (trust) sending their private view key to some other node which can perform the scan, or they have to have all the above locally. The remote node (in your example) cannot steal coins, as it doesn't have your private spend key, but it leaks privacy because the remote node can see how much money is sent to you (you have divulged your private view key). This latter point is the problem.


Cold Storage, to Hot, to cold? If I created a paper wallet, then installed the Monero GUI on a PC and imported the wallet from the mnemonic seed... Could I just delete the Monero GUI wallet and wouldn't it just go back to being cold?

So if I ever wanted it to go hot again I would just reinstall the wallet and import the wallet from the seed and sync the chain?

Could I just delete the Monero GUI wallet and wouldn't it just go back to being cold?

You could delete it and it would become kind of "cold", but if it was "hot" at any moment in time, then during that time you were exposed to the risk of leaking your wallet file / password / mnemonic to some adversary if your computer was compromised at the time you made it hot.

It's all about managing risk. The CLI/GUI wallets are pretty safe even when "hot", and I'm not aware of anyone getting his funds stolen so far. But it's really as safe as your computer so one always needs to be careful! As a minimum, keep your computer clean and up to date with security fixes, have some anti-virus, don't open suspicious links or software, and use a strong password for the wallet. After all, being your own bank also means you have to take responsibility for your security.

  So if I ever wanted it to go hot again I would just reinstall the wallet and import the wallet from the seed and sync the chain?

That's right. But bear in mind that anyone could do the same with your mnemonic and steal your funds, so keep it safe!

If you want a compromise, I'd suggest running some "live-CD" Linux to access your wallet, and keep the copy of the blockchain on some USB drive so you don't have to re-sync the blockchain from scratch every time.


Does the monero gui client use the GPU to sync with the blockchain? I can't tell whether it is trying to use my GPU as well or if it is only using the CPU. I've got it synching on a rig with 3 HD7950s on windows 7. Want to mine something while it's synching if it is not using the GPUs. The hashrate reported for 1.41 mh/s which makes me think it's using the GPUs since there's no way my CPU could ever do that. It's been over a day and my i7 with 9gb of RAM is still only 50% of the way through.

Currently (v0.10.3.1), the daemon (monerod) and the clients (monero-wallet-cli, monero-wallet-rpc and monero-wallet-gui) only use the CPU for their computations.

Only some programs dedicated to pool mining use GPUs.


Hard disk space usage using Helium Hydra on Windows, 64bit On my laptop I downloaded Helium Hydra for Windows 64 bit OS. After running the monero-wallet-gui.exe and waiting for the syncing to stop (about 15 hours) I suspect about 30GB of C:/ space was used. I wasn't keeping exact track of my hard drive space but I'm fairly sure running the exe and syncing took up a lot of space. If monero-wallet-gui.exe has taken up this disk space how do I reallocate it? I've exited the GUI and stopped the service. I've done the disk clean up and also run CCleaner. A disk analysis of what's taking up space didn't reveal anything remarkable.
(I'm planning to move my wallet off my laptop's hard drive and to an external drive.)

The Monero blockchain data is located (for Windows) at C:\ProgramData\bitmonero\lmdb

If you want to be able to view your wallet's balance, etc., you will need to move the entire blockchain onto an external drive, not just your wallet.  Definitely have a look at this question by debruyne for help on trying to move the blockchain data without losing sync progress. .


Potential mistake in trying to secretly transfer from one bitcoin wallet to another via monero - Theoretical Highly theoretical question:

If I exchanged a long mixed number (ie 5.37894316842) from a bitcoin wallet A to my monero wallet, and then a few minutes later exchanged that same bitcoin amount from the monero wallet to another Bitcoin wallet B, could someone analyzing recent bitcoin blocks not conclude that there is a high likelihood that the owner of bitcoin wallet A is the owner of bitcoin wallet B ?

Due to fees it would never be the exact same amount, but in theory it could arise suspicion. Also, nothing stopping you from splitting the amount into multiple transfers at exit.


Are sub addresses implemented yet? I can't figure out if we already have sub addresses working. If so, is there a guide on how to generate and use them? If not, is there an ETA?

Not implemented and integrated into master branch yet, see here:

https://github.com/monero-project/monero/pull/2056


Monero MalwareBytes Blocked IP Address I run Malwarebytes and I consistently get this error message when I run Monero Gui Wallet.

Malwarebytes
www.malwarebytes.com

-Log Details-
Protection Event Date: 2/18/17
Protection Event Time: 10:05 AM
Logfile:
Administrator: Yes

-Software Information-
Version: 3.0.6.1469
Components Version: 1.0.50
Update Package Version: 1.0.1295
License: Premium

-System Information-
OS: Windows 10
CPU: x64
File System: NTFS
User: System

-Blocked Website Details-
Malicious Website: 1
, , Blocked, [-1], [-1],0.0.0

-Website Data-
Domain:
IP Address: 94.102.53.209
Port: [18019]
Type: Outbound
File: C:\Users\MyName\Downloads\monero-wallet-gui\monerod.exe

Should I add this IP address as a trusted entry in Malwarebytes?

According to Abuse IP DB, this IP has been involved in hacking and spam attempts several times. This could be also a dynamic IP used by DSL subscribers. However, it should be save to whitelist all outgoing connections for monerod, since it only syncs with the monero network and shouldn't be able to download any executable code (unless there is a serious security flaw in monerod itself).


Could Monero help me to implement a safe election for a small group of students? The problem

I am in charge of implementing a secure, secret election for a small group of students on my school. I have a list linking valid student IDs to emails, and I want each one of them to vote in a candidate that will ultimately be elected. It is acceptable to use that email for authentication.

Naive solution

The obvious solution would be ask each student to mail me a public key, put a simple web-UI that used such key to cryptographically sign a vote (client-side), and then a HTTP server that received signed votes, incremented the candidate's vote counter, and erased the info. This is mostly secure, but there is still one problem: a malicious agent with access to the server could be able to see and log the vote of each particular student. Of course, I won't do that and the students trust me not to do it - but, since this is a CS course, I'd like to be able to use the opportunity to make a point and create a cryptographically safe ballot on which no party at all should be able to see the votes.

My solution

After some research, I've come to what I think is the perfect solution, which is Linkable Ring Signatures. It would work the same as the system above, with the small modification that we'd keep public map of StudentID -> PublicKey,  and each student would sign in name of each other student. The server is, then, able to verify that the vote came from an actual student, without being able to tell which. If a student votes twice, it is able to detect so using the "Linkable" aspect of those signatures.

Question

Unfortunately, I couldn't find any verified, open-source implementation of linkable ring signatures. I'm aware Monero uses a similar cryptographic scheme to grant anonymity to its users. I wonder, thus: is there any way Monero can help me implementing my system?

This is possible with a "daughter" project of Monero called URS (Unique Ring Signatures) and was introduced by core-team member tacotime. From the README of the repository:

URS can be used to sign plaintext or binaries anonymously (among a group of known users). That is a user can sign a message, hiding among a group of known/registered users, that prevents the verifier from revealing the signer's identity other than knowing that it is in the set of registered users. The size of the set of registered users is flexible. Increasing this number slows down signing and verifying linearly, and also increases the size of the signatures linearly.
Bitcoin public and private keys are used to generate the signatures. You may generate your own keypairs with the set-generate function described below. Bitcoin addresses are also generated.
When in default (unique) mode, signatures are generated with the prefix '1' and contain immutable Hx, Hy values as the first two bigints in the signature. These are immutable per message and private key. That is, any single message signed with the same private key and keyring will always generate the same Hx, Hy values, so for this single message you can identify if multiple members of the keyring have signed (but not which one).
Signature blinding has also been implemented. Blind signatures are prefixed with '2'. While blind signatures lose their Hx, Hy uniqueness, they use an ephemeral key to generate that signature that is afterwards discarded. This will prevents someone in the future from being able to identify which member of the ring signaturesigned the message, even if all private keys for the public keys in the keyring are later revealed.
For more information on signature blinding, refer to this link.

From the abstract of the paper:

Abstract. We propose unique ring signatures that simplify and capture
the spirit of linkable ring signatures. We use new techniques to provide
an instantiation which can be tightly related to the DDH problem in the
random oracle model, leading to the most efficient linkable/unique ring
signature.

With these sources you should be able solve your "problem".


As a miner how would I put data in the 'extra' field? How would I be able to put data in the extra field for say a nonce or whatever?

When using the getblocktemplate RPC, you can pass a reserve_size argument.
You will get a block template and a reserve_offset, and then starting at reserve_offset in the block template, you can put reserve_size bytes of whatever you want.


Can you see which addresses sent you money using your viewkey? Alternative title: Would Monero cryptography be a possible way to do secret voting?

While researching smart contracts and online voting, I came up with the following idea: Give everyone 1 Monero (or a smaller denomination) and make a Monero address for each possible votable option.

Would this be a viable option? In which I mean, can you see who voted for a specific proposal, given the viewkey of the votable options? Phrased differently: is it possible to see which address sent a transaction using the viewkey of the receiving Monero address?

I know Monero uses ring signatures to hide the actual UTXO used, in my understanding ringCT just makes multiple other UTXOs equally likely. When talking about online voting that would be broken pretty easily, knowing when the original 1 Monero was distributed to everyone.

Monero does not allow a receiver to determine the address of who sent the received money, whether using the receiver's secret view or spend keys. This information is private to the sender only. The sender may supply an offline proof that they are the one who sent the money, however, but that's an extra, optional step for them.

Voting is usually an anonymous affair anyway, so knowing who cast a vote for a particular outcome is typically not needed.


Transaction not showing in my wallet, it's been two days. Failed to connect to seed peers error I'm not the most tech savvy guy, but I can get around if instructed properly. I downloaded the GUI wallet and when I start the Daemon, it reflects as being connected. However, when I look in the log, there is a recurring error that says "failed to connect to seed peers, continuing without seeds".

It's been two days since I sent the transaction to my wallet, and it still isn't showing up. I even tried connecting to a remote node, which did seem to sync the blockchain, but my funds still aren't showing up. When I'm connected to the remote node, I still get the "failed to connect..." error.

I've confirmed that the address is correct. Can someone help me?

You need two things:

a synced daemon ("status" in monerod should show 100%; using a remote daemon should normally be fine)
a refreshed wallet (it'll scan the blockchain monerod downloaded/verified in order to check whether any changes in your account occured)

The seed connection error is only fatal on the first connection. If it manages to connect once to a seed, it'll learn of other peers on the Monero network, and then be able to connect to them. If this is your first connection, then a seed is needed to bootstrap. Check you have internet connectivity on the VM/machine running monerod, and check port 18080 is usable (sometimes firewalls block ports which aren't known to be needed default).


Syncing several wallets in the same ledger with local node. (start again switching) Let's say you have several wallets in the same ledger (Plausible deniability set up), syncing each wallet using the GUI with my own local node, blockchain in external SSD drive, it takes 3 hours aprox, the problem is that when finish, if you switch accounts, the process starts always again??

What I am doing wrong?

Your image shows the blockchain is fully synced and up-to-date but the wallet is scanning the blockchain to find any transactions destined for your wallet.

If your wallet is saved on the same external drive, and has been scanned, opening the same wallet on another machine will not try to scan from block 1, it will scan from the last scanned height.


What is a mining round? I was reading Claymore's GPU miner thread and saw this, "current developer fee is 2.5%, miner mines 39 rounds for you and 1 round for developer."

What is a mining round?

I believe this refers to hashes - it does 39 hashes for you and 1 hash for the developer, regardless of whether the hashes are valid or not. As Claymore is closed source, we can't easily verify this, but from what I have seen running the miner it seems like the most likely explanation.


What is Kovri and which other cryptocurrencies are implementing this feature? Currently Kovri seems to be made for monero, but has there been other announcements of others implementing it into their cryptocurrencies? If Kovri is java based, how would that work if a coin is built using another programming language?

Kovri is a C++ implementation of I2P which is Java based.
Kovri is no more than an I2P router. If another coin has wanted to use I2P they could have just bundled it into their node. To my knowledge, none actually has this level of security.
Kovri is open source, and could therefore be used or forked by anyone.

Read more on kovri website


Why am I unreachable? I'm certain the forwarded port of 18081, 18089, 18080 are forwarded to the machine and i've completely disabled windows firewall. Is this my ISP blocking this port?
C:\Users\monero-gui-v0.17.2.1>monerod.exe --public-node --restricted-rpc
2021-05-02 22:26:03.387 I Monero 'Oxygen Orion' (v0.17.2.0-release)
2021-05-02 22:26:03.389 W --public-node is enabled, but RPC server 127.0.0.1:18081 may be unreachable from outside, please check RPC server bind address
2021-05-02 22:26:03.390 I Initializing cryptonote protocol...
2021-05-02 22:26:03.391 I Cryptonote protocol initialized OK
2021-05-02 22:26:03.393 I Initializing core...
2021-05-02 22:26:03.395 I Loading blockchain from folder C:\ProgramData\bitmonero\lmdb ...
2021-05-02 22:26:03.560 I Loading checkpoints
2021-05-02 22:26:03.561 I Core initialized OK
2021-05-02 22:26:03.562 I Initializing p2p server...
2021-05-02 22:26:03.579 I p2p server initialized OK
2021-05-02 22:26:03.579 I Initializing core RPC server...
2021-05-02 22:26:03.580 I Binding on 127.0.0.1 (IPv4):18081
2021-05-02 22:26:05.781 I core RPC server initialized OK on port: 18081
2021-05-02 22:26:05.791 I Starting core RPC server...
2021-05-02 22:26:05.792 I core RPC server started ok
2021-05-02 22:26:05.793 I Public RPC port 18081 will be advertised to other peers over P2P
2021-05-02 22:26:05.794 I Starting p2p net loop...

If you read your logs:

W --public-node is enabled, but RPC server 127.0.0.1:18081 may be unreachable from outside, please check RPC server bind address

Then check the monerod --help output:
--rpc-bind-ip arg (=127.0.0.1)             Specify IP to bind RPC server
--rpc-restricted-bind-ip arg (=127.0.0.1)  Specify IP to bind restricted RPC server
--confirm-external-bind                    Confirm rpc-bind-ip value is NOT a loopback (local) IP

So to bind all interfaces (which includes external), use 0.0.0.0 instead of 127.0.0.1, and use --confirm-external-bind to state you know what you're doing.


Does the GUI work on Linux? I am running Debian and the latest stable version of libstdc++6 (provided by Debian) does not include the versions necessary to run the GUI.

  CXXABI_1.3.9 and GLIBCXX_3.4.21

I spoke to a friend who is running Ubuntu and has the same problem. Does the GUI work on Linux as Debian and its fork Ubuntu are the most widely used distros?

Is there a way to get this working as I doubt users are expected to copile gcc and g++ just to run the GUI.

I already have gcc-4.9 g++-4.9.

Linux beta binaries are built on Ubuntu 16.04. No sure which GCC version Fluffypony used but the downloadable bins on buildserver are built with GCC 5.4.0. Until next release we will try to complete a fully static linux build or at least bins targeted for other distros.


Multiple accounts in the same wallet In many questions here, I have found people talk of 'multiple accounts' or of a wallet with multiple accounts. I examined the Monero GUI Wallet, but I don't see an option for handling multiple accounts.

Are they talking about sub-addresses or is it possible to use more than one account with the same wallet application?

Thanks in advance for answers.

The multiple accounts feature is currently only available in monero-wallet-cli. The GUI does allow for a user to generate and subsequently use multiple subaddresses though (confined to the same account for now). Furthermore, the GUI contributors have stated intention of adding the multiple accounts feature. In fact, there's already a preliminary pull request open that would add support for this particular feature:

https://github.com/monero-project/monero-gui/pull/793

The pull request has to be optimized for the current user interface though before it will be merged / implemented. I personally think we'll see an implementation later this year.

As a side note, in case you are using monero-wallet-cli, you can create a new account by running the account new command. Subsequently, you can switch between accounts by utilizing the account switch <index #> command (note that the first account has an index of 0).


When attempting to install Windows 10 64 bit GUI: This application failed to start because it could not find or load the Qt platforms plugin "windows" This application failed to start because it could not find or load the Qt platforms plugin "windows" in "". Reinstalling the application may fix this problem.

And a runtime error
Program: C:\Users\Ric\desktop\monero-gui-x64-v0.10.3.1 -1\monero-wallet-gui.exe

This application has requested the Runtime to terminate it in an unusual way.

Any help?

there seems to be a space in the path where it is stored. move it to a place without spaces and try again


Error when starting monerod: Failed to open db handle for m_blocks : MDB_CORRUPTED : Located page was wrong type Every time I try to run monerod, I get the following error:

Failed to open db handle for m_blocks : MDB_CORRUPTED : Located page was wrong type

It briefly displays, and then shuts down the command prompt window.

What can I do to fix this?

Note: re-post of a question asked on reddit.

It is likely that this means blockchain database (LMDB) corruption.

The easiest way to fix it is to rename your corrupt lmdb folder to something else, for example:

Rename C:\ProgramData\bitmonero\lmdb to C:\ProgramData\bitmonero\lmdb-old and run monerod again.

It should start without errors and it will again create a fresh copy of C:\ProgramData\bitmonero\lmdb and sync from scratch. It will take some time to catch up with the network again, though.

Also, if you don't mind, please make a .zip archive of the C:\ProgramData\bitmonero\lmdb-old and upload somewhere for Monero dev. hyc, who is the creator of LMDB database, to examine (don't worry, your wallet data is not stored there, it's safe to share). This will help to understand why it had been corrupted and possibly prevent such occurances in the future.

At the end, when all is working, you can safely delete the C:\ProgramData\bitmonero\lmdb-old

Note: the example above is for Windows systems and default settings. On other systems, you'd need to locate your \lmdb folder and do practically the same, just at different folder location.


Why was `always-confirm-transfers = 1` not the default in version 0.10.0.0? Let's say you just sent a transaction in monero-wallet-cli and you decide to copy that line and paste it in the daemon for whatever reason. Maybe you are thinking about editing its value or payment ID or something else entirely. If you happen to copy the whole line in the terminal --that is, not stopping at the end of the command-- then as soon as you paste it, the daemon will execute the command (like it normally happens with regular terminal commands outside of the daemon) and a new transaction, with the same parameters, will be submitted to the network, and that will cause you a lot of trouble if not complete loss of those funds, depending on how able you would be to contact the recipient and get him/her to send you your money back...

Maybe I am not considering the whole picture, but IMHO always-confirm-transfers should be set to 1, and not zero by default. (But I am not an expert, so please let me know if I am missing something here!) In any case, to fix that just run the command set always-confirm-transfers 1 in monero-wallet-cli to avoid that kind of problem in the future. Notice, though, that that change is only applied to the particular wallet you were using, not other wallets you might own which would have to be fixed individually.

With that enabled, you will see this prompt next time you are trying to send out a transaction:

The transaction fee is 0.026000000000.
Is this okay?  (Y/Yes/N/No)

By the way, it would be nice to have another variable require-password to send out transactions, set to 1 by default too.

I can't tell you why it currently (version 0.10.0.0) is not enabled by default. However, about 10 days ago I filed an issue (#1058) for this on GitHub. Meanwhile, it seems there's a pull request in the works (#1185) to actually enable this by default in the future.


How to buy monero for cash? How to buy monero for cash ?
I meet with the seller, then give him cash and send him my wallet address using some messenger. Then he using a laptop or smartphone send xmr to my address. How much time it will take until I will see in my smartphone that I received monero ? What more I need to know ?

When the seller initiates the transaction, the transaction will be broadcast and relayed to all Monero nodes immediately. All well connected Monero nodes should see the transaction in just a few seconds.

Depending on your specific wallet software, you may see an immediate notification that payment has been initiated to your wallet. You will see the full details of the payment, including the amount.

If you were to accept the payment at this point, there is a risk the seller may attempt a double-spend. This means the seller could announce a competing transaction which spends the funds back to the seller's own account. If the amount is small and the seller has a reputation to uphold, this is unlikely. But it is possible. Your risk here is similar to accepting a $20 bill from someone without taking the time to verify that it is counterfeit. Someone in a dark alley is more likely to attempt to defraud you than a shop keeper whom you can easily confront later.

If you want to be safe, you'll want to wait until the transaction gets mined into the blockchain.

Monero blocks are mined every 2 minutes, on average. Therefore, you will have to first wait an average of 1 minute before any block currently being mined has finished being mined. Then, you'll have to wait on average 2 minutes before your transaction gets mined into the next block.

If the network is busy and the seller's transaction did not have a high enough transaction fee to make it into the next block, you will have to wait until the network gets less busy. Therefore it's a good idea to wait for the transaction to be mined into a block, so you can be sure the fee paid was high enough for this to happen.

At this point, for the seller to defraud you, they would have to run a set of competing miners that would outcompete all existing Monero miners. The objective would be to create an alternate blockchain that ignores the transaction you had originally seen as mined, and replaces it with a transaction that spends the funds back to the seller. This is very expensive, and gets more expensive with the number of blocks in a row that the seller is attempting to outcompete.

It makes no sense for the seller to spend the vast amount of money required to attempt this attack if the amount of cash the seller is accepting from you is small.

At the time of writing, www.crypto51.app reports that it would cost approx $17k per hour to attempt to outmine all existing Monero miners.

Therefore, if you were to wait around with the seller for an hour after the transaction was made, it would make no sense for the seller to defraud you if there was less than $17k at stake.

In summary, if the seller is reputable and honorable, you probably want to wait for the transaction to appear in the blockchain for the first time (a wait of approx. 3 minutes on average). If they're very honorable, just the instant confirmation will be enough for you, because you can approach them later if anything goes wrong and ask them to re-initiate the transaction.

If they're not trustworthy, then you should wait until the cost of a 51% attack is likely to exceed the amount the seller can defraud you for.


Are criticisms of Monero's blockchain bloat substantiated? One of the more seemingly legitimate criticisms of Monero is that the blockchain is susceptible to bloat due to its ring signatures.  Are these criticisms valid, or do other coins have similar problems?

To some extent, it is, but it is also a common canard that  FUDsters like to cling to.

Monero transactions are indeed larger than Bitcoin's, and RingCT transactions will be even larger. However, most of the data (signatures) can be dropped by a node after verification (there are drawbacks, though: this node can't serve a blockchain to another node later).

Besides, Ethereum's blockchain is now a lot larger than Monero's, despite being younger. The fact that there isn't such an outcry about the Ethereum blockchain size tells you a little about how real this "bloat problem" is.


Relationship between a pool and local wallet I created a wallet using monero-wallet-cli and started a mining session on a pool (https://bohemianpool.com) using cpuminer-multi (specifying my wallet's public address).

The questions is, how are mined coins going to get back into my wallet? (or what is the relationship between a pool and a local wallet?)

Basically, for every block the pool finds (when you are actively mining) it will credit you some XMR proportional to your share of the pool's hashrate. For example, if your hashrate is 1 KH/s and the pool's hashrate is 100 KH/s (so 1/100th), they will credit you 1% of the coinbase transaction (i.e. the block reward + fees). I am saying approximately because pools can use PPS (Pay-Per-Share), PPLNS (Pay-Per-Last-N-Shares), or something else, which can result in the hypothetical 1% being somewhat off. In addition, to clarify, this is done off-chain. Then, once you reach a certain treshold (at the time of writing it's typically 0.5 XMR), the pool will pay you out (on-chain). That is, they will send the 0.5 XMR to the wallet address that you specified in your config.

A bit more on PPS and PPLNS from here:

  However, note that interruptions affect how much you will win in the first place. There are 2 different pool policies PPS (pay per share) and PPLNS (pay per last N shares). With PPS, you will always win a piece of block reward proportional to your shares submitted to the pool / total shares submitted to the pool. With PPLNS it's a bit different, to discourage pool hopping.


Technical contributions of non-mining full nodes How does a full node without hashing power help the Monero network? What is the contribution made by non-mining full nodes?

A node helps miners know they are on the correct chain, it also helps users verify transactions, nodes also supply the blockchain to other nodes that are not yet up to date, it also acts as a broadcasting service for users when they want a transaction to be sent to all the miners.


How is the used Pedersen commitment kept secret? I understand one can have two commitments P and Q, and show the world that P - Q = 0 - communicating the commitment to only the recipient. In fact, it can be done with many input commitments P1 ... Pn. However, how do the other commitments remain hidden?

The user can take P1 ... Pn, when he really only knows the commitment key for P1, and then generate output Q1 ... Qn with sum(P) = sum(Q). However, doesn't that invalidate the random P2 ... Pn he was trying to mixin with? They still need to be able to spend their commitments using the private keys they know for the old Ps.

I just don't really understand how Pedersen Commitments integrate with mixins.

Bounty:

Under the original scheme, We have the following:

Take N input transactions that hold the same amount of Monero
Prove I have the private key for one of them using Ring Signatures
Provide a keyImage that's never been used before, and prove that it is equal to privateKey * Hash(PublicKey) for one of the N transactions. This is done without revealing which privateKey was used.
Provide M output transactions, signed to prove that you approve of them, such that the sum of the output amounts is equal to the common amount used in the input transactions.

The total state changes resulting from steps 1-4 is that One KeyImage is stored and cannot be used again, and M output transactions are stored for later usage.

(Of course, the proofs are stored too but are never used ever again except for new nodes downloading the blockchain. Thus, I do not include them in "state changes")

Now, my final question: How does this work with Pedersen Commitments? What exactly is the input->output relation for a transaction under RingCT, along with state changes? I want to be able to read it in a format equivalent to the step-by-step format I gave for pre-RingCT transactions. Bounty for whoever does this :)

I ask this because, if each Pedersen Commitment holds a different value, how could it ever be so that the Pedersen Commitment remains secret? Isn't it obvious which one I used? If I consumed several commitments, then what happens to them if I didn't own them? I just don't understand. I would like a more explicit explanation.

UPDATE

Everything written under "Bounty" can be ignored. Back to the original question, regarding mixins. I understand most of it now, due to "Can someone walk me through a simple example to explain how RingCT works?". However, this explanation does not discuss how the Pedersen Commitment proved is not used twice. I understand it's possible to introduce a second key image to prevent double usage of the pedersen commitment, but is this the most space-efficient method? What does Monero use? (Bounty is redesignated for the answerer of this question.)

Update 2

Using a key image on Pedersen wouldn't solve the problem, because I could use a pedersen from someone else's transaction since I know the pedersen key for any transactions I send out. I could then steal their pedersen commitment. However, the realization is simple. I left it in a comment to "Can someone walk me through a simple example to explain how RingCT works?"

A commitment is published publicly for every output created in a transaction, and thus every input in a transaction also has a known commitment.

Commitments are public. It's only the amount and blinding factor that are kept private between the creator of the output (sender) and the output's recipient.

The MLSAG ring signature proves that there is a set of inputs and outputs such that P - Q = zG where zG is the commitment to zero, and only someone that knows all the blinding factors can prove knowledge of z (and the signature proves that without disclosing the value of z publicly).


How secure is CryptoNight? Has any research been done on CryptoNight? How secure is it, in terms of having a flaw that would allow PoWs to be produced free or cheaply, independent of difficulty?

This annotated whitepaper acknowledges the importance of a thorough review:

Constructing a hash function is difficult; constructing a hash function satisfying these constraints seems to be more difficult. This paper seems to have no explanation of the actual hashing algorithm CryptoNight.
Nic van Saberhagen describes loosely some properties of a proof of work algorithm, without actually describing that algorithm. The CryptoNight algorithm itself will REQUIRE a deep analysis.

According to Monero Core Developer Smooth:

CryptoNight (and the code implementing it) was extensively reviewed, though not as part of a "formal" review process, by Professor David Andersen (known as 'dga' in crypto circles) who also wrote the current implementation of the hashing code. He found nothing wrong with the design and largely praised it, stating that it would likely achieve its goals of resisting extreme optimizations and narrowing (but not eliminating) the performance gap between CPUs, GPUs, and ASICs.
I have seen hints (mostly in the form of offhand comments) that other experts have reviewed without finding problems, or at least no major problems, but that is not a formal review, especially if they don't publish their results.

Monero Research Lab helps to identify problems and find solutions. Currently they have higher priority matters than spending more time focusing on CryptoNight:

As of this writing, the algorithm employed for difficulty adjustment in the CryptoNote reference code is known by the Monero Research Lab to be flawed. We describe and illustrate the nature of the flaw and recommend a solution. By dishonestly reporting timestamps, attackers can gain disproportionate control over network difficulty.  We verify this route of attack by auditing the CryptoNote reference difficulty adjustment code, which, we reimplement in the Python programming language.  We use a stochastic model of blockchain growth to test the CryptoNote reference difficulty formula against the more traditional Bitcoin difficulty formula. This allows us to test our difficulty formula against various hash rate scenarios.


What's the purpose of email address in pool mining config? First time setting up monero miner, I see pools require wallet address, worker name and email address. What's the purpose of this email address? Nanopool's help page says YOUR_EMAIL - your email address for notifications. Optional. What kind of notifications are being talked about and is it mandatory to provide a valid email address?

The email address is used as a login password to manage your payout threshold. Without a login password, anyone knowing your Monero address can manipulate your payout threshold. Some pools also use email address to send you regular hash rate reports or payout notifications. Once you start mining using your email as pool password, and have submitted a few valid shares, the pool will associate your Monero address with your email address. you can then login using Monero address as username and email as password.

  is it mandatory to provide a valid email address?

Unless I misunderstand what Nanopool mean as "Optional", no, it is not mandatory. Without an email, you won't receive any notifications about your hash rate, and cannot configure your payout threshold. At the end of the day, you still get your Monero regardless of whether you give the pool your email or not.


GUI Wallet - Tails Setup I'm trying to set up the pruned GUI wallet following the instructions (and code) here: https://www.reddit.com/r/Monero/comments/h8pbc2/guide_setting_up_a_monero_full_node_on_tails/
I downloaded Tails this week, so my version should be up to date, but whenever I run the code it gets to approximately 50% and essentially stalls out. I get the following errors over and over again. I'm not very experienced, so please help me out here!
2021-02-02 19:41:23.652 I SYNCHRONIZATION started
2021-02-02 19:42:44.939 W There were 0 blocks in the last 90 minutes, there might be large hash rate changes, or we might be partitioned, cut off from the Monero network or under attack, or your computer's time is off. Or it could be just sheer bad luck.
2021-02-02 19:42:55.887 I [78.46.68.58:18080 OUT] Sync data returned a new top block candidate: 1138064 -> 2288202 [Your node is 1150138 blocks (4.4 years) behind]
2021-02-02 19:42:55.887 I SYNCHRONIZATION started
2021-02-02 19:44:14.949 W There were 0 blocks in the last 90 minutes, there might be large hash rate changes, or we might be partitioned, cut off from the Monero network or under attack, or your computer's time is off. Or it could be just sheer bad luck.
1612295100 ERROR torsocks[12923]: General SOCKS server failure (in socks5_recv_connect_reply() at socks5.c:527)
2021-02-02 19:45:44.961 W There were 0 blocks in the last 90 minutes, there might be large hash rate changes, or we might be partitioned, cut off from the Monero network or under attack, or your computer's time is off. Or it could be just sheer bad luck.```

Syncing over tor is hard, I had the same issues, restarted many times, but you will get through in the end.


RandomX slow hash "miners" parameter I want to write fast RandomX verification in Python.

I'm using pybind11 and want to bind the C function rx_slow_hash:

void rx_slow_hash(const uint64_t mainheight,
                  const uint64_t seedheight, const char *seedhash,
                  const void *data, size_t length,
                  char *hash, int miners, int is_alt)

I'm writing code that will use the asyncio module. So I have a one process which performs tasks asynchronously and I do not want to allow this process to be blocked.

Due to my poor C/C++ knowledge I do not know how to use rx_slow_hash in my use case.

I will be grateful if I find answers to questions:

What is the miners parameter for?
Can I start several processes that will use the rx_slow_hash function?
How exactly does verification work? For example, I have one process in which I will run verification with rx_slow_hash function with miners=1. Will this process create a separate thread for verification or will execution be blocked until verification is completed?

What is the miners parameter for?

How many threads to use for dataset initialization. Also it signals the intent to use full memory mode (for fast mining).

  Can I start several processes that will use the rx_slow_hash function?

Of course.

  How exactly does verification work?

Verification is just that, verification. Supply the same data, height and seed hash, create the hash, does it equal the same as the hash you are verifying. For verifying, you are only creating one hash (per verification required); mining you are repeatedly creating lots of hashes until you find one that meets the current network difficulty (i.e. you are mining). So unless you are trying to perform lots of different verifications, miners=0 will be fine. This would then limit memory requirements to 256 MiB (light mode). If you need to do lots of fast verifications you can use miners=<number of processors> which will attempt to use full memory, 2080 MiB, fast mode.

  For example, I have one process in which I will run verification with rx_slow_hash function with miners=1. Will this process create a separate thread for verification or will execution be blocked until verification is completed?

It will create 1 thread for the dataset initialization. After initialization, your calling thread will block whilst creating the hash.


Missing Monero Funds I made a transaction on ShapeShift. The transaction was successful but I never received my funds in my wallet. I’ve already talked with ShapeShift customer and they said the best thing to do is to ask you guys here get in touch with the dev team of the Monero wallet. (I’m using CLI and GUI)
I transferred Bitcoin to Monero as you can see here: https://shapeshift.io/#/status/996fe4c5-7d64-40ac-bf0b-4baaaec7fb42

My Tx hash: 7eb429acae351049713f8bac3ce9e1519cc76e6181b9ab3f5285949063110747

The transaction posted to the blockchain here: https://moneroblocks.info/search/7eb429acae351049713f8bac3ce9e1519cc76e6181b9ab3f5285949063110747

Using the xmrchain I can see that my Monero was sent to an output.
However, I’m seeing 0 balance in my wallet. I’m using the Monero GUI wallet (version 0.10.3.1 – beta2). I also tried using the monero CLI (version 0.10.3.1), and still 0 balance.
What's wrong?
Can anyone help?
Thanks…

If you are sure that your transaction is in the block chain and your monerod is synchronize 100% type the following in the CLI wallet. This will rescan the blockchain to check your own transactions.

rescan_bc

If you are not sure if you are 100% synchronize type the following in monerod

status


Is there a pool that will tell you the real time shares you've submitted? I'm trying some mining on my MacBook Pro.  Although I don't expect to make any money, I was curious if the software I'm using is actually submitting the shares it is reporting.  Is there a pool that will tell you in (basically) real time how many shares you've successfully submitted?  I have been using https://mixpools.org/xmr/, but since its minimum payout is 0.2 XMR, there's no way to tell if I'm successfully submitting shares until I get a payout (which would require a few billion successful share submissions I'm guessing).

most pools have a "lookup" where you can put in your wallet address and it will show you how many shares you've submitted (after your first share is found usually)

most pools i've seen will show this information even if you haven't reached payout


How do I get a custom Monero address? I've seen people with custom addresses on Monero, like having short custom three or four letter words in the beginning of the 95-character string. How do I get one of these?

You need to use a vanity address generator. As far as I know, this one written in Go is the best/only available one:

https://github.com/ehmry/monero-vanity

Edit: there is another one here implemented in JavaScript, see generate address with prefix:

https://moneroaddress.org


Transfer with wallet rpc do_not_relay=true do transfer I try to use the do_not_relay param with transfer but it is still transferring funds.

curl -X POST http://127.0.0.1:8001/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"transfer","params":{"destinations":[{"amount":1,"address":"..."}]},"account_index":45,"do_not_relay":true}' -H 'Content-Type: application/json'

I do not want that the funds to transfer, I just want to get the fee for calculating real transfer.

Why does it transfer?

Thanks.

Your parameters account_index and do_not_relay are not in the params object, so are ignored.


How to sign a message with my public monero address and verify it using the cli / gui / javascript app? Using the gui and cli, how can one sign a message with the monero private key? And then how do you verify it with the gui / cli / online js application?

Sign & Verify using the cli

You can sign a file (which may hold your message) using the cli sign command like this

sign <file_to_sign>

The signature will be printed to the screen.
You may then provide this signature to someone else to verify. The command to verify is

verify <filename> <address> <signature>

Try it yourself

You may reproduce those steps and make sure you get the same results:
Create a wallet using the seed austere locker smelting nozzle wagtail tuxedo acidic earth rover utility value tomorrow unusual vipers ferry dynamite algebra agenda rarest number rotate avatar deftly elapse avatar

(do not use this seed for anything else except this test)
Create a file named msg_file whose content is my message. sign the file:

[wallet 47e7vP]: sign msg_file
Wallet password:
SigV1XED2SBdQuN37x5h73fzVorD6JSZaTBKfaA7mFx6pHnQp5Z9UnysaQKdYkJRKFhNMLVMrw2z7GJkzB1e5EnkD6ska

This is your signature. Then verify the signature:

[wallet 47e7vP]: address
47e7vPdJA3WQbJRjT3WmGdSfocofRUiAYMTJSnjPAZwCfDcAmz2oBEZYV5KGJSYAA13Bj7D2bXiaWTfvKCfbDkDY2kuUFMf
[wallet 47e7vP]: verify msg_file 47e7vPdJA3WQbJRjT3WmGdSfocofRUiAYMTJSnjPAZwCfDcAmz2oBEZYV5KGJSYAA13Bj7D2bXiaWTfvKCfbDkDY2kuUFMf SigV1XED2SBdQuN37x5h73fzVorD6JSZaTBKfaA7mFx6pHnQp5Z9UnysaQKdYkJRKFhNMLVMrw2z7GJkzB1e5EnkD6ska
Good signature from 47e7vPdJA3WQbJRjT3WmGdSfocofRUiAYMTJSnjPAZwCfDcAmz2oBEZYV5KGJSYAA13Bj7D2bXiaWTfvKCfbDkDY2kuUFMf

If you sign the file yourself you will probably get a different signature than me. This is because the signing is not deterministic. Nevertheless, you should be able to verify my signature without problems.

Sign & Verify with another application using RPC

You can also use the official wallet rpc server (monero-wallet-rpc) to sign and verify from another application, using http request.
Start an rpc server by running monero-wallet-rpc with your desired flags. Assuming your rpc server runs on the local machine (localhost) and listens to port 18082, from the terminal run:

curl -X POST http://127.0.0.1:18082/json_rpc -d '{"method":"sign", "params":{"data":"my message"}}'

which will give you back:

{
  "id": 0,
  "jsonrpc": "2.0",
  "result": {
    "signature": "SigV1BwFKNzqm3YjbkkqVQ97TZCewPuqX5e6YZBuV6gkaXQXcAFfVEMBrMMVfYhax7hAcrJM7nHVW94APvPpV7NJRSEJB"
  }
}

Then to verify, run:

curl -X POST http://127.0.0.1:18082/json_rpc -d '{"method":"verify","params":{"data":"my message", "address":"47e7vPdJA3WQbJRjT3WmGdSfocofRUiAYMTJSnjPAZwCfDcAmz2oBEZYV5KGJSYAA13Bj7D2bXiaWTfvKCfbDkDY2kuUFMf", "signature":"SigV1BwFKNzqm3YjbkkqVQ97TZCewPuqX5e6YZBuV6gkaXQXcAFfVEMBrMMVfYhax7hAcrJM7nHVW94APvPpV7NJRSEJB"}}'

to get the result

{
  "id": 0,
  "jsonrpc": "2.0",
  "result": {
    "good": true
  }
}

Obviously, you can use this method with any application that supports http requests.

Note, signing a text file with the cli, and signing the text using rpc are two different methods, and you can't take signature from one method and verify it using another. This means you should use the same method both for signing and verifying.


How do "Time Locked Proof of Non-ASIC work challenge reward" algorithms work to deter ASIC production? I just read the proposal for "Time Locked Proof of Non-ASIC work challenge reward"

https://www.reddit.com/r/Monero/comments/86zb03/the_end_of_all_asic_miners_moneros_new/

I still don't understand how does it work exactly to deter ASIC production. From my understanding, this new algorithm will let you mine and then you have to mine again with a cpu to get the real reward? Is there a better eli5 explaination?

Has a similar asic resistant feature like this been implemented before in another coin?
What are some ways asic manufacturers can over come this new algo implementation?

The idea behind this draft is more like an extension to PoW changes like currently to prevent ASICs overtaking a serious amount of hash rate.

However, it's proposing to time lock all mining rewards during a full period of time where one algorithm is active, between two PoW hard forks and release them only after another challenge period which might be 1-3 months only to miners who keep up their average hash rate after a PoW hard fork to a changed algorithm.

From my knowledge there are no other coins which have implemented a similar solution yet.

ASIC manufacturers would have to prove immediately after a PoW changing hard fork that they can keep up their average hash rate, otherwise they will loose all rewards locked within the last PoW duration which is now considered to be 6 months or maybe will be lowered to 3 months. So an ASIC miner would have just 2-4 weeks between final PoW algorithm code merge until the fork to create a new ASIC or would have to rent large amounts of hash rate to match their previously ASIC based hash rate in order not to loose all mined but time locked coins.

However, there are several draw backs in this proposal.

Every single miner would have to wait to get mining rewards for a whole PoW period plus the challenge period where you already have to pay for your hardware and electricity
Freshly mined coins wouldn't be distributed evenly but only after every PoW plus challenge period and might lead to a lack of coin supply for months and then a huge wave at once being distributed after a finished challenge period
The whole process is pretty complicated, especially the time-locking of funds and the penalty system when someone doesn't meet his previous hash rate in the challenge period and his rewards would have to be distributed among all legit miners
Legit CPU/GPU miners might run their mining software just during idle times and might miss their challenge losing all their already minted rewards. Also failing to upgrade your mining software immediately after a fork brings you at that risk so only somehow professionally operating CPU/GPU miners would survive


What year will monero be fully mined? In what year will monero be fully mined? I know about the .6 xmr tail emissions, but when will the last bulk of the xmr be mined?

Quoting https://src.getmonero.org/resources/moneropedia/tail-emission.html:

  Monero block rewards will never drop to zero. Block rewards will gradually drop until tail emission commences at the end of May 2022. At this point, rewards will be fixed at 0.6 XMR per block.


How can you minimize risks to your privacy when using a remote node? If a user sends Monero through a remote node, then the remote node operator would know the originating IP of that transaction.  What are the steps that a user is able to take to reduce this potential privacy concern while using a remote node?

If it's only about sending moneroj, one could generate locally a signed transaction and forward it through a service like https://xmrchain.net/rawtx using tor/i2p/vpn to hide the originating IP.


Simple explanation of Monero mechanics - how does Monero work? I'm looking for a nice explanation of Monero mechanics to make people 'get' what is what and how it works. Things like stealth addresses, ring signatures, view & spend keys, key images, ring confidential transactions etc.

First of all, there are no addresses on the blockchain. Imagine the blockchain as a bunch of lockers which all look the same. The blockchain holds only the records from which to which locker funds get transferred. Now, how does it work?

Think of your address as containing a special blueprint (public spend key) and a special recipe (public view key). Sender picks a random locker, puts his funds inside, and uses your blueprint to produce a special lock, one which only you can open. Also, he uses your recipe to produce a transparent paint and writes some random number with this. Only you have a special flashlight (private view key) to light up the lock and see that there's a mark. So you recognize the lock as yours because the paint lights up, you read the random number written (shared secret) and use a special forge only you have (private spend key) to create a unique key which can open only that particular lock (one-time key).

To find a locker locked with a lock for you, you need to approach each one of them and light them up with your flashlight. If the sender didn't write down on which one he put your lock, even him won't be able to find it anymore!

So we have all this lockers (outputs), some of them contain monero and some have been emptied already. Thing is, everyone can see 'you' walking to a locker. If you only approached one locker (case of mixin=0, not possible with Monero anymore), anyone could tell that monero was moved from exactly that one to another one. This would allow someone to trace any monero back to the first locker (coinbase transaction). Here's where ring signatures come to play. Instead of just walking to one locker, you visit a few of them and use a blanket to hide what you're doing with it. You visit 5 lockers (mixin=4) in total. At the end, you show to everybody that you now have some monero in your hands. You have it because you were able to open one of the lockers visited (the one which was actually yours). Thing is, nobody knows from which one you took it! You go on and put it into another one and craft a special lock and mark it with special paint ...

The blockchain records which 5 lockers were visited when sourcing monero to put in the new one. Every time someone moves monero, he must visit a few lockers. You obviously must visit your one, and you can pick from any other lockers to hide which one was yours. The more transactions you make, the more complex the trail becomes. The more lockers you visit on each transaction, the better you hide your activity. Further back you try to trace the source, the more possibilities there are, so both number of lockers and number of transactions increase overall privacy. Also, since other people can visit your locker and pretend to have taken from it, they improve privacy for not just them, but for you as well.

Why do we usually visit 4 decoy lockers? See MRL-0004 for some insights.

  We recommend a network-wide minimum mix-in of n = 2 to address zero mix chain reaction problems, and we discuss how a mix-in of n = 4 is likely to be larger than necessary for most practical purposes. We recommend a nonuniform transaction output selection method for ring generation to mitigate age-based association problems. We recommend partitioning all transactions into many smaller sub-transactions such that they occur over an interval of time, as in a
  torrent, and such that each sub-transaction has one and only one output, in order to mitigate the combinatorial analysis problem.


xmr-stak-cpu as a service on ubuntu I'm running Ubuntu 14.04. And I need to run xmr-stak-cpu as a service.
I tried to search for a possible solution, but found only for systemctl, which is on Ubuntu 16.
Is there a way/script to configure and run xmr-stak-cpu on Ubuntu 14.04 as a service?

Have you tried upstart? See http://upstart.ubuntu.com/cookbook/

Also see: https://askubuntu.com/questions/351879/how-to-create-a-service-on-ubuntu-upstart/448536#448536

Upstart Example: /etc/init/xmrstakcpu.conf

# xmrstakcpu.conf
start on net-device-up IFACE=eth0
exec /usr/local/bin/xmr-stak-cpu/xmr-stak-cpu

This would run /usr/local/bin/xmr-stak-cpu/xmr-stak-cpu after the Ethernet0d device was initialized.

If you just want to run xmr-stak-cpu in background - for instance after SSH - you can use

nohup ./xmr-stak-cpu &

This will run xmr-stak-cpu and keep it active in background and log all output to a file nohup.out, while you can logout / exit SSH.


How is the "account" command used in the CLI? I recently built from master - though this may have been included in the last point release (v0.11.1.0) - and I see new monero-wallet-cli commands. The command I'm most curious about is account.  Is this related to the concept of sub-addresses?

How is account used?  How is the transfer command potentially used differently now, as a result?

Yes, you may use accounts to help managing subaddresses, but you don't have to. If you don't care which address receives coins as long as it goes to your wallet, just leave it.

Accounts work like this:

By default you get a single account with number 0.
You may switch current account context by issuing account switch <number> or by account new which creates a new one.
Each of these accounts has its own primary address. The account 0 is a wallet's primary address, others have a subaddress.
When creating an account, it gets a new subaddress.
Additionally, every account can get additional subaddresses, created by command address new
Once you have created accounts, the balance command shows contents of the current account only:

[wallet BZwH58]: balance
Currently selected account: [1] (Untitled account)
Balance: 50.000000000000, unlocked balance: 0.000000000000

To get contents of the entire wallet, use the account command:

[wallet BZwH58]: account
        Account               Balance      Unlocked balance                 Label
       0 9wFuzN       14.943273120000       14.943273120000       Primary account
       1 BZwH58       50.000000000000        0.000000000000    (Untitled account)
----------------------------------------------------------------------------------
          Total       64.943273120000       14.943273120000

The outstanding question is how to transfer coins between accounts without creating a blockchain transaction. I haven't figured it out yet. It seems that accounts are like separate wallets. To transfer between them you must create a regular blockchain transaction.


Will Monero ever move to Proof of Stake (PoS)? As an ecological dilemma, burning a lot of energy via PoW seems not to align with the progressive agenda of an aspiring global cryptocurrency.

Though your first sentence is not actually a question, I shall refute your statement. Energy is never burned using POW or wasted, every single bit of it serves an extremely valuable purpose, no miner is wasting energy, they all get paid for their contribution and that contribution is proportional to the usefulness and value of the network as a whole. It uses proven and sound principals to reach an outcome while ensuring it's integrity as a 100% decentralised autonomous network unlike PoS which has major deficits in it's decentralisation and viability as a network that can resist attack and maintain it's security and integrity. Monero's POW is however designed to make it less efficient to centralise as it has a large memory component, so this should mean mining on PCs and GPUs will be viable for at least several years to come, and then there is the option of stalling the jump to ASICs even further by employing cuckoo POW which is even more memory heavy (and results in much faster transaction verification times). Ecologically the argument is moot as Monero is not a system requires infinite growth, it will reach an equilibrium where the number of transactions, nodes, and services it can support will peak, and miners will stop growing with that. Unlike other financial systems that demand higher and higher consumption via debt to keep the financial wheels turning, systems that utilise PoW do not have such antiquated mechanisms and will reach equilibrium eventually. They are able to grow and shrink as needed to support the economy that it underpins and have no fundamental requirement to grow at all costs. Once big enough, their resource requirements will stabilise.

As to your actual question, those features are already in place in the monero-wallet-cli, it only needs to be specified when restoring your seed. As long as you know the blockheight from which the first transaction appears, you can skip scanning most of the blockchain up until that point.


Can't Find Transaction My question is how do I check if a transaction is in progress.  I am willing to tip the person who helps me with this $50 (I will PM the person to get their LTC or ETH or XMR address to send to).

I transferred some XMR from Bithumb to Binance at 9am PST today (its currently 1pm). Normally I would be more patient as I could check if the transaction is on the network or block-chain in other crypto-currencies. However I have been unable to verify (possibly due to the anonymity of Monero). The information I have is the:

Deposit Address (from Binance)
Payment ID (from Binance)
Transaction Number (From Bithumb)
Address (from Bithumb) (note that this is way longer than my deposit address)

With this information, how can I check on my transaction's progress (or if I have lost my money). I have tried putting this information into http://xmr.llcoins.net but i get "Failed to get transaction data! Perhaps MoneroBlocks is down?"
Thank you!

Could I have used a "wrong address" (note the address and payment ID I used were the ones provided by Binance)
Could it be that Binance and Bithumb are not compatable (I noticed that my deposit address on Binance is 95 characters and the deposit address on Bithumb is 106 characters)
Could it just be taking a while (Bithumb says its fee was .05 XMR)

Use the transaction ID/hash/number. It should look something like this:

c6ad90452a1c62171522484a3d8c8585d6461f544c6c44933850b90f76745895

Paste yours in a block explorer. I highly suggest xmrchain.net.

If it doesn't return anything, the block explorer is down/out of sync (unlikely), or your transaction did not go through. Contact the first exchange (Binance) and ask them to confirm they actually sent your transaction.


What other benefits does Cuckoo Cycle have over cryptonight, is it quantum computer proof? I have read Which reasons were discussed for potentially changing the proof-of-work algorithm? but aside from being more asic 'resistant' and faster to verify what other reason should monero change pow? With quantum computers a pow hardfork will need to happen, is cuckoo cycle resistant to quantum computers? Is there any pow that is quantum computer 'safe' and also have qualities that monero needs? fast verify, asic 'resistant' etc etc etc thankss

The arrival of quantum computers (QC) isn't necessarily a reason to change the PoW.  It would only be necessary if the first generation of quantum computers are so fast that only a small investment is required to attack the network.

That scenario would allow the first person to build / buy a QC to attack the network.

If on the other hand--and I think this is the more likely scenario--the first generation of QC are better, but only by say an order of magnitude, then we'll see a gradual upgrade of mining nodes on the network, where nobody is ever in a position to attack the network.

So if QC becomes commodity hardware (e.g. most systems now have a CPU, GPU and QC, specialized for different tasks) do we really need to change the PoW just to make it viable to mine using only a CPU or a GPU?

The answer, I think, is no.  If we change the POW so they're all equivalent in performance, it would increase the security added by each compute node by a factor of 3 (CPU, GPU and QC utilized instead of just QC), but it would do nothing for decentralization.


Daemon Failed to start error I recently started learning about monero and exchanged some BTC to XMR and sent to my Monero GUI wallet.  For some reason, when the network synchronization was happening, my computer crashed.  Now, when I log in, I get an error message every time the Daemon tris to start.  Does anyone have any advice?  I am scared I am gonna lose my exchange.

When asking for help about a particular error, it is a good idea to include that message. After all, we're not omniscient.

Your blockchain is probably corrupted, which will require a sync from scratch. This does not risk your monero being lost, though. Once you've synced again, your wallet will see your monero just fine.

monerod uses a faster, but more risky sync mode when downloading the chain. It usually works fine, but is prone to this sort of corruption when the OS/computer crashes. If your computer often does this sort of thing and you can't change the OS (or hardware if it's a hardware fault), you can force a safer sync mode (though it may be a lot slower):

monerod --db-sync-mode safe:async:1000

Once the initial sync is complete, monerod will automatically switch to this safer mode, as database speed is less of an issue then.


Ghost protocol for Monero? Ethereum allows for an extremely low block time by keeping track of and rewarding miners of orphan blocks (uncles in Ethereum) thus including their work in calculating the longest chain.

Is there any reason to not implement something similar in Monero if it allows for faster block times and deals with the problem of stale blocks?

Pretty much anything could be done.

I'd been thinking about a block tree, where you'd have geographically [1] close miners mining at a low difficulty and low block time, and making their own quick chain. Every, say, 10 blocks, they'd hash their blocks (or 10 blocks in the recent past, to guard against reorgs) and a higher level set of miners would have a slower blockchain embed these hashes. Any number of levels. This would allow (A) faster confirmations on a local level without much more orphans due to the geographical (2) proximity, and (B) the ability to scale the blockchain to very distant regions. Like, you know, the actual moon.

This might or might not be similar to what Ethereum is doing, but it's certainly fun to think about.

[1] Doesn't work well with I2P
[2] Well, closeness with a metric based on ping, rather than distances


How do I save the Monero blockchain to another hard drive? I have a small SSD as my windows 7 C: drive. How can I transfer and save the Monero blockchain to another hard drive on my computer in order to save space?

In addition to pebx's answer, note that the default directory on Windows is %programdata%\bitmonero at least in v10.0. Move this entire directory to drive of your choosing and then run the command described:

  monerod.exe --data-dir D:\desired\path\to\your\blockchain

If you ran Monero v.9.4 or prior, you can also save space by deleting the entire LMDB directory and re-syncing from scratch which typically takes a few hours on a fast connection with a modern computer. Monero v10.0 uses less space for the database.


GUI on Windows 10 x64 with high DPI screen OK - so this might be a silly question but I have literally just moved back to windows after 10 years on mac. I've just downloaded the GUI and the daemon is currently synching... BUT the GUI is tiny on my screen! I am at a loss as to how I manipulate the graphics to make the GUI larger (so I can see the damn thing) without adversely affecting all the other icons on screen. Thanks!

This is a known issue that has been reported a week ago and not yet fixed.


What is the end number used for in start_mining command? I am ready to begin mining through wallet-cli.  However, I am seeing different commands.  For example, I have seen "start_mining 4", start_mining 2", etc...

Can I just use the command start_mining?

Thanks for all of your help Miles P. and scoobybejesus!

That number is the number of mining threads to use. If not specified, it defaults to one thread.

Typically, you'll want one thread per 2 MB of cache memory your CPU has available (so 3 threads if you have 6 MB cache, for example).


How can I build a specific branch of Monero? I would like to build a specific branch of Monero, and I would like help setting it up to build on Debian. Can someone help me please?

Start by opening a terminal and installing all the dependencies:

sudo apt-get install libgtest-dev && cd /usr/src/gtest && sudo cmake . && sudo make && sudo mv libg* /usr/lib/

sudo apt-get install build-essential cmake pkg-config libboost-all-dev libssl-dev  libzmq3-dev libunbound-dev libsodium-dev

cd to the directory you want to download the files to. For example, if you want to go to the home directory (recommended for beginners), use cd ~.

Clone the repository:

git clone --recursive https://github.com/monero-project/monero

^ if you are using a branch from another contributor, then the URL will be different. Adjust accordingly.

cd monero && git submodule init && git submodule update

(Replace monero with bitmonero if this doesn't work)

Check out the desired branch. Replace <branch> with the name of the branch:

git checkout <branch>

You can finally build the binaries. Replace <t> with the number of cores your CPU has.

make -j <t> (eg: make -j 2)


Cannot login to mymonero I'm having problems to login to mymonero, either with the chrome extension and the webapp. After confirming the private key, I click on the button but nothing happens. This is also the case when I try to log in using a previously created private login key.

Anyone having this problem?
I'm using google chrome 59.0.3071.86 (Official Build) (64-bit) on Ubuntu 16.04.

Thx

I just found the problem. Turns out the application tries to connect to the API on port 8443. And I was behind a firewall. Maybe it would be good if that info was on the site. Thanks anyway


Shamir's Secret Sharing for cold storage of a Monero wallet After creating a mnemonic seed for offline cold storage with the guide described here how can I safely encrypt it in pieces with the help of Shamir's Secret Sharing?

What are some other viable alternatives to secure my wallet offline in pieces, none of which can recreate my account on its own?

There is no support for SSS in simplewallet. This would require some amount of new modexp code to be added (unless a variant of it can be made using EC cryptography, but I'm not aware of any).

So the best you can do is use a standalone SSS tool such as ssss (see http://point-at-infinity.org/ssss/). It may already be in your distribution's packages.

Example, with the words "shamir secret sharing":

$ ssss-split -t 2 -n 3
Generating shares using a (2,3) scheme with dynamic security level.
Enter the secret, at most 128 ASCII characters: Using a 168 bit security level.
1-b52fb8b2fc481023c708c25c798a45e349951e9af8
2-6191ac079ef7624a72ffce0da2372d6a24fe2e530c
3-d2045f94bf624c6d1e52ca3d14a3f512ffd8c19459

and:

$ ssss-combine -t 2
Enter 2 shares separated by newlines:
Share [1/2]: 2-6191ac079ef7624a72ffce0da2372d6a24fe2e530c
Share [2/2]: 3-d2045f94bf624c6d1e52ca3d14a3f512ffd8c19459
Resulting secret: shamir secret sharing

For more info, man ssss.


Easiest way for crypto illiterate web consumers to buy Monero to spend at website If you offer payment in Monero at your website the average consumer who doesn't use cryptocurencies may ask you how to buy it in the simpliest way. For people not used to crypto looking at the different crypto exchanges is pretty intimidating.

I know there are many different ways and exchanges but can anyone recommend (preferably from experiece) a simple exchange or method for UK (pounds sterling currency users) I could recommend to web customers? This is for people who know absolutely nothing about crypto and who are used to Paypal or Credit card?
They expect to go somewhere with a GBP credit card and buy monero. I want to recommend somewhere as easy as possible.

Thanks in advance for any advice.

"simplest way" <- perhaps point them to purchase Monero at a big exchange like Binance or Kraken. But, for a complete novice, even that will be daunting, that's just where we're at right now on the adoption / general knowledge curve of cryptocurrencies.

The sphere of learning about cryptocurrencies is vast, so if you want people to learn, why not create resources for them.

And as a seller, you could implement your own conversion of card to Monero or use a third party integration like Globee.

It really depends what your goal is; making the purchase easy or educating.


Is Monero more or less complicated than Bitcoin to integrate into exchanges? When an exchange wants to add Monero to their list of coins, it has a brand new code to work with considering most coins are forks from Bitcoin. Is integration of Monero on exchanges or with things like merchant services more complicated than Bitcoin because of a more complicated code or command structure? Could this be why adoption has been slower than we would have liked?

As I understand it, right now it's slightly harder due to the interface that Monero uses, but this is in the process of being standardised so it can be seamlessly integrated with exchanges just like Bitcoin.

This may be the reason that Monero hasn't been integrated with other exchanges, but in the near future this should be one less hurdle.


Why does my RPC call return "Connection refused"? I have a view-only wallet opened, and from another terminal, I try to run the getbalance example from the Wallet RPC documentation. However, I get a Connection refused error:

mac:~ user$ curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getbalance"}' -H 'Content-Type: application/json'
curl: (7) Failed connect to 127.0.0.1:18082; Connection refused

This is on macOS (Mavericks). Anyone knows why? Should I start the wallet with extra parameters?

If I recall, RPC is disabled by default, and needs to be explicitly enabled when running the wallet.

I tried it out and got it working by using the command:

monero-wallet-cli --restricted-rpc --rpc-bind-port 18082 --wallet-file <wallet path here> --password <wallet password here>

The program will then listen and wait for rpc commands sent to it on 127.0.0.1 . The command in your post should then work.


Why not use bLSAG for one input instead of MLSAG? AFAIK MLSAG is being used for one input because of a privacy problem. Why not just use bLSAG, since in the MRL005 it says that MLSAG is better once we have > 1 sets of keys.

MLSAG allows us to include more than just the set of keys. We can thus use both keys and commitments.

Quoting the paper:

  An MLSAG is essentially similar to the LSAG’s described in [8], but
  rather than having a ring signature on a set of n keys, instead, an
  MLSAG is a ring signature on a set of n key-vectors.

Currently we use RCTTypeSimple, which creates a signature for each input ring. Each ring contains public keys and commitments. This means we are creating a signature on a matrix whereby each column represents an input that has two rows. The first row contains the key, the second the commitment. A "matrix" is another way of saying "set of n key-vectors".