How to output the monero-cli-wallet commands using --comand "status" without all the other output data? ./monero-wallet-cli --wallet-file=XXXX --daemon-address YYYYY --command "balance"

When I use the above command, it gives me the ability to see my balance, but how do I make it where it doesn't output the startup message when monero cli starts?

End result, I just want to be able to output the balance and save it to a file or pass it into an argument of another command like grep.

When I use the above command, it gives me the ability to see my balance, but how do I make it where it doesn't output the startup message when monero cli starts?

The simplest way (*nix) is:
monero-wallet-cli --wallet-file your-wallet --password 'your-password' \
    --command balance | tail -2
You can of course pipe through anything that accepts data on stdin.
Another example:
monero-wallet-cli --wallet-file your-wallet --password 'your-password' \
    --command accounts | tail -n +15 | head -n -3
Removes the header and footer from accounts output displaying everything in between.


Which activity metrics are most highly correlated with transaction volume? Have there been any studies comparing growth in various community, developer or merchant metrics to the average number of Monero transactions per day?

Growth in which of the following are most closely correlated with growth in transaction volume?

Number of Reddit followers or number of daily posts
Number of Twitter followers
Number of posts in the Bitcointalk announcement or speculation thread
Number of Monero accepting merchants
Number of GitHub commits
Another metric that more closely correlates

Thanks to the privacy offered by Monero it is hard to know the purpose of most transactions.

It is likely that none of the above suggestions are currently the largest driver in transaction volume.

Based on trading volumes and the number of Monero accepting merchants today, a large percentage of transactions are likely related to trading. This can include:

Sending Monero to exchanges
Sending Monero from exchanges to web wallets, CLI wallets and paper wallets

Trading volume are often the highest around the times of major releases (LMDB release) and major events (ETH/ETH drama when immutability was often discussed).

In addition to major releases, I would expect transaction volume to show big spikes when major privacy focused merchants accept Monero. If many Bitcoin users became aware of xmr.to as a private way to pay Bitcoin merchants anonymously I would expect an immediate spike in Monero transaction volume.

If more trading moves to P2P exchanges such as Bitsquare where XMR is traded on chain (instead of off chain at centralized exchanges) transaction volume should increase substantially.


How to do MLSAG signatures with vin of type 0 (miner)? Commitments(outPK) are required when doing a MLSAG signature. However, there is no outPK in a type 0 transaction. example

What should I do as facing this kind of transactions?
I've checked rctSigs.cpp but still don't get it..

Many Thanks!

Sorry for the implicit information.. I mean that I'd like to make a tx and some of the outputs are type 0 like this (the number 4/6/9/10 are types 0).

I am curious how to do MLSAG with vins which have no commitments because commitments(OutPk) are required for building a tx.

There is no MLSAG signature on tx type gen.


Initial blockchain sync fails with message: [P2P6]Attempt to get hash from height 787402 failed -- hash not in db I've attempted to get monerod running on one of my Linux boxes, and keep getting an error during the initial synchronization.
I've deleted the .bitmonero directory as well as the working directory, but get the same result. I was hoping the latest version released today might fix it, but the issue persists.

SYNCHRONIZATION started

2016-Dec-22 11:35:21.224232 [P2P6]Attempt to get hash from height 787402 failed -- hash not in db

2016-Dec-22 11:35:21.224284 [P2P6]ERROR /DISTRIBUTION-BUILD/contrib/epee/include/net/abstract_tcp_server2.inl:249 Exception at [connection::call_back_starter()], what=Attempt to get hash from height 787402 failed -- hash not in db

The issue ended up being a bad stick of RAM.  I removed the memory and the problem went away.


Does the Monero default client deduct the fee from the sent amount? Will the transaction fee be automatically added when I transfer some moneros with the default wallet (client) i.e.:

2 XMR to be transferred

+ 0.01 fees (depending on speed and obfuscation level)

2.01 are used from my balance

?

When you transfer monero, you also pay the miner fee. This fee is also taken from your inputs, so if you transfer an amount A, then you end up with this:

N inputs, totalling X, such that X >= A + F
I outputs, totalling X-F
One of these I outputs is A
Change is X-F-A

So you spend A+F.

It would be confusing if you sent some amount, but the recipient would receive some slightly smaller amount.

Note that this is how the monero-wallet-cli and monero-wallet-gui wallets behave, so another wallet may well decide to it otherwise.

There is an exception to this rule: the sweep command family. sweep_all tries to send all your balance, but since you wouldn't have anything left for the fee, it sends all your balance minus the fee.


What is the story with Thankful for Today and the transfer of dev control? Legend has it, Monero once had another developer, but he displeased the community and was replaced.

How did this transfer control happen? What is the story? (And when does it gets its own manga?)

thankful_for_today launched it as bitMonero and the other devs voted to drop the bit part and Monero was born.


Is it easily provable by a third party that the key image used in a transaction is associated with the spent output without revealing the (P,I) pair? What I'm getting at is I'd like to know how the Monero network can know that a key image used in a transaction is not either forged (probably an easy answer) or created from a different output owned by the same wallet (perhaps a more technical, but hopefully straightforward, answer).

The transaction private key, x, probably signs the ring and the key image, right?  My hunch is that the distinctive ring signature provides a way to check the math that P (the output public key) being spent is a ring member, and is also associated with I, the key image that's attached to the ring signature.

How does it work?  I don't understand how the verification works without revealing the actual tx pub key being spent.

I've been reading other SE questions and answers here, here, and here.  I haven't found an answer expressed in the way I'd like to understand it.

The signature verification algorithm will only return a "correct signature" result if P is equal to x·G (i.e. the real spent output's public key is derived from the output's secret spend key x) and if I is equal to x·Hp(P) (i.e. the key image I is derived from the output's secret spend key x).

If you can understand the algorithms on page 6 of MRL-0003, you will see that the Li elements check the public key and the Ri elements check the key image.

Signature algorithm:
--------------------
i ← 0
while i < numkeys do
  if i = s then
    k ← random Fq element
    Li ← k·G
    Ri ← k·Hp(Pi)
  else
    k1 ← random Fq element
    k2 ← random Fq element
    Li ← k1·Pi + k2·G
    Ri ← k1·I + k2·Hp(Pi)
    ci ← k1
    ri ← k2
  end if
  i ← i + 1
end while
h ← Hs(prefix + {Li} + {Ri})
cs ← h − ∑ci   (with i ≠ s)
rs ← k − x·cs
return (I, {ci}, {ri})

Verification algorithm:
-----------------------
i ← 0
while i < numkeys do
  L′i ← ci·Pi + ri·G
  R′i ← ri·Hp(Pi) + ci·I
  i ← i + 1
end while
h ← Hs(prefix + {L′i} + {R′i})
h ← h − ∑ci
return (h = 0 (mod q))

The verification algorithm will give a "correct signature" result when ∑ci is equal to Hs(prefix + {L′i} + {R′i}). For this to be true, {L'i} must be equal to {Li} and {R'i} must be equal to {Ri}.

For the decoy keys (i.e. i ≠ s) it is obvious that L'i = Li and R'i = Ri as they are generated with identical formulas.

For the real key (i.e. i = s):

    L's = Ls
<=> cs·Ps + rs·G = k·G
<=> cs·Ps + (k - cs·x)·G = k·G
<=> cs·Ps + k·G - cs·x·G = k·G
<=> cs·Ps = cs·x·G

    R's = Rs
<=> rs·Hp(Ps) + cs·I = k·Hp(Ps)
<=> (k - cs·x)·Hp(Ps) + cs·I = k·Hp(Ps)
<=> k·Hp(Ps) - cs·x·Hp(Ps) + cs·I = k·Hp(Ps)
<=> cs·I = cs·x·Hp(Ps)

So for the signature to be valid, the signer has to know the secret key x so that x·G = Ps and x·Hp(Ps) = I.


monero-miner.com "minimum withdrawal amount" I've been having a look at a website suggested to me called www.monero-miner.com - I'm not sure how legit it is, basically it claims to be able to mine inside the browser and deposit the coins you earn into your wallet.

Scrolling down, as part of the blurb, it states "Payments are done automatically to your wallet once you reach the minimum withdrawal amount".

Is there a standard minimum withdrawal amount? Or can this vary from service to service? Because the website doesn't seem to state it.

First of all, regarding this particular website, I can't say one way or another whether it's "legit" or not.  Do as much research as necessary to determine whether it is.  Considering you're not risking any coins in your wallet - that is, you're only risking not receiving the coins to which you are entitled from mining - the risk of loss is at least low.

Regarding minimum payout, you'll find that they vary from service to service.  Some mining pools allow one to set a minimum payout to 0.3 Monero, or sometimes less.  The default tends to be 1.0 Monero.  Many miners probably increase the payout threshold beyond that.

Transaction fees are related to the size of the transaction (in kB).  If you need to spend 1.0 Monero, and you have a 1.0 Monero output to spend, the fee to send that transaction will be much cheaper than if you had to use four 0.3 Monero outputs.  Keep this relationship in mind when choosing your payout threshold, assuming you're able to choose it.


V Fork happened yet? I purchased 1 monero coin several months ago and is being held in a Freewallet. Has the Fork happened yet? Do I have 10 coins now or just 1?

There is no support for MoneroV in Freewallet. Unless they support the fork, you will not be able to claim MoneroV.

As a reminder, Freewallet controls your private keys. If you used a different application such as Monerujo, Cake Wallet, or X Wallet, you could restore your Monero (including possibly claiming coins) on another device.


Blockchain size on hard drive? What is the current blockchain size in gigabytes and is there a service that regularly reports this statistic?

The current blockchain size is around 50 GB as of October, 2018.

On Windows platforms, you can check the size of the blockchain by checking the size of C:\ProgramData\bitmonero\lmdb\.

On Linux/UNIX platforms, you can check the size of the blockchain in the terminal by executing du -sh ~/.bitmonero/lmdb/.

The Wolfram Warptangent v0.10.0 release bundled in some rather significant database optimizations started by the late developer warptangent (continued and finished by hyc), which shrunk the blockchain down to around 7 GB from 17 GB back in summer 2016.

The Monero blockchain grew fairly quickly in 2017 due to rapid adoption. An optimization known as "Bulletproofs" which significantly reduced the size of all subsequent transactions (~80% reduction) was activated on October 18th, 2018 with the v8 hard fork.

To check the current size of the blockchain (as well as look up historic growth of the blockchain), see https://moneroblocks.info/stats/blockchain-growth


Confidential transaction shows amounts My understanding is that confidential transactions "hide" the amount exchanged.

However I have found a confidential transaction where the input amount is visible.

Is that expected?

The input comes from a non-RingCT transaction.  The outputs are RingCT outputs, and are therefore reflected as 0.


Does anyone know what this message means 2017-09-20 08:15:20.616 3740    INFO    global  contrib/epee/src/mlog.cpp:145   New log categories: *:WARNING,net:FATAL,net.p2p:FATAL,net.cn:FATAL,global:INFO,verify:FATAL,stacktrace:INFO
Height: 1400001/1402734 (99.8%) on mainnet, not mining, net hash 259.32 MH/s, v5, update needed, 0(out)+0(in) connections, uptime 0d 22h 47m 33s

My monero wallet has already sync, but I logged on today and it keeps trying to sync again, the number of blocks remaining keeps going up slightly and it is only at 2733 but it does not seem to be syncing properly and I cant get an accurate wallet ballance

You are stuck at the height of the most recent fork.  It appears you have not upgraded to v.0.11.0.0 or after.  Please download new binaries from https://getmonero.org/downloads/.


Change wallet fom basic to advanced Noob here.
I installed "Monero-Wallet-gui.AppImage" on my linux box, after quickly going through the prompts I created a basic account using an external node. What if I changed my mind and now I want the advanced settings ? how would I do that ? uninstall, reinstall, change my prompt responses and log into my previously created account ?
Thanks in advance.

Open the basic wallet and let it synchronize
Click on the "exit" button at the top left of the window (the symbol is like a door with an arrow)
There you should see a "Change wallet mode" button


Synchronising Blocks on Wallet restore from Seed I'm restoring a wallet from a 25 word mnemonic, I have the block chain on my Mac already... (using GUI beta1).

The GUI seems to be "synchronising blocks"... looking at my network activity it seems to be redownloading the block chain, is this expected?

Can't it just use the copy I have already...
FWIW there keys are on my desktop (rather than being in the same folder as the blockchain).

What's the issue?

It's really unusual - I moved the keys to the same folder as my main wallet.
I can open my main wallet and it immediately recognises that the blockchain is up to date and shows 'Connected' and my balance.

Opening the other wallet that I requested was restored from the seed and my Macs fans kick in and it starts redownloading the blockchain...

Weird?

When you restore from a seed the wallet scans all blocks in the blockchain to find transactions belonging to the wallet. Since all transactions are hidden on the blockchain a fair amount of computation is needed for every transaction on the blockchain to find out if it belongs to the wallet or not. This can take a while, especially if you don't have a SSD disk.

To speed up the process you can input a restore height in the wizard where you enter the seed. This will force the wallet to only pull the block hashes until the restore height is reached and not scan the blocks for your transactions. It's important that the restore height is lower than the block height for the first transaction in the wallet. Otherwise transactions can be missed and your wallet will show wrong balance. To find out the restore height you can make a rough guess of the date when wallet was created and check the corresponding date on a block explorer. E.g if your wallet was created in June 2016 you could enter 1050000 as restore height which corresponds to May 18 2016.


How do payment ids work? In particular, how do the encrypted ones work cryptographically.

I'm guessing they are based on the shared secret.

Since StackExchange prefers content to be on the site rather than through links, I've transcribed and annotated the information from luigi1111 on PasteBin to make it more accessible for readers.

Stealth Short Payment IDs

This is a proposal for shortening both "user" and "blockchain" payment IDs from 256 bit (32 bytes) to 64 bit (8 bytes), incorporating a stealth feature to improve anonymity, and adding a new shorter v2 integrated address.

We are basically discussing three different aspects here, which aren't strictly related:

Stealth IDs which change every TX similar to addresses
Shortened IDs have less characters since the current 256 bit requirement is absurdly large and unnecessary. See examples below

  Standard (95):
  45BEPXEXAN6YrvHgP3owF8GCzBZ2vCZNb9sMxZG6D7iuSvjVret5ciY2GfqVMHZiPoTEEcmSmVhcyaReTjJafrSqV26ZoYE

  64-bit ID integrated (106):
  4TZ76dT4mbsizsTtJzy7kYBo9f8xduc8wTsWb86pCmx5Cmh43CDxNS1FRcMrE3CNQ2ZT17vzCudc5TbNYBzizwqZFah5K1Js7VpL88qPSi

  Full 256-bit ID integrated (139):
  4LRv6jJYxh5Ba1Z4UfCZYmTzP7g1mP5uUC32KgWcMtBi2QV6xGjHpqs5ZeEnpAwaWVNgF7b7xtumQGoL9posmQMfRvFupJBXkZyWGdcDizfMUAiEgrG7cA98yf6vcqJzZT1EPg8A69e

Integrated addresses to become v2 addresses and replace/deprecate v1, which isn't in use yet.

The objective is to get the payment ID scheme to a point where it is ready for years of use with no further changes. To maintain backward compatibility with the current payment ID scheme during the transition  stealth payment IDs will only be generated by default through the use of integrated addresses. Thus, when recipients are ready to accept the new stealth version, they would use integrated addresses.

This new 64 bit ID will be given a new tx_extra nonce tag: 0x01 (current payment ID is 0x00).

A note on collisions

With 64 bit IDs, there is a non-negligible chance of a collision if they are randomly generated. It is up to recipients generating them to sanity check for uniqueness.

  1 million IDs at 64-bit (simplified):
  1,000,000^2 / (2^64 * 2) = ~1/36,893,488
  so there is a 50% chance a collision happens around 5.06 billion IDs generated.

Current integrated address

At present the integrated address looks like:

netbyte (0x13 [standard Monero is 0x12])
+ 32 byte public spend key
+ 32 byte public view key
+ 32 byte payment ID (8 byte proposed for v2)
+ 4 byte checksum of all previous data

JavaScript implementation

Note that JavaScript is only to ease expressing the method.
Import cn_util.js from mymonero.com for methods.

For the stealth key, a derivation of the shared secret used for public key generation is required. The varint encoding used by output indices gives us 128 1-byte options to use as part of our key: 0x80 - 0xFF

Choosing entirely arbitrarily: charcode(I) + charcode(D) = 0x49 + 0x44 = 0x8d

Therefore

encryption key = H(sharedSecret + 0x8d)

Note that "+" means "append" above.

//---------------------------------------------------------
//proposal 1.5 (older ideas discarded as subpar and/or unscalable)
//xor payment ID with one-time key
var receiverKeys = create_address(rand_32()); //for example only
var payId = "0123456789abcdef"; //64-bit example
var txkey = random_keypair();
var der = generate_key_derivation(receiverKeys.view.pub, txkey.sec);
var stealthKey = cn_fast_hash(der + "8d").slice(0,16);
var encPayId = hexXor(stealthKey, PayId); //JS can only xor numbers, made up function to xor hex strings

//receiver would:
var der = generate_key_derivation(txkey.pub, receiverKeys.view.sec); //txkey.pub from tx_extra
var stealthKey = cn_fast_hash(der + "8d").slice(0,16);
var payId = hexXor(stealthKey, encPayId); //encPayId from tx_extra
//*compare payID with known set*
//---------------------------------------------------------


Can my mnemonic seed be hex data instead of something ASCII based? Can I enter my seed in as hex data instead of typing words in like normal?

edit: I'm hoping to increase entropy of my key if I'm able to go past the 7F ascii Hex boundary.

When recovering by mnemonic seed, you must actually type your mnemonic seed (or at least the first 3 letters of each word, 4 in some languages). You are able to recover a wallet with hex data but in a different manner:

With simplewallet(monero-wallet-cli) the private key is the hexadecimal representation of the 25 word mnemonic seed. Recovery options from that hexadecimal representation are found here

With Mymonero the private key is the hash of hexadecimal representation of the 13 word mnemonic seed as demonstrated in the code below:

int main(int ac, const char* av[]) {

    // get command line options
    xmreg::CmdLineOptions opts {ac, av};

    auto help_opt = opts.get_option<bool>("help");

    // if help was chosen, display help text and finish
    if (*help_opt)
    {
        return 0;
    }

    // default language for the mnemonic
    // representation of the private spend key
    string language {"English"};

    // get 13 word mnemonic seed from MyMonero
    auto mnemonic_opt = opts.get_option<string>("mnemonic");

    // get the program command line options, or
    // some default values for quick check
    string mnemonic_str = mnemonic_opt
                          ? *mnemonic_opt
                          : "slid otherwise jeers lurk swung tawny zodiac tusks twang cajun swagger peaches tawny";

    cout << "\n"
         << "Mnemonic seed    : " << mnemonic_str << endl;

    // change the MyMonero 13 word mnemonic seed
    // to its 16 byte hexadecimal version
    xmreg::secret_key16 hexadecimal_seed;

    // use modified words_to_bytes function.
    xmreg::ElectrumWords::words_to_bytes(mnemonic_str, hexadecimal_seed, language);

    cout << "\n"
         << "Hexadecimal seed : " << hexadecimal_seed << endl;

    // take the 16 byte hexadecimal_seed, and
    // and perform Keccak hash on it. It will
    // produce 32 byte hash.
    crypto::hash hash_of_seed;

    cn_fast_hash(hexadecimal_seed.data, sizeof(hexadecimal_seed.data), hash_of_seed);

    cout << "\n"
         << "Hash of seed     : " << hash_of_seed<< endl;

    // having the hashed seed, we can proceed
    // with generation of private and public spend keys.
    // the keccak hash of the seed is used as a seed
    // to generate the spend keys.
    crypto::public_key public_spend_key;
    crypto::secret_key private_spend_key;

    crypto::generate_keys(public_spend_key, private_spend_key,
                          xmreg::get_key_from_hash<crypto::secret_key>(hash_of_seed),
                          true);

    cout << "\n"
         << "Private spend key: " << private_spend_key << "\n"
         << "Public spend key : " << public_spend_key  << endl;

    // now we get private and public view keys.
    // to do this, we keccak hash the hash_of_seed again
    crypto::hash hash_of_hash;
    cn_fast_hash(hash_of_seed.data, sizeof(hash_of_seed.data), hash_of_hash);

    crypto::public_key public_view_key;
    crypto::secret_key private_view_key;

    crypto::generate_keys(public_view_key, private_view_key,
                          xmreg::get_key_from_hash<crypto::secret_key>(hash_of_hash),
                          true);

    cout << "\n"
         << "Private view key : " << private_view_key << "\n"
         << "Public view key  : " << public_view_key  << endl;

    // having all keys, we can get the corresponding monero address
    cryptonote::account_public_address address {public_spend_key, public_view_key};

    cout << "\n"
         << "Monero address   : " << address << endl;

    cout << "\nEnd of program." << endl;

    return 0;
}


Can't create transaction: unexpected error: Call method failed When trying to send Monero using Trezor Model T as hardware wallet, I get the following error:
2021-04-21 17:52:12.637 69852   ERROR   frontend    src/wallet/api/wallet.cpp:416   Can't create transaction:  unexpected error: Call method failed
    2021-04-21 17:52:12.640 69852   WARNING frontend    src/wallet/api/wallet.cpp:412   "Could not convert argument 0 at"
    2021-04-21 17:52:12.640 69852   WARNING frontend    src/wallet/api/wallet.cpp:412        "onTransactionCreated@qrc:/main.qml:830"
    2021-04-21 17:52:12.640 69852   WARNING frontend    src/wallet/api/wallet.cpp:412   "Passing incompatible arguments to C++ functions from JavaScript is dangerous and deprecated."
    2021-04-21 17:52:12.640 69852   WARNING frontend    src/wallet/api/wallet.cpp:412   "This will throw a JavaScript TypeError in future releases of Qt!"

GUI Version: 0.17.2.1-8444a956 (Qt 5.15.2)
Embedded Monero version: 0.17.2.0-release
I also tried it using the CLI wallet Monero 'Oxygen Orion' (v0.17.2.0-release). Same error "Can't create transaction:  unexpected error: Call method failed"
I followed the Trezor guide:
https://wiki.trezor.io/Monero_(XMR)
Any idea where the problem is and what I can do?
Thanks!

To workaround the problem I just had to close my other wallet (Exodus),  then it worked fine. Exodus has a Trezor integration and probably this blocked the Trezor device somehow.
Thanks to debruyne for giving the hint!


Can I spend from multiple wallets in a single transaction? Using the command line I know how to transfer <mix> <address> <amount>, but is there a way to do this from multiple wallets in one command?

Although it is not possible with any current wallet implementation that I know of, it is certainly technically possible to write your own code to construct a transaction that spends outputs that span multiple wallets.

This is because each output has a unique private key, and if you know the output private keys for a set of inputs it does not matter at all what wallet addresses those outputs were sent to.


How to change the monero-wallet-gui rendering mode for older computers On old machines (with integrated graphics), displaying the GUI might not work. it will either crash on startup or display a white/black window.

How can the user change the rendering mode and what is its effect?

Here is how to do it:

Linux & OS-X:

The easiest way is probably to launch it via terminal (has to happen in the same terminal session).

QMLSCENE_DEVICE=softwarecontext ./monero-wallet-gui

Windows:

Click the Start button, right-click the Computer option in the Start menu, and select Properties.
Click the Advanced System Settings link in the left column.
In the System Properties window, click on the Advanced tab, then click the Environment Variables button near the bottom of that tab.
In the Environment Variables window you can now add a new User Environment Variable. Name=QMLSCENE_DEVICE / Value=softwarecontext

Allright, so far so good. but what does it really do ?

The different isnt that easy to spot, but for users on old machines it will make a big difference :-)
you might notice the difference when comparing the font.


Using downloaded raw blockchain Setting up XMRig CPU miner (Monero) I have compiled and built a release using Visual Studio based on the windows-build guide on the github repository.

Using the xmrig.exe file I set up the option of -o as localhost:80. But this is the screenshot of what I am getting:

Is it possible to run the XMRig miner in local machine without connecting to any wallet or miner pool using the whole raw blockchain downloaded in the system? How can this blockchain can be given as input ?

With xmrig alone, you can't. You can set up monero-stratum if you would like a really simple solo mining pool.

This also requires a daemon, so you won't be mining 'fake' coins unless you joined the testnet or the stagenet.


How to change location of the Blockchain with monero GUI? How can I set the daemon included with the GUI to sync the blockchain from a directory on a flash drive, rather than the default directory ?

The GUI has two ways to do that:
When starting the Daemon:

Or in the settings Page:

As a note: on Linux and OS-X it's: --data-dir /path/to/your/blockchain


What are the "public" viewkeys and spendkeys? If you create a paper wallet at www.moneroaddress.org or create a wallet with simplewallet, you are provided with private view and spend keys. If you create a paper wallet at https://xmr.llcoins.net/ you also are shown  public view and spend keys in addition to the private ones. What are these and what do they do?

Note: the letters between parantheses correspond to the letters used for the math in the CryptoNote whitepaper¹.

The public view key (A) and public spend key (B) are the counterparts of the private view key (a) and private spend key (b). The public keys are needed to generate a public address. This is done as follows. First, the private view key and private spend key are sent to the ed25519 scalarmult_base function (G) to create their counterparts, the public view key (A = aG) and public spend key (B = bG). To create the actual public address, the following steps are performed²:

The pair of public keys are prepended with one network byte (the number 18, 0x12, for Monero). It looks like this: (network byte) + (32-byte public spend key) + (32-byte public view key).
These 65 bytes are hashed with Keccak-256.
The first four bytes of the hash from 2. are appended to 1., creating a 69-byte Public Address.
As a last step, this 69-byte string is converted to Base58. However, it's not done all at once like a Bitcoin address, but rather in 8-byte blocks. This gives us eight full-sized blocks and one 5-byte block. Eight bytes converts to 11 or less Base58 characters; if a particular block converts to <11 characters, the conversion pads it with "1"s (1 is 0 in Base58). Likewise, the final 5-byte block can convert to 7 or less Base58 digits; the conversion will ensure the result is 7 digits. Due to the conditional padding, the 69-byte string will always convert to 95 Base58 characters (8 * 11 + 7).
This 95-character result is the (obscenely long) CryptoNote public address!
If you're creating an integrated address, simply append the 64-bit payment ID to step 1 and continue; everything else is the same except for the lengths (77 bytes total, 106 Base58 digits) and the prepended byte (19, 0x13).

Given that MoneroAddress automatically calculates (and provides you with) the public address, you don't have to save the public view key and public spend key.

Luigi1111 wrote a somewhat easy to understand introduction to the cryptography of CryptoNote (and thus Monero), which can be found here.

Sources:

https://cryptonote.org/whitepaper.pdf
https://xmr.llcoins.net/addresstests.html


Transaction to sub-address missing in GUI wallet I'm relatively new to XMR, but am running a local node synced to the GUI (v0.12.3.0 with QT v5.7.0 on Mac). I successfully transferred coins into my primary address. I then noticed I could 'create new address,' which generated an 8xxx.... address. I then sent a txn from my primary address to this new one, however did not arrive.

The good news is that I ran the 'check transmission' using the Settings, and the transacted amount does 'prove' successfully, so I trust that this is only an issue with my GUI.

I followed the steps in this link:
I am missing (not seeing) a transaction to (in) the GUI (zero balance)

Still not seeing the sub address txn. Other ideas to find txns to sub addresses?

UPDATE: The original txn was for 0.4 XMR from the primary to the sub-address. That did appear in my 'History' list as sent txn. Now, that history list shows an amount of '0' sent for that txn, and the total balance is correct as though nothing was sent. Could the inbound have somehow netted out rather than being displayed as a separate 'inbound txn?' Of note, the Payment Proof Check correctly shows an outbound amount of 0.4.

Let's say you own a 4 XMR output that is stored in your wallet. When you send 3 XMR to Bob, you will spend that 4 XMR output, and you are creating a new 3 XMR output for Bob and a new 1 XMR change output for yourself.

This change output is not labelled as "change" in the transaction that is created. It's just an output that the wallet can see originated from you. This change does not get displayed as an incoming transaction of 1 XMR, because that would be confusing.

When you send funds from your wallet to a subaddress in the same wallet, what you're effectively doing is creating two change outputs for yourself. If you send 3 XMR to yourself, what you are doing is spending a 4 XMR output to create a 3 XMR output for yourself and a 1 XMR output for yourself. But since one of those outputs doesn't get labelled as "change" in the transaction structure, they both just look like change. So the wallet has to treat this as a 0 XMR transaction, because it can't determine anything other than that no funds were sent to a third party.


Hosting a Remote Node Are there specific parameters you need to use in order to host a remote node for the Wallet gui? how does one host a remote note?

You just need to run a publicly avaiable server (either with a public address, or with a NAT on a router/firewall) with a monerod running on it, that expose ports 18080 & 18081 over the Internet.

Biggest requirement will be the hard drive space to hold the copy of the blockchain.


How are coinbase transactions masked so that they fit the ringCT protocol? So for example say i have a mined transaction and the coinbase output address was; 9672929a20c97a29d8c8b4372cea6898b7d5442c197089d80f17e80a04984cb4

with an output of 3.6 XMR. Now i want to send from my address to another address. Will it just include my address along with a number of other decoys? Does this not get rid of anonymity? for example if i use 6 coinbase addresses along with a masked amount address in the ring signature, the receiver will be able to deduce the address i sent from by process of elimination despite the fact i was using a masked amount.

You are correct to point out that if you send exactly 3.5999749793 XMR (3.6 XMR - e.g. 0.000025020730 XMR tx fee) to your recipient, by referencing 11 outputs in your ring signature, one of which is exactly 3.6 XMR, they will have a high chance of guessing that you are spending the mined output.

This, however, is a somewhat contrived example. Most of the time, you're not spending the exact amount of a particular output (minus the fee) you have in your wallet. If you'd sent someone 3.5 XMR, then they would be oblivious. Only when the amount you send is the exact amount of the output (minus the fee) can they make a decent guess.

In practice the only time that this scenario would happen is if you're sweeping your entire wallet contents to a third party. In that scenario, for there to be a threat, you'd need to have only ever received coinbase outputs to your wallet, and never have made a single transaction from that wallet that spent any fraction of those coinbase outputs. If this scenario is applicable to you, you can easily solve this problem by sweeping the contents of your wallet to yourself before transferring funds to a third party.

Also note that even if the above scenario applies, coinbase outputs can be some of the most anonymous outputs to own in the first place. This is because when you mine the output, if you conceal your IP address when submitting the successfully mined block to the network, then there is no record with e.g. an exchange that will associate that output with your real world identity. Therefore knowledge of that one-time output address being spent will reveal nothing of any value.


How long do I have to wait for monero-wallet-cli to be synchronized again? So from time to time I use my monero-wallet-cli together with the monerod.
I start up monerod and wait until its up to date.
Then I start up the monero-wallet-cli but its empty.

Now I have to use the refresh command and wait about 10-20min for all blocks to be re-scanned.

I can't imagine that I have to wait that long before i have a balance and can move it from old confirmed blocks that I synced days before.

So how does the monero-wallet-cli auto refresh work?
Is there someway to only refresh new blocks or is monero-wallet-cli already doing that, if yes can I somehow see the progress?

I would love to just have the daemon run in the background or on a pc in my network and only open monero-wallet-cli when I need to make a transaction but having to wait for it to refresh all blocks takes just to long.

Do I miss something that could help me with the problem?

(related question: Why do I need to refresh my wallet?, Can simplewallet auto refresh?)

If you use exit in simplewallet the last refreshed block will be saved in the wallet cache, i.e., the wallet's memory. Thus, the next time you will refresh the wallet, it will start refreshing from the last block it has saved. In addition, in simplewallet you can find, and reiterating what mwdddgcs said:

  Always use "exit" command when closing simplewallet to save current session's state. Otherwise, you will possibly need to synchronize your wallet again. Your wallet key is NOT under risk anyway.

Autorefresh simply refreshes the wallet automatically (if it is opened) when the daemon retrieves a new block (or every few blocks). Autorefresh is set to 1 for new wallets, i.e., wallets that were created after 0.9.4 was released. For wallets that were created before 0.9.4 was released, you have to set autorefresh to 1 manually with the following command:

set auto-refresh 1

  if yes can i somehow see the progress?

Simplewallet depicts the process in numbers. That is, it will state 1100000/1116137 if it has 16137 more blocks to go.


Is there any connection between botnets PhotoMiner and Linux.Lady? Is there any known connection between PhotoMiner and Linux.Lady aside from them both mining Monero? They both also seem to target open ports, FTP server ports in the case of PhotoMiner and Redis database server ports in the case of Linux.Lady

Are there any estimates about the current cumulative Monero botnet hashrate?

Although its common practice for malware, they both try to locate and infect vulnerable machines and services (PhotoMiner: FTP servers, Linux.Lady: Redis servers), what caught my attention was this excerpt from the GuardiCore webpage with an analysis of the PhotoMiner malware:

  Recent variants of the malware have upgraded this attack by adding
  server-side code injection and attempting to install a Linux based
  miner.

They didn't went into detail about the Linux variant so I can't say how close it is to Linux.DownLoader.196 used by Linux.Lady. The Softpedia article also goes on about other possible similarities:

  Just like PhotoMiner, Linux.Lady comes with self-propagation features.
  The trojan includes a function that detects the IP address of the
  infected computer, scans the local network, and probes for other
  vulnerable Redis servers that don't feature a password on the admin
  account.

About how much of the hashrate is dominated by botnets I would say its minimal:

  My view is that botnets "dominating" mining, after working out
  reasonable assumptions about hash rate of the network and of bot
  nodes, would require many hundreds of thousands to millions of botnet
  nodes and if that were going on, it would have a huge visibility
  footprint. Since no such thing is visible, it almost certainly isn't
  happening. Smaller botnets exist.

source: https://www.reddit.com/r/Monero/comments/4rpcbl/are_there_any_known_significant_monero_miners/d53i6i7

And he was proven right.

As we can see malware like these (CPU-intensive) are spotted pretty quickly, but as there are a large amount of unprotected and unattended machines over the web your guess is as good as mine.


What is Monero's FloodXMR attack published in 2019 May and how can it be executed or defeated? The research paper here: https://eprint.iacr.org/2019/455 says Monero is prone to the FloodXMR attack.

What is it exactly and how can one execute it?
And how can one defend against it?

  Abstract: Monero is one of the first and most popular cryptocurrencies
  to address privacy issues of other crypto coins such as Bitcoin.
  Monero has a market capitalization of over one billion US dollars, and
  is ranked the 12th most valuable cryptocurrency on CoinMarketCap (17
  April 2019). This digital coin provides different mechanisms to
  protect its users, such as decoy keys or mixins to obfuscate
  transaction inputs. However, in spite of the efforts to protect
  Monero’s users privacy, transaction tracing attacks are still
  feasible. Our contribution is twofold. First, we propose and evaluate
  a new traceability attack, called transaction flooding attack
  (FloodXMR). Second, we present an analysis of thecosts required for an
  attacker to conduct FloodXMR. We show how an attacker can take
  advantage of Monero’s Bulletproof protocol, which reduces transaction
  fees, to flood the network with his own transactions and,
  consequently, remove mixins from transaction inputs. Assuming an
  attack timeframe of 12 months, our findings show that an attacker can
  trace up to 47.63% of the transaction inputs at a cost of just
  1,746.53 USD. Moreover, we show also that more than 90% of the inputs
  are affected by our tracing algorithm.

The "paper" you cite is full of inaccuracies and has been debunked, at length in other channels, such as this reddit thread.

That should be the end of it.

  What is it exactly and how can one execute it?

The general, and flawed, presumption is that an attacker can flood the network with cheap transactions. The aim of which being to track other users transactions due to a large percentage of decoys being owned by the attacker. Think about it like this: If a significant amount of the decoys being used in honest txs were owned by a single attacker, they're not very useful decoys are they! However, of the many inaccuracies in the paper, the cost analysis is fundamentally flawed. And as @ArticMine puts it so eloquently: "...this paper fails to account for significant anti-spam measures that are present in Monero.".

In short, it is simply not feasible to execute.

  And how can one defend against it?

The "paper" doesn't present a feasible attack; the protocol already defends against such a proposed attack.

Lastly, and perhaps most relevant, @dEBRUYNE's quote: "...anyone can upload a paper to arXiv. They are not checked for factual correctness.".


Wrong monero wallet adress (claymore, nanopool) I wonder what I'm doing wrong when I try to mine monero with claymore and nanopool. See pic below.

I've written in my base adress and my payment id. Is there something I do not understand?

Make sure you have also updated the epools.txt file with your address details. This resolved the error for me.


Clarification on updating to v0.12 So I'm trying to update to the newest version of the wallet.

I found these instructions and am trying to follow them.

I'm trying to do it thru the gui but I'll do whatever is easier.

Download the new binaries (the .zip file (Windows) or the tar.bz2 file (Mac OS X and Linux)) from the official website or Github.

Extract the new binaries to a new directory of your liking.

Copy over the wallet files from the old directory (the one that contains the v0.11.0.0 or v0.11.1.0 binaries).

So in this last step I don't get what the binary files are.  All I see in my monero folder is dll files, some exe files and a bat file, then some folders.  Please, I'm confused. What do I need to do exactly?

I have like k4 xmr caught up at an exchange because of this.

After googling binary file its the exe file right?  I want to be 100% sure im doing this.  I just copy and overwrite the old exe files with the new ones?  I have my priv key and stuff if i need to restore my wallet but id rather not have to resynch it again.

Ok so i copied over all the exe files into my monero folder i did the pop blocks cmd twice cause i thought the base number per day was 600 not 800 so i did 3600 then 4800.  I got the dameon running plus the cmd line i used for the pop blocks.  Its stuck at 1542123 and its not advancing...

i guess im slowly figuring this out on my own i restarted monerod and its synching past the stuck block now

The binary files are the .exe files, and I guess the .dll files too. The ones from 0.11.1.0 are wholly obsoleted by the ones in 0.12.0.0, and you should use only the ones from 0.12.0.0.

The wallet files are FOO and FOO.keys, with FOO being whatever you named your wallet. You don't necessarily have to copy them, if you give the path to them when loading monero-wallet-cli, ie:

./monero-wallet-cli --wallet-file /home/yourlogin/monero/walletname

Replace yourlogin and walletname with the right names. And set the path to wherever the wallet files are.

I think the instructions tell you to copy because they assume you put your wallet in the same directory as the binaries, which you might or might not have done.

In any case, if you delete any directory, make sure you didn't put your wallet files in there first.


Where is the encrypted Monero amounts in a transaction? Looking at a monero transaction, I can't see any amounts. Where is this encrypted exactly? Take for example: https://moneroblocks.info/tx/9adbcfa8fe9011c2451b9636d3b68312047e93ec4477bf894687fb182a93a4c2

I can see the fee was: 0.000161200000 XMR

But all the amounts are hidden. Where in the transaction data is this hidden?

The encrypted/masked amounts are stored in the tx ecdhInfo field.

If you want to view these masked amounts on an explorer:

Visit: https://xmrchain.net/tx/9adbcfa8fe9011c2451b9636d3b68312047e93ec4477bf894687fb182a93a4c2/1
Scroll to the bottom and click "Show JSON representation of tx".

If you want to view in a daemon:

print_tx 9adbcfa8fe9011c2451b9636d3b68312047e93ec4477bf894687fb182a93a4c2 +json
...
"ecdhInfo": [ {
    "amount": "5ba540ef53551f4b"                                                                                }, {
    "amount": "10779889c631fda5"
  }],


What is the monero-wallet-rpc/deamon-rpc? What are they used for?
What does it mean http request? Does that mean it gets information directly from a website?

monero-wallet-rpc is one of the command-line applications that ships with Monero. It enables developers to make HTTP based requests to interact with a Monero wallet. An example could be to implement the receiving of payments in XMR on an ecommerce site.

The other RPC is the daemon RPC which is part of the main monerod application. This enables developers to make HTTP based requests to interact with a node. An example could be someone wishing to develop a Monero blockchain explorer website.

In simplistic terms, you can think of both these apps as web servers, but instead of serving a web page (like a normal web server does), they return data that can be parsed and used in another application. The data they return is JSON data. Both of these RPC interfaces are only of any use to developers and are not relevant to normal users of Monero.

If you are interested in learning more, here are some documentation links:

Monero Daemon RPC - https://ww.getmonero.org/resources/developer-guides/daemon-rpc.html
Monero Wallet RPC - https://ww.getmonero.org/resources/developer-guides/wallet-rpc.html
JSON - https://en.wikipedia.org/wiki/JSON
RPC - https://en.wikipedia.org/wiki/Remote_procedure_call
HTTP - https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol


How to join the Monero Slack? I figured out the website is https://monero.slack.com. Signing up isn't very obvious for me. On the home page, it says something about "find your team". How does this all work?

PM u/needmoney90 or u/SamsungGalaxyPlayer on Reddit with your e-mail address, or ping them on IRC.


Is the raw Monero blockchain file different for Linux, Windows, or Mac? Is the raw Monero blockchain file different for Linux, Windows, or Mac?

Where can I download it?

The .raw file is "raw" as the name implies, meaning it should be platform-agnostic, ie, the data inside is the bare minimum, unoptimized, blockchain data, as it flies over the network, and nothing else. Think of it as just copying and pasting block data one on top of another and saving this into a file. The .raw file, then, is just a collection of all the blocks in the correct sequence.

Even before v.0.10.0 you could import it using the tools available.

When importing, the wallet needs to check it for consistency, by validating each block in the .raw file against concensus rules, because it can't know whether it had been constructed in the correct way, so it needs to check the signatures, PoW etc., unless you exported the .raw yourself or got it from a trusted source.

You can download it here. The simple structure means also that if it gets updated on the site, you can add the difference on top of the file you had downloaded in the past, without having to download from scratch. I did this using the wget tool: wget --continue --output-document=blockchain.raw https://downloads.getmonero.org/blockchain.raw


Transaction Hash with only a Confirmation Months ago I transferred Monero to a Monero GUI Wallet. It never arrived. I only have a Confirmation # but not Hash.  How can I get the Hash and/or recover/see the coins in my wallet?

Confirmations are number of blocks since the tx was mined. From that number, you can deduce the block the tx is in. There will likely be several transactions though, so yours will be one of them.
A typical reason for monero not appearing in a wallet is that wallet having an incorrect setting for "refresh-from-block-height". This causes the wallet to skip transactions it thinks are too old to be yours. To fix this, run monero-wallet-cli on the wallet, and type:

set refresh-from-block-height 0
rescan_bc

Then quit monero-wallet-cli.


Monero forked into 4 separate chains. How can one claim them, and where can one dump them? How does one claim all these forked coins from Monero's hardfork of April 2018 in a safe way? And which exchanges support these coins to dump them on?

First off, there are not 4 separate chains. There are only 2 chains: the official Monero, and a common chain shared by Monero Classic, MoneroC, Monero 0, and Monero Original. The last four are simply rebranded versions of pre-network-upgrade official Monero. Since they operate on the same blockchain, spending (receiving) coins with (say) Monero Classic will have the same effect as spending with Monero 0.

  How does one claim all these forked coins from Monero's hardfork of April 2018 in a safe way?

Depends on what you call safe. Your fund on both forks will not be gone as long as (1) the forked coins' binary is not malicious, and (2) there is no replay attack when you spend your coin in one fork.

For (1), the safest is to compare the source code of any of the four "brands" with Monero's Helium Hydra (v0.11.1) source code, make sure nothing nasty is present, and compile it yourself. (This implies trust on Helium Hydra source code.) If that sounds too much work, you can try using Monero's binary for Helium Hydra, and change the seed nodes to be the forked coin's nodes. However, there's no guarantee that the old Monero binary will still work after network upgrade. It will certainly not work if any of the four "brands" undergo a network upgrade.

For (2), simply spend your coins with at least one post-fork image inside the ring. It will be automatically rejected when attacker replay it on another chain. Alternatively, spend the fork coin first with default ringsize, which is below Monero's new ringsize minimum.

If you are talking about privacy, have a look at my previous question. The two answers there basically said it all. Not claiming the forked coins is the safest. But if you have strong reasons to do so, you still have a chance to preserve part of your privacy. Make sure to spend the coins using the same ring. Note that since Monero Lithium Luna (v0.12.0) has a higher minimum/default ring size, you will be using a non-default ring size in the fork. Note also that this strategy is incompatible with the mitigation against replay attack above. I'll leave the work of suggesting a "safer" operation to a real expert.

  And which exchanges support these coins to dump them on?

CoinEx and HitBTC (unsurprisingly) has rewarded Monero holders with the fork coins. CoinEx uses the name Monero Classic (XMC), while HitBTC uses Monero Original (XMO).

(Exercise left to readers: If I bought XMC from CoinEx, can I withdraw it to HitBTC's XMO deposit address?)

If you really have a bullish view on the forked coin, I recommend against claiming the fork coin. Instead, sell your Monero for BTC or USD(T), then buy XMC (aka XMO). Currently XMRUSDT is 170 while XMCUSDT is 3.66. With a price difference of 46x, you just need to sell ~2% of your Monero to get the same amount of Monero Classic, without compromising your, or other people's, privacy.

Remember, when you use the coins in both chains, you are automatically causing damage to everyone's privacy. From an economic point of view, this will devalue both coins and, ultimately, your fortune.


Why does my monerod always consume all the RAM? I have a 24/7 full-node of 10.3.1 on win7 x64

It runs with --restricted-rpc --block-sync-size 10 --rpc-bind-ip xx.xx.xx.xx --confirm-external-bind --data-dir C:\Users\user\Documents\XMRdb --add-priority-node xx.xx.xx.xx:18080  --limit-rate-up 1000

It works well at start, but the RAM consumption always gets bigger and bigger after a few hours. In the end, it eats up all my 16 GB RAM.

I tried to change block-sync-size back to 200, limit-rate-up to 50. But no help.

The status:
Height: 1351515/1351515 (100.0%) on mainnet, not mining, net hash 119.56 MH/s, v
5, up to date, 8(out)+35(in) connections, uptime 1d 22h 25m 24s

How can I limit the RAM consumption?

It eats up all the RAM because it uses a very large memory mapped database (up to about 20 GB for now), and nothing else seems to need the RAM. If you really want to limit it, you could check ulimit (a bash internal command), which allows you to limit memory consumption:

$ ulimit -a
  [...]
  virtual memory          (kbytes, -v) unlimited

eg, to limit usage to a bit less than 5 GB: ulimit -v 5000000

Note that if other programs need the RAM, they'll just take it, LMDB won't hold on to it (within reason). Unused RAM is not helping anyone, after al.


Minergate CLI mines only XMC but not Monero XMR I downloaded the minergate CLI and I use the command for starting it:

./minergate-cli --user myemail@email.com --xmr

I also tried

./minergate-cli -user myemail@email.com -xmr

And did this on 2 different laptops, no matter which currency I put in the command, from the GUI and the website I can see that the active miners are only on monero classic, xmc and no other. I want to mine monero (XMR) using the cli, am I doing something wrong? With the GUI works perfectly, but I think that the terminal would be faster. Not sure what I am doing wrong, I followed their tutorial and downloaded the latest version.

MinerGate-cli-4.04-Mac Thanks

Don't use Minergate, it's a scam.
Try XMrig https://xmrig.com/ or xmr-stak https://github.com/fireice-uk/xmr-stak/.
They are both good, if you still need assistance post here.


Why are pools not mining large blocks? As I understand, Monero has an adaptive block size that allows the block size to grow as needed, but also allow miners to mine blocks larger than the max block size, though giving the miner a penalty on the block reward.

So, in the last days we saw the transactions exploding, and yesterday we had more than 900 transactions on the txpool. Why don't miners just mine all the tranasctions that are on the txpool at once when it is more profitable to just collect the fees of all transactions and drop the block reward ?

Because it's not economic for the pool or miner. There's also a "hard" cap (which goes up with median) at 2x the median. If a miner mines a too big of a block, he loses some base block reward (emission) and for it to be economic to him, the fees must be high enough to compensate and earn a little more.

Each wallet fee level corresponds to a % increase incentive for the miner. Bigger the fees, faster the increase. Bigger the increase, cheaper the fees =)

Low priority (min fee) - 1x - 0.6% increase is the "sweet spot" (economic up to 1.2%, after that it's negative earnings)

Normal priority (default fee) - 4x - 2.4% increase is the "sweet spot" (economic up to 4.8%, after that it's negative earnings)

High priority 20x - 12% increase is the "sweet spot" (economic up to 24%, after that it's negative earnings)

Ultra priority 166x - 100% increase is the "sweet spot". Can't make a bigger block than this, anyway :)

When a miner fills the block from highest to smallest fee, it will be the fee of last TX to get into a block which determines the optimal increase. So, it's not just enough to have 1TX in the pool to hasten an increase. There must be many of those, enough to make 100 blocks full of high-fee TX-es to lift the median quickly.

This is why a huge backlog can never develop.


What's the relationship between the pool's advertised difficulty and the target of the jobs it sends out? I'm trying to do CPU mining as part of a pool that I found here -- https://xmrpool.net/#/help/getting_started .  As I have crappy hardware, I thought I'd try the easiest setting.  The site says difficulty 1000 if you connect to port 3333 of one of their servers.  So this is what I did, and then I started getting jobs.  However, I noticed the target for those jobs seems greater than 1000, for example

{"jsonrpc":"2.0","method":"job","params":{"blob":"0707d7dadfd80571a39f4758e3a55abed794760f384b28f2fbbdee383e7f094e098b3d4af1031d000000004ae66605e2ebfed531099edc0ce85d6322218fcd7f540d39f58ff3bb37306bbc02","job_id":"oWTFOgHaBkkbFDaJ6mVfQ2cdRi9A","target":"37894100","id":"fb89882e-5b3f-4bf9-a4bc-d07aaf4e8655"}}

Even though this "target" value is in hex, when unraveled, the value is greater than 1000 (the above is decimal value 4294967 if I'm reading it correctly).  What am I missing here?  Or is the pool sending things of much harder difficulty than what is advertised?

The port used defines the starting difficulty.

From the pool doc you referenced:

The Port is used in conjunciton with the url and is used to specify the starting difficulty.

As soon as you submit a result, the pool updates your difficulty for the next job it sends you based on how long it took you to hash the last (or to be more accurate, it averages your previously submitted job/hash times and adjusts based on block time). This is to ensure the server sends you jobs with a difficulty that can be expected to be hashed within the block time window and not overload the server sending lots of small difficulty jobs to miners that can be expected to hash higher difficulty per job.

Most pools allow you to specify a fixed difficulty. With your pool, if you wanted a fixed difficulty of 3500, this is done by appending +3500 to your wallet address (username). Example (again from the doc you referenced):

Username : 43To46Y9AxNFkY5rsMQaLwbRNaxLZVvc4LJZt7Cx9Dt23frL6aut2uC3PsMiwGY5C5fKLSn6sWyoxRQTK1dhdBpKAX8bsUW+3500


How does the wallet software choose mixins (decoy outputs)? Is the choice of mixins chosen randomly or chosen according to size, date of transaction, or otherwise?

Currently, it's chosen randomly. Half the fake outputs are chosen over the whole chain, and half over the last 1.8 days. In both cases, a triangular distribution is used over the possible fake outputs based on their order of appearance on the blockchain. See wallet2::get_outs in src/wallet/wallet2.cpp.

There is a patch on Github to switch to a single set, using a gamma distribution over the possible fake outputs' age, as found to be close to the real usage distribution in a paper from Miller et al. See https://github.com/monero-project/monero/pull/3528


How do I make a monerod RPC call in Python? (e.g. /get_transactions) I'm not very experienced with Python and I'm pretty sure this is just a syntax issue.

I'm trying to use the monerod daemon RPC /get_transactions method from here.

I have no problem getting the examples here to work and this (non-json) RPC call works fine as well:

import requests
import json
def main():
    response = requests.post("http://localhost:18081/getheight")
    r=response.json()
    print(r)
if __name__ == "__main__":
    main()

However, whenever I try to use /get_transactions like this:

    transactionList = ["d6e48158472848e6687173a91ae6eebfa3e1d778e65252ee99d7515d63090408"]
    PARAMS = {'txs_hashes' : transactionList ,
              'decode_as_json' : True}
    myTransactions = requests.post("http://localhost:18081/get_transactions", params = PARAMS)
    print(myTransactions)

It always returns an error such as:

<Response [404]>

I'm pretty sure I'm just passing it the parameters incorrectly but I've tried a bunch of different permutations and checked the requests documentation and still can't get it to work.

Thanks!

You are so very close.

Just change params = PARAMS to json = PARAMS and it will work.

From the requests documentation:

  Using the json parameter in the request will change the Content-Type in the header to application/json.

And to get the response text, use:

print(myTransactions.text)

Or to get the response as a json object:

print(myTransactions.json())


How to sweep coins from an existing monero address if you have all the keys? I have a bunch of xmr addresses with all the keys. How can I sweep the coins from these addresses into my own? Which wallet support this feature?

You can't. Need to restore each wallet separately and sweep one by one.

How do I restore a wallet with seed?

If I saved my view key and spend key can I recover my wallet if my mnemonic seed is lost?


How were Monero elliptic curve constants chosen? In the cryptonote paper review, there was a mention about not knowing how the constants were calculated, is there anyway to verify these constants are 'safe' or change them to something 'better'? please enlighten me :DD

Although it wasn't clear to the reviewers at the time, the constants are standard ed25519 constants from DJB et al. You can read about it here, especially section "Choice of curve" starting on the bottom of page 7.


code=-28, message=This wallet is already multisig i follow the tutorial to create multisig;

https://monero.stackexchange.com/questions/5646/how-to-use-monero-multisignature-wallets-2-2-2-3

when i create another multisig address , the wallet rpc return error.

id=0, error={code=-28, message=This wallet is already multisig}

i want create many different multisig address to provider merchant use.

what should i do, what the best practice?

You're apparently trying to switch a multisig wallet to multisig. Which it already is. That's what it's telling you. Start with a non multisig wallet to make it multisig. You have nothing to do turn a multisig wallet multisig, since it already is.


GUI / wallet stuck on block 1400001 I reinstalled my monero wallet hoping it would fix the problem, but every time i start my wallet it's stuck at 58928 blocks to sync up. My wallet had no problems syncing up in the past and no mather how long i keep the wallet open it won't sync. the node reports this problem: (i don't know if this information helps?) But basically my wallet won't work if it doesn't sync up.

INFO    global  contrib/epee/src/mlog.cpp:145   New log categories: *:WARNING,net:FATAL,net.p2p:FATAL,net.cn:FATAL,global:INFO,verify:FATAL,stacktrace:INFO
Height: 1400001/1458929 (96.0%) on mainnet, not mining, net hash 259.32 MH/s, v5, update needed, 7(out)+0(in) connections, uptime 0d 10h 40m 31s

There was a "hard" upgrade at that height, older clients will not sync.

Get the latest version at: https://getmonero.org/downloads/

and run it, it will find the old blockchain and simply continue.

If you're still stuck, you can delete last few blocks from your database and try from there. Close your node, run monero-blockchain-import --pop-blocks 5 (it's a separate executable in the package) and restart the node. It will then continue from 1399996 and hopefully go past the upgrade block.


Show header in show_transfers How can I enable header in show_transfers command? It's printing a lot of columns without any info.

Is it possible to show names of those columns like this?

txid     | Height  |  Timestamp  | Amount | PaymentID  | Change | Fee      | Destinations Note
-----------------------------------------------------------------------------------------------
<b06xxx>   1403333    2017-10-10   1.000    fAxxxx       11       0.004400   fsfsdf

You can't.

Spam because you can't post with so few characters even though it is a correct answer.


How to execute HTTP request to daemon's *.bin endpoint like http://localhost/getblocks.bin I am studying the wallet code and I found that it executes http://localhost/getblocks.bin request to the monero daemon. However when I try to execute this request in a browser (using GET method) it returns 404. I was just trying to see what the output looks like.

I am able to call all the other endpoints just *.bin gives me trouble.

What is so special about them? How I am supposed to build my HTTP request in order to succeed?

Firstly, all of the .bin methods are binary methods (as the suffix alludes to). The input and output parameters are binary, serialized objects as defined in this file

These methods are generally for more specialized use cases. In almost all normal use cases, the JSON methods should suffice.

For getblocks.bin, there is some documentation here which details the input and output parameters.


Multisig requires new wallet or new address? I'm following the information here but hoping to save some troubleshooting time. It says "First, the wallet to be converted to multisig must be empty. It is best to use a brand-new walllet for the purpose." Assuming that I need to setup many multisig addresses, can I just use the create_address method and then convert that to multisig?

I want to be able to have multiple multisig and non-multisig addresses for different purposes. I'm using the wallet RPC daemon.

Each multisig wallet can only have a single address for incoming funds. This address will be different from any of the usual addresses created by a wallet prior to multisig conversion.

You cannot know the multisig address until you have completed the multisig wallet make_multisig process (in the case of N/N wallets) or have completed the make_multisig and finalize_multisig process (in the case of M/N threshold wallets).

Therefore you cannot use create_address method first to create any multisig addresses. You can use the create_address method to create valid addresses for that wallet's original seed (prior to multisig conversion), but the wallet will no longer keep track of or scan for incoming funds from these old addresses after you convert it to a multisig wallet. You should therefore not attempt to use the same wallet file for both multisig and non-multisig use.


How to distinguish between the amount of the real input amount and the decoys Since every transaction has multiple decoys from previous transactions that are connected to it (while only one is real), how does the user link the amount that is linked to the "real" transaction?

EDIT: What is the math behind discarding the unnecessary "decoy" values, when checking the Pedersen commitment (of our output and the real inputs).

Thanks.

Since every transaction has multiple decoys from previous transactions that are connected to it (while only one is real), how does the user link the amount that is linked to the "real" transaction?

Firstly, all the decoy outputs are "real", they are real outputs created by previous transactions.

Second, the whole point of the decoys is to not be able to determine which is the real output being spent. The signer is proving they own one in each set/ring, but not which.

Third, the amounts for the generated outputs are encrypted in the transaction ecdhInfo field. Thus to obtain the decoy encrypted amounts, you grab them from the ecdhInfo of the transactions that created those outputs.

  EDIT: What is the math behind discarding the unnecessary "decoy" values, when checking the Pedersen commitment (of our output and the real inputs).

There is no "discarding the unnecessary "decoy" values". I suggest reading 5.4 in Zero to Monero which goes into greater detail, but to summarize: The input commitments included in the tx, are actually pseudo output commitments. These pseudo output commitments use the same original amounts but use different binding factors. As the sender knows the difference between the commitments, they can use this as the commitment to zero and sign.

Thus

     C = xG + aH
    C' = x'G + aH
C - C' = (x - x')G
     z = x - x'

Where x' is a new binding factor, C' is a pseudo output commitment and z being the private key of our commitment to zero.

With regards to your comment of "checking the Pedersen commitment", I presume you are referring to checking the sum of inputs and outputs is zero. For this, one is checking the sum of the pseudo output commitments (the inputs) minus the sum of the tx output commitments.

Of course one also needs to ensure none of the values are negative, and this is the purpose of the range proof (see Zero to Monero 5.5).


What is cloud mining? Okay I am mining with coinpot. I am just a low user I guess you could say. My name is Seth and I just started into this mining game as I call it. I was just wondering if there is some kind of resource that explains mining in ENGLISH!! I have trouble with all the terms and stuff. Another thing if anyone can give pointers about coinpot that would be great as well.

Cloud mining can mean a couple of things. 1) mining using a cloud server 2) browser based mining - e.g. javascript mining in a web page.

Coinpot falls into the latter e.g. browser based mining. It also claims tiny amounts of real cryptocurrencies from public faucets (which are for gifting small amounts of a currency for user adoption). You'd do better financially by wandering the streets looking for cents than using Coinpot IMO.

If you want to get into mining, download a miner such as xmr-stak and mine to one of the many mining pools.


Explain like I'm 5: How does MoneroDice work? I've read how it is provably fair. I've also read that it "rolls" a number in the range: (0 <= X <= 99.99).

Please explain how the multiplier, return on win, and over/under are calculated to give a person an understanding of what one is doing when placing a bet.

return on win = (bet amount)(multiplier)

chance of winning = 99/multiplier

(If one rolls more than the chance of winning)
over = (100 - chance of winning)
(If one rolls less than the chance of winning)
under = (100 - over)


Are mobile wallets downloading the whole blockchain as the regular wallets? I was wondering: How on earth is a mobile wallet supposed to work if it has to download the whole blockchain on the device (39+GiB)?

Is there an option:

to use external monerod, i.e. remote one on home PC or in the "cloud"?
to download just the last part of the blockchain, i.e. some sort of "lite" wallet?

I'll talk about monero-wallet-cli and monero-wallet-gui, since I don't know about other wallets.

It does not download the whole blockchain from the daemon. There are two things that get cut out:

first, all blocks up to (a little bit before) the wallet creation height are not downloaded at all.
second, for those blocks which are downloaded, tx signatures and related things are not downloaded

If you're creating a new wallet, this means about 1.4 million blocks aren't downloaded. For those later blocks which get downloaded, most of the block size is taken by range proofs, which are part of the data that's not downloaded.

So, in short, monero-wallet-cli does not download anywhere near the entire blockchain.

Now, monerod may be running anywhere you want. Either on the same machine/VM as the wallet, or elsewhere. If you're using the wallet on a phone, then you're probably going to run monerod either on a home machine, or a VPS, and connect your wallet to it. monerod will obviously get the whole blockchain, so you get the benefit of checking it for validity.

Last, MyMonero is being changed to that anyone will be able to run a mymonero node (at home or on a VPS, again), and you'll connect to that from your phone wallet. This will be even lighter than the current wallets, since only your own transactions (to/from you) will be downloaded, as the scanning will be offloaded to the MyMonero style server you'd be running. This is a work in progress that is not yet ready, however.


Mining for rpc set number of threads In the monero-wallet-cli having connected to a public node that accepts or requires payment via mining how does one adjust the number of threads used for the mining payment.

For example, when you run the help command after starting your wallet you can see:

start_mining [<number_of_threads>] [bg_mining] [ignore_battery]

But for the rpc mining there is no [] parameter:

start_mining_for_rpc

It seems that start_mining_for_rpc defaults to 1 thread. I believe server hosts may want to increase the payment and running on multiple threads would allow for that.

Is there any non-obvious way to increase the rpc mining thread count?

There is currently no way to mine with multiple threads in monero-wallet-cli for the mine-for-RPC system.


What is "Janus"-linking? How did it get its name?
The attacker can't actually steal Monero, right?
It relates to a clever use of cryptography involved in subaddresses? How so?
Can it be mitigated?

(The Janus attack referred to in this question is documented here: https://web.getmonero.org/2019/10/18/subaddress-janus.html)

We were looking for a character from Greek mythology that had multiple identities. This is because the Janus attack allows an incoming transaction to appear to be addressed to one wallet subaddress, while having actually been addressed to a different wallet subaddress during transaction construction. Sarang Noether of the Monero Research Lab suggested Janus, who was a "two-faced god".
No, they can only attempt to trick the recipient into revealing control of two different subaddresses.
The link at the top of this answer documents the elliptic curve algebra. In plain English, the subaddress system is designed to allow a wallet to efficiently scan for incoming outputs to multiple subaddresses within the same wallet (i.e. where the subaddresses share the same private view key). A side-effect of the way in which the subaddress system was designed to allow this efficient scanning is that the wallet will trust the sender to inform the wallet of the particular destination subaddress. This trust was an oversight during the design of the subaddress system.
Yes, there are several ways to mitigate it, but these have not been decided upon yet. One way is for an update to the transaction construction to include a signature that proves the transaction was properly constructed for a particular subaddress destination. Since this modification will add perhaps 64 bytes to the size of a transaction, there will be careful consideration of a mitigation to ensure it is done in the most space-efficient way possible.


monerod crashes after several minutes with no errors I'm trying to run monerod on a VPS and after several minutes of working correctly the program just stops. There are no logs which indicate any errors or warnings in .bitmonero/bitmonero.log even with log-level 4. I've tried to go through my system logs and there's nothing I can find that indicates what is happening either. The only hints I have is sometimes I get the following message when running "./monerod status" right before the moment it crashes:

bash: fork: Cannot allocate memory

It seems pretty straightforward that there's a memory problem, but there are no logs indicating this or the cause. Ulimit reveals that each process can use unlimited virtual memory, so that's not the problem. I have 3 GB of ram and 2 GB of swap space. When running top or htop neither indicate that much memory is being used at all. The df tool shows that I have 23GB of hard drive space remaining, as well, so it's not as if I've run out of storage. The free tool suggests that I have about 4 GB of memory available even when monerod is running before it crashes. I've updated my operating system and restarted it with no changes in behavior. Changing the number of threads spawned and input/output connections can change the timing but ultimately monerod will still fail. On this VPS I don't have access to logs like /var/log/kern.log, unfortunately.

If it helps, I'm using Ubuntu 16.04.4 LTS.

Anyway, I've really exhausted every option I could find. None of the logs available seems to indicate that there is anything that is failing. This problem is stopping me from running a monero node altogether.

So I figured out what was going on.

My environment was a VPS and the virtualization environment was from OpenVZ, for which all users share a kernel. So access to these kernel logs were disabled for any individual users. I had to contact the VPS administrators and inside the kernel logs monerod was exceeding the limits of kmemsize, so they changed it to unlimited.

It also turned out that the file /proc/user_beancounters had information that would have revealed this. it contains information for container limits, one of which was kmemsize. There's a column showing the number of times a program was killed due to exceeding these limits. Anyway, that number was pretty high, suggesting kmemsize was the problem as well.

Now monerod works fine.


Coins Not Appearing (GUI Wallet) - Transaction on Blockchain, Wallet Synced, Cache Deleted Withdrew coins from Bter.com exchange to Monero Wallet GUI, but the balance not appearing in Monero Wallet GUI 11.

Transaction on Blockchain
Wallet is synced.
Deleted Wallet Cache

My balance still shows 0.

Help!

Try mymonero first, maybe your local data was not updated.

国人？


Can monero-wallet-cli tell me the one-time public keys (outputs) that belong(ed) to it? When viewing the data on a block explorer, how can I be sure which outputs are mine?  Due to Monero using stealth addresses, the block explorers show all the one-time public keys (which are the outputs owned by the address).  I would think my wallet would/could save the one-time public keys upon finding the ones that belonged to me.  I can't figure out how to do it, or if it can do it.

By the way, I'm curious about the inputs to a transaction and the outputs.  For example, the person/wallet who sent me Monero effectively created an output belonging to me, and that output is identified by its one-time public key.  Can my wallet spit out the one-time public key, so I can look at it on a block explorer?

Or, looking at it another way, what if I wait to spend an output, and I want to identify the one-time public key on the blockchain that's the real one I'm spending as an input to the transaction?  Is there another way to accomplish identifying my one-time public key input besides running show_transfers, figuring out which output was spent, and then tying the block heights together?  (Bear in mind, this method may become highly difficult/cumbersome in wallets with long histories.)

In short, how do I make monero-wallet-cli produce a list of the one-time public keys that it owns (ideally spent and unspent)?

You can see the public keys for your outputs with:

incoming_transfers verbose

For spent ones, or unspent ones, respectively:

incoming_transfers verbose unavailable or incoming_transfers verbose available

Verbose mode will also give you the key image for each output.


Is there a rich list of addresses of who owns how much of the Monero supply? Is there a rich list of Monero addresses to see how distributed Monero is? Which address has the most Monero?

There is one: http://moneroblocks.info/richlist
Spoiler: it's empty. Quoting the site:

C'mon man. Really?
I thought you knew...
Monero is fundamentally
private
Really. It is.
It is based in the Cryptonote protocol. It uses unique one-time
addresses for each transaction so that only the receiver knows where
the money went. This is good, believe me.
And, as if that wasn't enough, it signs the inputs with ring
signatures. And this is great because that signature only proves that
someone in that group created it. That means only the sender knows
where the money came from.


Just mined with an old version v0.13.0.4 and upgraded to v0.14.0.2. Reward now missing I am new to this and am experimenting. I am using Debian Sid and apt-get install installed the v013.0.4 version.  After synchronizing, I started to mine using the monero-wallet-cli command start_mining. After about 4 hours I mined a block.

Probably very very lucky.

I then upgraded to v0.14.0.2 (compiled from source) and then my reward from the previous version mined disappeared. I then restored a backup version of my wallet, but it shows 0 coins after the resync.

Did I lose my coins or never really got them?

0.13.0.4 can not understand the current consensus rules, so it's essentially playing in its own abandoned playpen. You never found any Monero. It's a bit similar to participating in a bike race, taking a wrong turn and somehow ending up on last week's bike race's circuit and going over that finish line that's still chalked on the ground. You did not win that race either.


Is the median blocksize measured over the last 100 or 720 blocks? I have seen both 100 and 720 being referenced as the proper number for determining median block-size for the purpose of calculating miner penalties. Which one is correct?

Is Monero changed its code from 100 to 720 (or the other way around) at some point what was the reason for it?

It is 100 blocks (CRYPYONOTE_REWARD_BLOCKS_WINDOW in src/cryptonote_config.h). I think I've confused this with the difficulty window before, which is 720. I don't remember it changing.


Syncronisation problem on Geekbox running node from SD card I have a Geekbox (geekbox.tv) and I'm trying to run a full node on it. I installed the Lubuntu 14.04 only OS (removed the Android partitions), but considering that only gives 14GB of hard drive space, I am attempting to run it from an SD card. I am using the ARMv7 CLI.

(even though the Geekbox is 64-bit, it won't run the ARMv8 build ('unable to execute: no such file or directory'), but runs the v7 build...albeit with the below problem)

I formatted the SD card as exFAT and copied the up to date data.mdb from my other computer (Mac).

The Geekbox is a bit slow, but when I run monerod, the daemon goes through the process and gets to the sync feedback. The node then just steadily falls back ("your node is 28 blocks behind", "your node is 29 blocks behind", etc).

I don't know how to fix this. I have heard that others have successfully run a node on a Geekbox, so I wonder if its either:

requiring hardware optimisation - can I speed up the Geekbox somehow?
a permissions problem - I have read that the problem might be with the exFAT formatted SD card, but haven't found solutions.
probably something else...

Having said that, here are some of the errors churned out on log level 1:

2017-04-11 10:48:10.640 [P2P0]  ERROR   verify  src/cryptonote_core/blockchain.cpp:3185 Block with id: <c3e7ba78f99e10ed95c90da247e148e8db03115d3bd2a52c10b278595026e16a>
does not have enough proof of work: <c3993773c21d03ef2fe3b8b24ec3bd603aa4da49bc1a96a037857f9daf87a8b1>
unexpected difficulty: 9857023396

2017-04-11 10:48:15.618 [P2P9]  ERROR   net.p2p src/p2p/net_node.inl:1504   [37.59.51.212:28080 OUT] COMMAND_REQUEST_SUPPORT_FLAGS invoke failed. (-4, LEVIN_ERROR_CONNECTION_TIMEDOUT)

2017-04-11 10:50:06.944 [P2P9]  WARN    net.p2p src/p2p/net_node.inl:1442   [0.0.0.0:0 OUT] back ping connect failed to 149.56.187.7:18080

But when I run 'status', I have both incoming and outgoing connections.

I have tried syncing from scratch, which works, but would take weeks due to how slow it was going! I also exported the blockchain.raw and imported, but it threw some errors at the end and started syncing from the start of the blockchain:

2017-04-11 10:34:44.854         f758b000    FATAL   bcutil  src/blockchain_utilities/blockchain_import.cpp:505  Failed to add block to blockchain, verification failed, height = 4
2017-04-11 10:34:44.856         f758b000    FATAL   bcutil  src/blockchain_utilities/blockchain_import.cpp:506  skipping rest of file

I should also point out that I'm a Linux noob. Any help or suggestions would be great :)

It sounds like your 32 bit Monero build is invalid, it is computing incorrect hashes and failing to accept valid blocks. If you got this from the official download site, please submit an issue on Github about this.

You are wasting power running a 32 bit OS. I'm currently using this 64 bit Debian install: http://forum.geekbox.tv/viewtopic.php?f=12&t=3284


failed to load wallet I get this error when i try to open my wallet:
     $ ./monero-wallet-cli --wallet-file home/samuel/wallet/wallet2
     Monero 'Wolfram Warptangent' (v0.10.2.0-38b9226)
     Logging to ./monero-wallet-cli.log
     Wallet password: *****************
     Error: failed to load wallet: file not found "home/samuel/wallet/wallet2.keys

What am I doing wrong here?
Thanks for the help!

Absolute paths in linux start with /. So it seems you are missing /in your path. It should be /home/samuel/wallet/wallet2


Where can I learn about the cryptography used in Monero? What papers should I read to understand the mathematics behind Monero?

An excellent overview of most aspects of Monero (excluding subaddresses and bulletproofs) is here: https://github.com/kurtmagnus/Monero-RCT-report/blob/master/main.pdf

Learn about Elliptic Curve Cryptography here: https://steemit.com/monero/@luigi1111/understanding-monero-cryptography-privacy-introduction

Learn about Monero's proof of work algorithm, stealth addresses and Monero's original ring signatures (LSAG) in the cryptonote white paper https://cryptonote.org/whitepaper.pdf

Learn about how confidential transactions hide transaction amounts (including what range proofs are) here: https://people.xiph.org/~greg/confidential_values.txt

Learn about blockchain transaction structures here: https://cryptonote.org/standards/

Learn about the MLSAG upgrade to Monero's ring signatures here: https://lab.getmonero.org/pubs/MRL-0005.pdf

Learn about Bulletproofs, which will be replacing Monero's existing range proofs, here: https://github.com/AdamISZ/from0k2bp/blob/master/testzkp.pdf and here: https://eprint.iacr.org/2017/1066.pdf

Learn about ring signatures in a more general sense here: http://diyhpl.us/~bryan/papers2/bitcoin/Borromean%20ring%20signatures.pdf

Learn about subaddresses here: https://lab.getmonero.org/pubs/MRL-0006.pdf

See all of the Monero Research Lab publications here: https://lab.getmonero.org/


How do miners verify the Ring Signature of a transaction? As from I have understood, a Ring Signature is created manipulating the true one time spend key of the sender with some set of keys that are actually "decoys" (precisely some random old keys taken from the blockchain).

Ok, so how do the miners check if a Ring Signature is valid? Do they try random keys from the blockchain until they choose a correct one? I read on wikipedia that some observer can verify the signature just having only one of the public key used when the ring signature was created.

Monero transactions create outputs, which are where funds are stored. Each output has a public key, also known as a one-time public key and sometimes as a "stealth address".

If Monero was like Bitcoin, then to spend the output you would demonstrate knowledge of the private key associated with that public key. This is achieved using a signature.

But Monero prevents observers from knowing which output is really being spent. Therefore instead of providing a signature proving knowledge of the private key corresponding to one particular public key, a ring signature is provided which proves knowledge of one private key for an explicitly stated list of possible public keys.

Therefore each ring signature explicitly references all of the possible public keys whose outputs could potentially have been spent.

It is not necessary to do any kind of random "trying" of public keys. The list of possible public keys is listed, and no further information about which public key is actually being spent can be known.

Ring signatures are a set of data that can be validated by performing a set of mathematical operations on that data. The operations prove that a private key must have been known for one of the public keys referenced, but it cannot be mathematically determined which. The math is detailed on page 20 onwards of this document: https://github.com/UkoeHB/Monero-RCT-report/blob/master/Zero-to-Monero-1-0-0.pdf


Unlocked Balance 0 , Balance is correct. recently updated to the new Monero v0.13.0.3 and i am resyncing the entire blockchain, My balance is correct, but my unlocked balance shows 0. Also the 2 old transactions from a few months ago show 0/10 confirmations? The blockchain has still not completed yet. But is this normal? Any help would be appriciated. Can I still spend my "Balance"? Please advise. Thank you.

If, as you state, you are resyncing the entire blockchain, you will need to wait untill it has fully downloaded and been scanned by the wallet before being able to spend any unspent balance.


What is the maximum length of the payment id in Monero transactions? I couldn't find this easily. But what is the max length of a monero payment id? I know it's in hex, so how many characters is that if you were to make it a message from hex?

Payment IDs come in two forms:

Old style payment IDs are 256 bits, and are plaintext. That's 64 hexadecimal characters.

New style payment Ids are 64 bits, encrypted on the blockchain. That's 16 hexadecimal characters. Those are almost always embedded in an integrated address, which conveniently pack both your standard Monero address and the payment ID.

If you want to put less data than 256 bits in a plaintext public payment ID, you can pad with zeroes.


Do private remote nodes save any wallet related data to disk? I am considering setting up my own private remote node.
If I connect to that node over Tor using the official GUI wallet running on Tails, is any wallet related data saved to disk on the server hosting the node?
Thanks!

Do private remote nodes save any wallet related data to disk?

No. The only "related" data is the blockchain.


Is there an easy way of creating a transaction in NodeJs? I'm trying to construct a transaction and send it to the network using NodeJs. I asked around and was told to take a look at mymonero-core-js. While it seems like the library is exactly what I need, I'm totally out of my depth here. It's too low-level and without any kind of docs. Any advice?

You can set up a Monero daemon and then connect to it with this node.js client

You should also check out  rx-monero-wallet

Both of these are reasonably documented


What are some reliable public monero nodes one can connect to using their Monerujo app? Many times some public nodes are down and I don't want to connect to non-known public ones as shown in the monerujo app. Or does it not provide a risk at all?

What are some public monero nodes one can use?

And is there a risk of connecting to the nodes that show up in monerujo app?

https://node.pwned.systems/ has a listing of nodes you could use, updated every 20 minutes.

If you like to use DNS: node.moneroworld.com:18089

To understand the risks, read this reddit thread and this link.


In Javascript, how can one verify a signed message using a provided monero address? Is there a library to verify a signed message with a provided monero address in Javascript only? I'm trying to build an app in javascript that takes a signed message and verifies that a particular address owns that message.

If there is no javascript library that can do this. Where can I start to figuring out how to go about this?

Check out Lugi's repo. There's a page sign.html which will have the code you need.

  generates and verifies signatures on arbitrary data using one of your account private keys (spend key or view key)

The same tools are hosted here for experimenting: https://xmr.llcoins.net/sign.html


Pool vs proxy for 1000 users? In my firm, we are going to create a pool or proxy to mine Monero. We have more or less 1000 clients interested in the idea, but, there's something I need to clear up before doing anything.

I have been reading a lot about mining pools and proxies. If I understand correctly:

A mining proxy is just a proxy that consolidates/coordinates all users behind to make it possible to connect to a third party pool as a unique user. But If I join a third party pool with such an amount of users, wouldn't I be like doing almost all the mining job and sharing equally among all the users in the pool (because of the large numbers of miners behind my proxy)?
A mining pool is a server where users join to help mine faster unifying the power of all the pool. This seems to be the perfect option if I understand the concept correctly.

So, do my affirmations stand true? In my case, would it be better to build up a pool for my clients, than a proxy server that has to be connected to a third party pool?

A mining proxy is similar to how you describe. Yes it allows you to have a bunch of miners appear as one miner to a pool, but just because you have a high amount of users being proxied to the pool, does not however mean:

  doing almost all the mining job and sharing equally among all the users in the pool

Firstly, high user count does not necessarily mean high hashrate. It's very much hardware dependent. Secondly, there is no equal sharing. Miners get rewarded for the hashrate/difficulty of the jobs they submit - the more work you do, the higher percentage of any block rewards you get. Therefore your proxy only gets rewarded for the work it does (and thats the combined work of all your proxied miners).

Now onto pools.

  users join to help mine faster unifying the power of all the pool.

is not really an accurate description of how pool mining works. A pool allows a group of miners to all agree that whoever in the pool mines a block, they will share the reward proportionally with all miners of the pool, based on how much work each miner does. The pool server just facilitates this and its operator takes a cut for running it.

Now, because a pool has many miners (thus higher hashrate), it will find blocks faster than any of the individual miners could find a block alone.

This brings us to one of the reasons miners use pools: to get regular payments. Total paid out over time will be roughly the same as if solo mined - the difference is frequent small payments vs infrequent large payments.

Another reason to join a 3rd party pool is ease. To mine to an existing pool, you literally just download and run a miner program pointed at the pool. True solo mining requires running a node.

Another reason is coin hopping. If you don't care which cryptocurrency you mine, many pools offer automatic switching to the most profitable coin at any given time.

So back to your core question:

  Pool vs proxy for 1000 users?

Because a proxy is in effect, one pool miner, all payouts go to that one miner wallet. Therefore, how you intend to reimburse your users comes into play - how you (fairly) distribute the earnings. If one of your users has a lot of hashrate, surely they will want more rewards than a user with less hashrate. If all users have exactly the same hardware, this is less of an issue.

However, assuming your combined hashrate of all users is significant enough to get payouts at a frequency they are happy with, and you have the required experience to setup and run a pool, a private pool would make more sense. You are then not having to trust or rely on a 3rd party pool.

I'd suggest gaining more experience and understanding the subject matter better though. Start small and build your way up. It's one thing mining with your own time and hardware, but using your clients is another matter.


Why is GetMonero.org copyrighted with a CC-BY-3.0 license? I noticed the official website of Monero (GetMonero.org) is copyrighted with a Creative Commons BY 3.0 license. Why did Monero choose this license, or choose to use this instead of Creative Commons BY 4.0?

Because the CC BY 4.0 didn't exist when we created the site. Changing the license requires an agreement from all those that have submitted a PR, so unless there's something specific in 4.0 that we want it's simply too much effort to change.

The reason we chose CC BY 3.0 is because it seemed the most appropriate to the written material, images, and logo. It allows people to share it in any way, remix it, build on top of it, modify it, even for commercial purposes. The only thing they have to do is provide proper attribution to the site, provide a link to the license, and indicate if changes were made.

Why would we want to restrict the ways in which people can use and benefit from the material on the site?


Can I look for incoming transactions with only my private view key? I have a wallet and without using Monero Wallet GUI, I want to check for incoming transactions every 5 minutes. For that, I will write code (in .NET), that will execute a method every 5 minutes.

What that method should do is currently unknown to me. As far as I know, I can check the blockchain for transactions with my private key. Is it possible or do I need more data than that?

Running ./monero-wallet-cli --generate-from-view-key <private view key>, you can generate a view only wallet file.

Then you can run ./monero-wallet-rpc --wallet-file view-only-wallet --rpc-bind-port 18084 to launch the RPC wallet using your view only wallet file.

Then you can poll the wallet RPC method get_transfers with the field in:true to fetch incoming transactions.


How to calculate job target in hex I received a mining job with target = f3220000.

My XMRig miner logged the following statement:

new job from ... diff 480045 algo rx/0 height 2027084

I want to find answers to the following questions:

How to get a decimal value of difficulty (480045) by a hexadecimal
value of a given target in hex (f3220000) ?
How to get a hexadecimal value of target (f3220000) by a decimal
    value of a given difficulty (480045)?

My research led to the following formula:
target = targetmax / diff when targetmax = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

I also found the something in the source of some pools here and here. They have a different logic and I can’t understand it anyway.

How to get a decimal value of difficulty (480045) by a hexadecimal value of a given target in hex (f3220000) ?

Swap endian f3220000 and remove padding gets 22f3, then 0x100000001 / 0x22f3 yields: 480045.

  How to get a hexadecimal value of target (f3220000) by a decimal value of a given difficulty (480045)?

((2^256-1) / 480045) >> 224 is decimal 8947, hex 0x22f3. Swap endian and pad yields: f3220000.

The reason for both the division in #1 and shift in #2 is because we are exploiting the fact that we are working with only a 32 bit difficulty target. Thus, we are only concerning ourselves with the most significant 32 bits of a 256 bit number.

It's worth noting that this calculation is just legacy hangover of how the pools and miners were doing this when forked, which nobody felt strongly enough to improve upon. The current miner implementations foresaw this 32 bit limitation and do have code to handle larger targets [ref], though most pools do not, as can be seen by the pools you cite. In retrospect, it would probably be more sensible if the pools and miners calculated/checked difficulty more akin to how Monero does (i.e. if hash multiplied by difficulty doesn't overflow, it's good), as whilst this would mean passing around a slightly larger target in the stratum job message, it's more future-proof.