Can you view the payment id in a monero block explorer? Correct me if I'm mistaken, but I read somewhere the payment id can be public on the blockchain or it can be hidden by having it encoded into the address? Is there an example transaction that has the payment id public?

There are two kinds of payment ids: plaintext ones, and encrypted ones.

Plaintext ones can be viewed in a block explorer, and one such example is found in block 1412534, transaction 2fbf1e227847b9bf604aee0e567531196214f8dae9dbc687f1e70bef4cf4ea67:

http://moneroblocks.info/tx/2fbf1e227847b9bf604aee0e567531196214f8dae9dbc687f1e70bef4cf4ea67

You can see this transaction included a plaintext payment id: dc4a15c532e88c5dd8411b6f9b41ec42b2c9f64e8c583c98feba2073116910d4

How these are interpreted is up to the receiver. It could be a key in a database, a hash of some information, a simple counter, etc. Some payment IDs have also been used to embedded "funny comments" in transactions. See for example https://xmrchain.net/search?value=19ee085a00ee7fd642709a14bbf74f36de5a890c32eff75fdacb8ff26a826b93 found by JollyMort below (666c75666679706f6e7920697320746865206265737420706f6e792065766572 is the hexadecimal representation of "fluffypony is the best pony ever", fluffypony being the Monero maintainer at this time).

As for encrypted payment ids, only the recipient can decrypt them. These are short form, and are mostly used along with integrated addresses, which are a convenient "bundle" carrying both the address and such a payment id.


How is building the GUI from source different from building monerod/CLI? Since I've been building monerod/CLI from source since before the GUI wallet was released, I already have a fully populated monero directory with my wallet and everything else that gets installed in the build.  How do I build the GUI?

In this answer, I'm hoping to find out:

Whether the current monero directory is overwritten
In which directory the GUI is built
Whether the GUI build will install a new monerod and new monero-wallet-cli
Whether running the GUI will try to run a separate instance of monerod, even if it's already running
The obvious: the few steps to cloning the repository up to running make

(I'm running Linux 16.04.2 LTS)

The monero GUI source code and installation guide (including Ubuntu 16) can be found here https://github.com/monero-project/monero-core

To answer your questions by referring the guide.

It installs in the directory where you download/cloned the source and build it. So it will not overwrite anything as long as you download it on a an empty folder.
On the sub folder where it is built. Specifically ./build/release/bin/monero-wallet-gui
It's not installing monerod and monero-wallet-cli. Its not in the source code.
I'm not sure but probably not. It may be the same in windows which does not ask to run monerod if there is one already running.
You use git to clone the repository. The installer has a build.sh which does everything for you including the make.


Can't create transaction: unexpected error: Cannot deserialize mg[i] Have Mac OS with Monero GUI ver 0.17.1.1
Synchronised Daemon and Wallet fine (after some time)...Can receive XMR into my wallet, but when I try to send...irrespective on the amount I get the above transaction error
Have tried changing nodes etc, but no luck
Any suggestions or advise please...thanks

This is an error I've never seen before, and looks like a bug at first glance.
You should file an issue on https://github.com/monero-project/monero with the logs you can when trying to send again when using monero-wallet-gui with --log-level 2 (this will contain some private information relating to your address, feel free to replace your address with a placeholder for privacy).


Is there a guide available for generating and parsing integrated addresses? Is there a guide for generating and parsing? I see there is a question regarding "unpacking" them here:
How to "unpack" a Monero integrated address using the command line?

But that doesn't address how to generate them. Do command line or RPC tools like get_bulk_payments work with integrated addresses? I was just looking for a little bit more complete overview of how they work, from generation to receiving, if it's available.

There is an RPC command make_integrated_address to make an integrated address with the wallet:

https://getmonero.org/knowledge-base/developer-guides/wallet-rpc#makeintegratedaddress

Basically, you send the wallet the payment_id and it sends back the integrated_address for the address associated with the wallet.

There is not a command line function to do this, at least not yet.


When using a foreign remote node does the transaction signing happen on my wallet or on the node? I don't understand the architecture of Monero wallet(s) - on OSX or on Android.

When I choose not to run my own full node/daemon and use (foreign) remote node instead, how does the security of signing work?

Is the wallet just the GUI to the node and all the cryptography with private keys happens elsewhere, thereby significantly threatening security OR does the signing happen on my hardware that just uses the remote node to connect to the network?

Thanks,
Michal

The wallet does the signing. The node never gets access to the the keys.

The node's purpose is to keep a local copy of the blockchain in sync with the network at large, and relay transactions made by the wallet. The wallet's purpose is to find incoming transactions and make outgoing transactions using the node. By the time the node sees a transaction, it's fully created, and bitwise the exact same as it will be stored in the chain [1].

[1] Later on, some nodes may elect to prune some parts of transactions, but this is a local storage choice.


Can someone give me an example of doing a json-rpc call such as getbalance in java I want to be able to use monero as a payment method in my website. It's completely written in java spark. I am unfamiliar with using curl or json rpc in java and would like someone to give an example of how to do it.

Ok i managed to do it, here is the code:

String curlCode ="./getBalance";
System.out.println(curlCode);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
PrintStream old = System.out;
System.setOut(ps);
InputStream is = Runtime.getRuntime().exec(curlCode).getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader buff = new BufferedReader (isr);

String line;
while((line = buff.readLine()) != null)
System.out.print(line);

System.out.flush();
System.setOut(old);
System.out.println("Here: " + baos.toString());
String balance = baos.toString();
JSONObject json3 = new JSONObject(balance);
Long long1 = (json3.getJSONObject("result").getLong("balance"));
BigInteger bigInt = BigInteger.valueOf(long1);
BigDecimal one = new BigDecimal(bigInt, 12);

System.out.println("Monero balance is: " + one);

Basically what i did was run a system command with the curl code inside, convert the terminal output to a json object and printed out the balance. I also had to convert the balance with bigDecimal because it didn't have a decimal place in it.

There is one important thing to add, i added a getBalance script with the following curl code inside:

curl -X POST http://127.0.0.1:18082/json_rpc -d '{"jsonrpc":"2.0","id":"0","method":"getbalance"}' -H 'Content-Type: application/json'


Development Roadmap Design and Consensus Who was involved in the design and development choosing goals for the Monero roadmap?

Once goals are identified, what procedures are in place to determine their level of priority?

Does the Monero Research Lab spend time vetting the conceptual viability of most major goals before significant developers hours are spent codifying them?

The Monero Design and Development goals roadmap was produced by the Monero Core Team

The Core Team is an integral part of Monero Research Lab so cooperation is ongoing. For simple tasks Monero developers may act independently without requesting significant academic review. However, for more important and cryptographically complicated tasks research is undertaken before coding begins. As issues are discovered during development, prior research is updated. Monero Core Developers are given access to ongoing MRL research before it is completed of received peer review

  This research bulletin has not undergone peer review, and reflects only the results of internal investigation.

One of the goals of sharing research while still in progress is to reduce the amount of time wasted pursuing objectives with critical flaws. Although significant cooperation exists, priority levels for certain tasks change over time based on the individual skill sets and interests of each developer/researcher.


How to extract data from local blockchain How to extract data, blocks from blockcain stored on local disk drive, and acquire it through some usual data transfer chanel (eg. JSON) in other application?

Run a local daemon, and then use the daemon RPC API to query it for blocks:

https://getmonero.org/knowledge-base/developer-guides/daemon-rpc


Does a tool exist to monitor multiple Monero miners? I would like to monitor multiple Monero GPU miners. Has a tool already been developed for this, if not I'll happily do so?

Although im not a big fan of this exact web-portal, personally i'd rather see something built with Symfony for example and have a lot more flexibility, but it does fit your intended purpose i think;

https://getminera.com/

You can customize it to monitor/manage and even build/compile multiple monero miners, but it currently only has examples built-in for other currency miners.


I used Shapeshift to transfer BTC to Monero about 18 hours ago and it is still not showing in GUI wallet? I used Shapeshift to transfer BTC to Monero about 18 hours ago and it is still not showing in GUI wallet?
I can see it has been sent on the blockchain on shapeshift
Funds have been returned to BTC markets exchange
I tried updated Wallet to recent update (mac)
Its does say status disconnected? But it seems to connect to Daemon and show my old balance. Should I just wait longer, is +18 hours a normal time for the blocks to sync?
I am not that tech so hoping its just time.
Thanks in advance

Check to make sure you have the latest version of the Monero wallet 0.11.1.0. The sync will stop if you have an older version.


What are the 'Login (optional)' fields for in the GUI settings? There are 'Username' and 'Password' fields in the GUI settings. What are they for?

These fields are used to connect to a daemon requiring a username and a password (when the monerod daemon was started with the --rpc-login option).


Why did monero-wallet-cli restore the same wallet with different mnemonic seeds? Using monero-wallet-cli --restore-deterministic-wallet
with the following seeds can restore the same wallet:

First seed: lawsuit artistic jeans lair plus village potato cedar certain sizes ruthless ingested girth films pegs cage exult zombie wade pumpkins candy wetsuit utopia claim potato

Second seed: guarded sake aisle kidneys mayor session vastness wiggle arsenic camp sixteen doing girth films pegs cage exult zombie wade pumpkins candy obnoxious wayside abyss sixteen

Why?  Is it safe to keep using the old (first seed) years from today?

More info from this: Using old 0.9.4 wallet

TL;DR first is completely random seed, 2nd is the "normalized" seed, and they're both valid and resolve to the same wallet. As long as you know the method to go from mnemonic to the actual private key, you're safe to keep it as it is.

The first is a just some random 256 bits, probably generated by other means and the second is the "normalized" seed, meaning it's a number smaller than l (a parameter specific to the elliptic curve used in monero cryptography scheme). Both seeds resolve to the same private spend key and are equally valid. The private spend key is the important piece of data which is used on the protocol level. You could even use your own, custom, mnemonic scheme to get from mnemonic/seed to private spend key. The protocol doesn't care about the mnemonic/seed, only about the 4 keys (spend keypair and view keypair)

If you restore the wallet with the first seed, and after restoring use the "seed" command, the wallet will print the second seed. This is because it automatically normalizes the seed. Let me elaborate.

First of all, your mnemonic is a representation of a 256 bit integer, ie a very very big number. This number is your seed, and from it the keys are derived and those are actually used in cryptography on the protocol level. There is a function which converts between the number (seed) and the mnemonic. How the conversion works, is explained here.

To get the private spend key, the seed is passed through sc_reduce32 function:

privSpend = sc_reduce32(seed)

if the seed is a random 256bit integer, then it can happen that:

seed != sc_reduce32(seed)

however, if your seed has already been passed through sc_reduce32 function, then it's what we call a "normalized seed" and both the seed and privSpend will be the same, i.e. passing a normalized seed through sc_reduce32 results in the exact same number.

n_seed = privSpend = sc_reduce32(seed)
n_seed == sc_reduce32(n_seed)

Since n_seed != seed, the mnemonic corresponding to each of them will also be different.

You could easily produce the normalized seed yourself, by playing with this page:

Type in your first seed into box 1.
Click "Gen 2." and "Gen 3. & 4.", notice that 2. & 3. are different.
Copy the value from box 3. into box 2.
Click "Gen 1." and "Gen 3. & 4.", you will notice 3. and 4. didn't change and 2. & 3. are now the same.


Socket Error Connecting to Nanopool with xmr-stak I've had a miner running for about a week now with no problem, but this morning it just started reporting the following error:

SOCKET ERROR - [xmr-eu1.nanopool.org:14444] CONNECT error: GetAddrInfo: No such host is known

I have no idea whats causing it, but my machine can connect to the internet just fine and resolve the pool website. I also rebooted and tried flushing the dns which have done nothing.

I also have a second miner on the same network thats working just fine.

Any ideas?

That indeed looks like a DNS error. One thing you can try is swapping the FQDN with the IP address to confirm it's somewhere in the DNS resolution. I've had to do that on a couple large pools.

In other words xxx.xxx.xxx.xxx:14444


How CryptoNote protocol protects Monero users? We can read that Monero possesses significant algorithmic for blockchain obfuscation.
In what way it protects users from reading the data from the blockchain?

There are two main protections from Cryptonote: Untraceability ( provided by Ring Signatures ) and Unlinkability ( provided by Stealth addresses ).

Detailed information in the Cryptonote website.

Monero went further following researchers recommendation and added a forced minimum of 2 mixing for a transaction ( to be bumped to 4 ) and is going to implement Confidential Transactions in the near future further obfuscating the already hard to guess exact amount of coins in a determined transaction.


Does using a remote node compromise the whole wallet? If I'm using Tails and I use a remote node, does that compromise the whole wallet at some point in the future?

For example, can the node determine my Monero wallet address or identify my wallet somehow?

No, a remote node cannot determine your wallet address.

However, using a 3rd party remote node, you are trusting the remote node operator to not: log your usage (e.g. IP analysis), trusting that they will not censor your transactions (e.g. broadcast them), trusting they are on the correct chain and trusting they are not doing any kind of transaction tracing.

The risk of IP analysis can be lessened by using the remote node over tor/i2p/vpn. Checking they are running the correct chain / not censoring your transactions can, with a little investigation, be checked/verified. But you cannot mitigate against the problem that the remote node knows when you are spending and this information can be very useful if your are doing any kind of blockchain analysis / output tracing.

Bottom line, the moment you start using a 3rd party remote node, you are trusting them to some degree and leaking some information.

So whether to use a 3rd party remote node or not for any particular transaction boils down to the level of risk and trust that is acceptable to you.

Running your own local or remote node is always preferable. Of course there's nothing stopping you having a couple of different wallets. For example, one which is quick and fast (like some of the mobile wallets which make use of remote nodes / centralized servers) for buying your coffees, and a separate wallet, using your own node, for transactions that require a higher level of privacy.


Monero-wallet-gui: while synchronizing, blocks remaining number increases I used monero-wallet-gui to import a paper wallet. Synchronization started from the beginning.

Synchronization ran very fast and perfectly well until the moment when my funds appeared, more or less (between "Blocks remaining: 5500" and "Blocks remaining: 4000).
However, from that moment on, synchronization slowed down very much and, worse, the number of blocks remaining started slowly increasing, not decreasing.
Being a Mac user (OS X Yosemite, 10.10.5), I followed the instructions that I've found here: My blockchain is stuck, how do I "unstuck" it?
More specifically,

a) After rebooting my Mac and before starting the GUI, I deleted the p2pstate.bin file. This did not help: the number of blocks remaining was still increasing.

b) So I stopped the daemon and I added "--block-sync-size 20" as daemon startup flag. I then restarted the daemon. This also did not help: the number of blocks remaining was still increasing.

c) So I checked bitmonerolog and I noticed this message: "cryptonote_core/cryptonote_core.cpp:1123  [1;31mLast scheduled hard fork time shows a daemon update is needed now". In fact, I noticed that my monero.wallet.gui version was 0.10.3.1 while the current version is 0.11.0.0

Question: any ideas on how to solve the problem? Does 5.c above is the problem? I'm downloading the new version of the GUI. Will keep this question updated.

YES! 5.C was the problem. After downloading the new version of the GUI synchronization seem to work fine: "Blocks remaining" number started decreasing again.

Have a nice day :-)

The problem was solved by updating the GUI to the latest version.


Why low hash rates doing SHA/CryptoNight algorithm? I have benn dealing with crypto currencies for the last few days(especially on Raspberry Pis) and now I'm wondering how a Raspberry can have such a bad hashrate(1-20H/s)... Mining is just doing SHA/CryptoNight hashing(and submitting them)...

If I use python to generate a SHA hash it doesn't take me one second to generate 20 hashes.. It's ways faster....

So what is the RPi doing when not hashing?

You cannot compare hash-rates for SHA and CryptoNight as they have different characteristics. CryptoNight requires 2MB of processor cache per thread and if you don't have that, the hashing will be significantly slower than other algorithms.

Raspberry Pi 3 to my recollection only has 512KB L2 cache so it's always going to be slow hashing CryptoNight compared to hashing on most desktops.


Funds not showing in GUI wallet I recently installed the Monero GUI wallet and connected it to my Ledger Nano S.
I then transferred my Monero from Binance to my GUI wallet address and received a successful Transaction ID From Binance and see it in block 2270830.
However, my coins are not showing in the wallet.
Because I am using my Ledger, I cannot access my Secret View Key, so using block explorers to see more detail is not an option.
My wallet info is:
GUI version: 0.17.1.9-3ca5f10f (Qt 5.15.2)
Embedded Monero version: 0.17.1.9-release
Wallet restore height: 2271489
Wallet mode: Advanced mode (Local node)OpenGL

My Local Node shows as synchronized:
2021-01-10 14:53:29.895 I SYNCHRONIZATION started
2021-01-10 14:53:38.162 I Synced 2271497/2271497
2021-01-10 14:53:38.163 I SYNCHRONIZED OK

My funds seem to be in limbo.
What can I do now?

Your wallet restore height (2271489) is above the height of your transaction (2270830). You therefore need to change the restore height to force a rescan from before the height the transaction occurred. See this answer.


Which multi currency/token wallet exist for ETH, BTC and XMR? I saw that Jaxx doesn't support Monero. Is there another multi token wallet, which supports all three mentioned currencies?

Patients, hold on to your horses... I wish I could have my cake and eat it to.

Until Monero hard forks, occurring roughly semiannually, slow down or until very strong software interfaces exist few wallet vendors have the resources to adequately support Monero. Monero is pushing the envelope for privacy services and everything must be coded from the ground up unlike Bitcoin-based altcoins.

There has yet to be a dedicated production-ready mobile Monero wallet or Monero hardware-based wallet. Jaxx spun their wheels to support Monero until the Ring Confidential Transactions (CT) hard fork occurred. The X Wallet currently appears to be the only viable moble Monero wallet in the pipeline, but is not a multicurrency wallet.  There was a very short period over a year ago the Exodus Wallet supported a now fully deprecated version of Monero after a hardfork.

Similarly, there was a very short period were there was alpha code that supported Monero on a Trezor until Ring CT hit the streets. Monero support on a Ledger hardware wallet is in the pipeline.

However, BIP 32,39,44 technologies used by Jaxx (along with BIP 47) and other hardware wallets can be extended to support Monero, see this libbitcoin Monero example. This leads to two working examples for how BIP 39 seed words can be deterministically mapped the 25 Electrum words used to reconstitute Monero wallets.


MyMonero wallet compatible with CPUminer/MinerGate I followed the tutorial on https://www.electromaker.io/tutorial/blog/cryptocurrency-mining-on-the-raspberry-pi-60 (mining monero obviously) and everything worked well... Code is compiled and can be started... But in this tutorial the mining deamon is started using ./minerd -a cryptonight -o stratum+tcp://xmr.pool.minergate.com:45560 -u youremail@address.com -p x -t 4 where the -u flag is the username and -p the password...

I have a wallet at MyMonero and not at MinerGate... Can I use CPUminer with a MyMonero account as well? If yes how? And what wallet do you prefer and why?

Thanks in advance!

So I think your username (-u) will be your MyMonero wallet address instead of your minergate registered email address. As far as im aware thats how it works with XMRig and Castxmr, don't see why it would be different for CPUminer


How to setup Monero RPC authentication? I am currently experimenting on testnet.

server a = monero wallet
server b = website

I have the monerod client synced.
I run the monerod and monero-wallet-rpc on server a.  I want to make my commands from server b.
monero rpc command

./monero-wallet-rpc  --wallet-file testwallet --password test --rpc-bind-port 28080 --daemon-address 127.0.0.1:28081 --testnet --daemon-login test:test

monerod command

./monerod  --rpc-login test:test --testnet --rpc-bind-ip=127.0.0.1 --log-level=1

It gets stuck at

2018-02-01 22:42:51.060     7f577a44b780        INFO    global  contrib/epee/include/net/http_server_impl_base.h:76      Binding on 127.0.0.1:28080
2018-02-01 22:42:51.060     7f577a44b780        WARN    wallet.rpc      src/wallet/wallet_rpc_server.cpp:2945    Starting wallet rpc server

Any attempts to contact the RPC server from server b results in 401 unauthorized.  When I start the monero-wallet-cli it works well.

401 HTTP error is defined as UNAUTHORIZED error meaning you don't have the permission to call the RPC API.

At the moment, Monero Wallet RPC requires authentication by default, username is: monero , password is a randomly generated string.

To disable the login: add the --disable-rpc-login flag to the command line.

If you want to specify a username and a password, add the --rpc-login username:password where username is your username and password is your password.


Is it possible to increase the total supply and how equally distributed is monero among it's early adopers? In 2017, 75% of existing Monero will already be mined and yet, for me and many others in my position, Monero seems just be at the very beginning of its existence. Is it possible to change the total supply afterwards, by a Hard Fork for example?

Does is prevent the equal distribution of Moneros? By the fact that at the very beginning only a small number of people mine and are aware of the existance of monero. So they would own 75% of the total...

Is it possible to change the total supply afterwards, by a Hard Fork for example?

That would be possible, but it would break the social contract. I am quite certain almost all community members and miners would be opposed to it.

  Does is prevent the equal distribution of Moneros?

Not necessarily. Given that Monero has a tail emission of <1% per year (the actual number is approximately 0.85%), the portion of the "early adopters" will somewhat dilute. In addition, Monero has always had high volume trading and furthermore had a fair launch. Therefore, one could argue that the distribution is relatively fair.


Are transactions with multiple real inputs bound to require all the real inputs I was reading this discussion on adding nLockTime to Monero, and the OP says that we can achieve this functionality by having a small amount of cryptocurrency transferred with an transaction-unlock-time and use this as a lock by having a multiple input transaction with this locked account to create a transaction that won't be valid until some time in the future.

The question is are these multiple real input transactions binding?  Meaning I have money in a 2-of-2 multisig account A where I own one of the keys and money in account L, where L is locked using transaction-unlock-time, and I have transaction that will be valid using A and L as real inputs back to to an output I hold (will be valid after L unlocks).

If I was a bad actor, could I separate the transaction and just send the money from A back to me by separating the transaction?  Or is this a hard problem?

EDIT:  The paragraph talking about multiple input is as follows:  "It is technically possible to implement nLockTime now (without protocol change), but it is a little clunky. You have to put a negligible amount of Monero in a time lock transaction, and then sign a transaction spending it and the funds you want to nLockTime. This won't be publishable until the other transaction is unlocked, but it is a little clunky, requiring a couple of transactions (and data must be published to the blockchain)."  The bold section implies a multiple input transaction.

The OP workaround does not actually mimic a Bitcoin nLockTime tx, because the second tx (with the actual funds), is not published - it cannot be, the network would reject it. An nLockTime tx is actually published to the network but cannot be mined (included in a block) until the specified time has passed.

The moment a Monero tx is published, it can, and almost certainly will within 2 minutes, be mined. And as soon as it's mined/confirmed on the blockchain, it is final, even if it has an unlock time set (ref this answer). This means the output(s) of that tx cannot be spent (used as inputs) in another tx, until the unlock time has passed.

Therefore, if you set an unlock time on a tx destined for a multisig wallet, the outputs of that tx, which are now owned by the multisig wallet, need to both pass the unlock time and be signed by both wallet participants to be spent. The tx cannot be cancelled and it can only be refunded* (sent back) once it has passed its locked time and signed by all participants.

(*) I say refunded here, but this is actually just a normal, manual, spend. There is presently no such thing as a tx refund address in Monero which would allow a more automated refund.

Pulling this all together, dissecting your question(s):

  The question is are these multiple real input transactions binding?

The moment a valid tx is sent to the network and mined/confirmed, it is binding. The input(s) must have been unlocked and you must have had the signing key(s) for them.

  Meaning I have money in a 2-of-2 multisig account A where I own one of
  the keys and money in account L, where L is locked using
  transaction-unlock-time, and I have a valid transaction using A and L
  as real inputs back to to an output I hold.

You simply cannot have a situation like you have described here. It cannot be both "in a 2-of-2 multisig" wallet (locked or not) and in another wallet (locked or not). The moment you send (publish) the output to the multisig, it has to have been unlocked in your source wallet, and even if you specify it is to be locked when received in the multisig wallet, you cannot do anything with it after in the source wallet (it is now spent, regardless if it is now locked or not).

  If I was a bad actor, could I separate the transaction and just send
  the money from A back to me by separating the transaction? Or is this
  a hard problem?

Given you have defined A as a 2-2 multisig, the only way you can send it back to yourself is by having both the other signer sign this new transaction sending it back to you and the funds not being locked in the multisig. There is no gaming this.


Can't connect to my full node outside my local network I've been having trouble connecting to my monero remote note from outside my local network.

This is the command I've been using to launch the daemon:

monerod.exe --data-dir E:/bitmonero --rpc-bind-ip 0.0.0.0 --restricted-rpc --confirm-external-bind

I can connect to the node inside my local network using my internal IP (I have no problem with 192.x.x.x addresses) but cannot connect outside my local network with either my internal or external public IP.

--rpc-bind-ip <my external IP> also does not work and I can only get it to work with my internal IP or 0.0.0.0 as shown above.

I've also opened up ports 18080, 18081 on the device I'm running the node on as well as on went into my router and forwarded these ports to the internal IP of the device running the node.

However, I seem to be getting quite a lot of incoming connections - currently at 8(out) +35(in).

Any help would be appreciated!

--rpc-bind-ip [IP ADDRESS] Binds the daemon to an IP address. You need to use your External IP if you plan to access this daemon from outside your local network, or an Internal IP if you only want it to work for devices in the same local network.

--rpc-bind-ip 0.0.0.0 In the context of a local network, 0.0.0.0 means 'all the IP addresses inside the local network'. So the daemon bonded to internal IPs can be reachable only by internal addresses and not from outside the local network.

You should use --rpc-bind-ip [YOUR EXTERNAL IP ADDRESS] to make the daemon reachable from outside your LAN. Additionally, you must set firewall rules and forward ports depending on your particular local network and router configuration.


How does one compare Monero's hashrate with the hash generating power of the world's supercomputers? Now I know that it is not a genuine 1:1 comparison but this was often a comparison used for fun to try and comprehend just how much computing power the Bitcoin network was comparatively generating.

If the worlds top 100 supercomputers were suddenly to start mining on the Monero network, what kind of hashrate would it theoretically be generating, and how does that compare to the current hashrate?

Two months ago, Monero core developer smooth said:

  Monero's mining network is comparable to a low top-10 supercomputer. It's not invulnerable to all attackers but it is a significant amount of security relative to the value of the coin and what could be achieved by attacking it.

Over the past two months Monero hashrate has grown about 50%. The worlds top 100 supercomputers would have the ability to capture a very large majority of the Monero network hashrate. It would be expensive to attack Monero (relative to its current marketcap) but far from impossible at this time.


RingCt Is It Less Safe to Send the Whole Amount state 1

Initial positions:

A: 5.0032
B: 3.0000
C: 3.2000

...

state 2

G:5.0032
H:2.0000
I:1.0000
J:2.0000
K:1.2000

Let's assume

A -> G
B -> H,I
C -> J,K

I get you cannot tell for sure which inputs have been used to create the outputs (the same principle like a mixer). So G could have been created by sending 3 from B and 2.0032 from C or any other mix out of A, B, C

But isn't it more probable that an odd amount of the same size output/input is a full transaction?

Maybe I also have a misunderstanding what can be seen on the blockchain but there must be inputs/outputs in order to verify that the sum of inputs equals the sum of outputs in a block.

Monero output amounts are encrypted. You cannot tell anything at all about the value of the inputs or outputs to a transaction (with the exception of freshly created coinbase outputs which have public amounts so that inflation can be tracked).

The validation that the sum of outputs+fee perfectly balances the sum of inputs is achieved using zero knowledge proofs.


Is there a Monero forum? I see search results for forum.getmonero.org but loading any page of it gives a 404 page, and has done so for days.

Has this forum been shut down intentionally?   Is there another forum?    I know about reddit.com/r/Monero, but those threads seem very transient.

There used to be a Monero forum at that address. It was seldom used, however, and the usual assholes on the web pushed a lot of spam on it. After a burst of activity when iit was launched, the only part of it that was really still used was the forum funding system, and this has since been migrated to a git based system, making the forum best shuttered to avoid people posting there and getting no reply.


Script for Monero Auto mining need your assistance, please.

Can anyone provide me a script for Mining Monero automatically?
I have some small Internet Cafe an I am planning to put it in my units for additional income.
If you wanna make it confidential kindly PM my FACEBOOK

Thanks in advance!

Look, if you don't own the computers then I don't suggest you mine on them. However if you do own them, then look at using xmr-stack https://github.com/fireice-uk/xmr-stak


What's the difference between block height and block number? With the recent hard-fork, I was wondering about the difference between block height and block number? E.g. I am fairly sure the genesis block is block number 0. After that block, but before the next one, was the block height 1?
And a follow-up question: When querying bc_height in monero-wallet-cli or doing status against monerod, how should one interpret the "block height" value returned? I am asking because if you search for that block height in e.g. http://explore.moneroworld.com/, it can't show it because it's "higher than the current blockchain height". I think they actually mean you can search for "block number", but their search field mentions says "block height" …

The block height refers to the most recent block that has been mined. The block number refers to any block up until and including the current block height.

Blockchain exploring sites are generally slightly behind on listing the most current block height. When you use the status argument, the first values returned are [currently synced block]/[current block height]. The block height shown in moderod is likely to be higher than the one listed on a blockchain exploring website. I believe they rely on more confirmations before committing it to the list.


How do I merge wallet data from multiple wallets that control the same address? Consider a scenario with the following facts:

I have a Monero node at my home.  It contains a wallet, but I generally don't use that wallet.
I have a desktop computer where I have a wallet that I restored from the same seed as the wallet on my node. Sometimes I initiate transfers from this wallet.
I have a laptop computer where I have a wallet that I also restored from the same seed as the wallet on my node. Sometimes I initiate transfers from this wallet.

The issue is this: if I transfer from the desktop's wallet, only the desktop wallet will have the destination address (among other things). I want all three wallets to be able to contain the same data, even if that means I need to do some periodic copying/pasting/exporting/importing/etc.

How do I merge the transaction data in the different wallet files, so each of the wallets contain all the data from the other wallets?

Note that I have named the wallet identically in each location, if that matters.

There is no tooling to do this at this time.


How do you add support for (server side) SSL/TLS mining? Basically, the title. I run a small pool and want to add SSL/TLS support for miners. I tried making openssl manage the connection and pipe it locally to the correct port, but that doesn't work.

Any help appreciated, thanks.

You could use the stunnel program to do that (https://www.stunnel.org).

It waits for incoming SSL/TLS connections and redirects the decrypted data streams to a local port (e.g. a server that doesn't support SSL/TLS on its own).


Money not received in Exchange from Wallet So i sent out some coin to an exchange from my monero gui wallet. Sent it at 8:23 this morning and it is now 10 pm and i still havent gotten it on my exchange. It was set to x1 priority and as far as i can tell its been sent on my wallet and the blockchain. Any one know whats up ?

Exchanges will provide you with a payment ID, so they know how to credit the deposit.  Perhaps you didn't use one.  Whether or not you used one, you can prove you sent the transaction with the transaction private key, so either way you should reach out to the exchange support and request that they credit your account.


Where can I get a printable version of a Monero Paper Wallet to be used as gifts? There doesn't seem to be any printable paper wallets like bitaddress.org but for Monero. I only found ones that generate 24 word seeds for your wallet which you have to write down manually. I want to be able to print out a nice graphic with QR codes to give as a gift.

You've probably seen the paper wallet at the Monero.how site. The site explains:

  For security reasons, we chose to create a paper wallet that requires
  us to write the seed onto it with a pen instead of printing the
  information directly onto the wallet. This is to avoid security
  threats from compromised printers and compromised smartphone QR
  readers. When you print something, there is a good chance that the
  images are being sent unencrypted across your network and stored
  unencrypted in the printer's memory even after the printing is
  complete. Because printer firmware tends not to be security hardened,
  it is not inconceivable that a virus could exist either now or in the
  future that would scan all print jobs for anything resembling a
  cryptocurrency key and transmit it to an attacker. We sleep better at
  night knowing that we used a pen.

If you wanted to use an existing paper wallet and modify it to include a QR code instead of the written seed words, then the first question you'd want to ask is "what should the QR code contain?".

If there is a specific app you know of that can scan QR codes that could directly read a 32 byte sequence representing the wallet seed, then that would be the most compact QR code representation.

However, anyone using the standard GetMonero.org desktop wallet would find that QR code useless. Therefore I'd recommend you create a QR code that simply includes the plain text seed words, which someone could scan and use to more easily enter the seed words into any Monero wallet. Be sure to download QR code creating software rather than using a web site to create the QR code. You would not want to accidentally use a hacked web site that is looking out for cryptocurrency keys that it can steal funds from.


Why is the poolstate.bin file missing? In Monero 0.11.0.0, a poolstate.bin file is not created in ~/.bitmonero, but was in previous versions ? Is this file missing, or is there any problem with my Monero setup ?

The poolstate.bin file used to contain the set of transactions which were not yet mined, known as the txpool. Monero 0.11.0.0 moved those transactions into the database, stored in ~/.bitmonero/lmdb, so the poolstate.bin file is now obsolete, and will thus not be created. A lack of poolstate.bin does not indicate anything wrong with monerod.

An old Monero install may still have this file, but it will only contain old transactions from before the change, and it may be safely deleted.


Why excludes the transaction bodies in the structure of the block? According to cryptonote standard #3, a block consists of three parts:

  - block header,

  - base transaction body,

  - list of transaction identifiers.

Why excludes the transaction bodies in the structure of the block?
What is the structure of the blockchain? Does it include every
transaction body?

The blockchain is a logical concept. When you store the blockchain locally, your Monero node implementation can store blocks and transactions together, or in separate places. How your Monero node implementation stores things is only a performance consideration.

There is no need for blocks to always be stored alongside the transactions they logically 'contain'. By using transaction identifiers, it makes it easy for blocks and transactions to be stored in different places for performance reasons, should an implementation choose to do so.


Genesis block successfully created but not visable in wallet-cli I created a testnet environment, successfully created the genesis block, however don't see it reflected in the wallet-cli with the correct genesis wallet.

Is there perhaps a unlock time on the genesis block?

unlock time (varint, height, 60 here)
3c

I loaded up a little test blockexplorer and checked that the genesis block was created successfully.

i had the same problem. The thing is that the wallet does not process the genesis coinbase tx.

To process it,  edit the src/wallet/wallet2.cpp after line #2131.

add

if ((m_blockchain.size() == 1) && (start_height == 0)) {
    cryptonote::block genesis;
    generate_genesis(genesis);
    if (m_blockchain[0] == get_block_hash(genesis)) {
      LOG_PRINT_L2("Processing genesis transaction: " << string_tools::pod_to_hex(get_transaction_hash(genesis.miner_tx)));
      std::vector o_indices_genesis = {0}; //genesis transaction output
      process_new_transaction(get_transaction_hash(genesis.miner_tx), genesis.miner_tx, o_indices_genesis, 0, genesis.timestamp, true, false, false, {});
    } else {
      LOG_ERROR("Skip processing of genesis transaction, genesis block hash does not match: " << string_tools::pod_to_hex(get_block_hash(genesis)));
  }
 }

reference : gist.github.com/atanmarko/63815fc18a936d8a985a37e64d84b06d

make sure the one-time pub key at the genesis-hex-tx is well generated. if it is so , with this code you should see the reward on your wallet.

if it not so see

Monero Genesis transaction & nonce - clarification

hope this helps you


How to remove monero-wallet-gui from mac I am entirely new to crypto and monero so I figured I would download the monero-wallet-gui from getmonero.org. I downloaded the mac version and then I started the syncing process not knowing what it was. I noticed my computer was running slowly so I checked my computer's storage.
My storage was almost 100% full!
I am assuming this is because I was unknowingly downloading he entire monero blockchain onto my computer.
Anyway, long story short I just want to remove the monero-wallet-gui and everything that I synced from my computer. I have no idea how to do this. I really would like my computer to go back to the way it was before I downloaded the monero-wallet-gui from getmonero.org.
I did remove the monero-wallet-gui app from my applications folder. I am not sure if that fixed the issue though.
Please help as my computer is running very slowly now unfortunately.
Thanks!

The blockchain (on Linux and Mac) is stored at ~/.bitmonero. See this answer which describes how to find it, then simply delete. If you're short on storage you can run a pruned blockchain instead, or even connect to a remote node.


Monero missing from pool payout to exchange wallet I haven't found anyone having this problem. I setup Dwarfpool to payout to my exchange wallet. The payment never arrived. Here is my transaction ID:

0a5e6ba7332571b2e4258ec9e46d88307d26aaf0e7250812ec2b64b571b93a2c

And the display on a block explorer:

Timestamp: 0    Timestamp [UCT]: N/A    Age [y:d:h:m:s]:
Block: N/A  Fee (per_kB): 0.000031650000 (0.000018289842)   Tx size: 1.7305 kB
Tx version: 2   No of confirmations: 0  RingCT/type: yes/4
Extra: 0209010eda6590c24532c101239f2158a7bcc28e1fce9621f67340db8eb03bd47f5f76d6f26bcc8649de01e1
2 output(s) for total of ? xmr
stealth address amount  amount idx
00: 1e0828697af02dddbcd2536d5fb10ce05043065b8932239e43df47ff21bfa924    ?   N/A of 10958872
01: 517e9f04e298c5b7ee94129d8b72be7aefc9a1cadbd234fda9a7a2d959085b15    ?   N/A of 10958872

You need to take this up with the pool that sent your transaction and prove the tx was never mined.

You can check various nodes (https://moneroworld.com/#nodes), via the RPC interface, to prove the tx has not been mined by running the following from the command-line:

curl -X POST http://node.moneroworld.com:18089/get_transactions -d '{"txs_hashes":["0a5e6ba7332571b2e4258ec9e46d88307d26aaf0e7250812ec2b64b571b93a2c"]}' -H 'Content-Type: application/json'

For which you will get output like:

{
  "missed_tx": ["0a5e6ba7332571b2e4258ec9e46d88307d26aaf0e7250812ec2b64b571b93a2c"],
  "status": "OK",
  "untrusted": false
}

Which shows the tx is missing (missed_tx).

You can also prove it is not even waiting to be mined by showing that the tx is not even in the networks tx pool by running:

curl -X POST http://node.moneroworld.com:18089/get_transaction_pool | grep 0a5e6ba7332571b2e4258ec9e46d88307d26aaf0e7250812ec2b64b571b93a2c

Which will give no results.

Therefore, the pool needs to credit back your account.


Upgraded to v0.11.0.0 on MacOS Upgraded from beta 2 to MacOS gui wallet v0.11.0.0 on MacOS 10.12.6.  Saved the old beta 2 config in a safe directory.  Moved the extracted 64bit Mac gui wallet v0.11.0.0 in my application folder.  Started gui and let the blockchain complete syncing.  I'm showing a lock icon to the left of my balance.  The Unlocked balance is showing the full value of the wallet.  Does the Lock icon signify that my balance is locked?  If so, how do I fix this?

Thanks

The Unlocked balance is showing the full value of the wallet. Does the Lock icon signify that my balance is locked? If so, how do I fix this?

It sounds like everything is working as designed. Unlocked just means that your coins are available for spending. If you were still syncing or if all of your available outputs were spent <10 blocks ago your balance would be locked.


Why do I need to refresh my wallet? If I run a full node on the same computer as simplewallet why do I need to "refresh" my wallet to see new incoming and outgoing transactions?

Will the new official GUI now in development eliminate the need to do this by better integrating the wallet with the full node?

"Refreshing" means telling the wallet to check the blockchain to see if any transactions were sent or received in any blocks added to the chain since it last looked. This makes it clearer why this has to be done,

If you want the wallet to refresh automatically, try set auto-refresh 1 in thw wallet. This needs a recent enough wallet, and it might not be in the binaries yet.

The GUI will almost certainly have the ability to auto refresh too. And if not, it will be added pretty fast.


What effect has the increase of minimal ring size from 5 to 7? How will the scheduled increase of ring size in the current hard fork v7 affect security/privacy, transaction size/fees and verification time?

Is there a reason why exactly 7 and not 10 or maybe 20?

Privacy: Outputs are where amounts of Monero are stored on the blockchain. When you spend one of your outputs in a transaction, it cannot be known which of 7 different source outputs you're really spending. Therefore your anonymity set grows by 40%. Another advantage is that outputs that you receive will now more likely be used as decoys in other people's transactions, which adds to your plausible deniability.

Transaction size: A typical Monero transaction would be 13,792 bytes, up from 13,524 bytes. This is an increase of 2.0%.

Transaction fees: Monero uses KB boundaries when calculating fees. Since a typical transaction would still be counted as a 14KB transaction whether it has 5 or 7 ring members, in most cases the fee would be unchanged.

It is of course possible that, depending on your specific transaction (especially if you're spending many outputs in the same transaction), that the transaction fee would increase. For example, if you're spending 10 outputs in a single transaction, the fee would increase by 6%.

Transaction verification time: Ring signature verification time is directly proportional to the number of ring members. Verification of the MLSAG ring signatures (which obfuscate the source outputs) would therefore increase by 40%. However, MLSAGs are not the only part of the transaction that needs to be verified. There is also a range proof Borromean ring signature required for each output created.

By my estimations, a Monero transaction currently requires about 70ms to verify on a single core, of which about 60ms is spent verifying just the output range proofs. Therefore overall verification time would rise from approx 70ms to approx 74ms, which is a 6% increase.

The choice of 7 is a tradeoff between privacy and verification time.

Later this year, the Borromean ring signatures will be replaced with Bulletproof signatures. This may very significantly reduce transaction verification times and provide for the possibility of increasing ring sizes further.


Is Monero amenable to ASIC mining? Is Monero ASIC resistant?  If not, are there already people out there running on ASICs?

Cryptonight (the PoW hash used by Monero and most Cryptonote coins) does not lend itself well to ASIC development, for the following reasons:

Cryptonight requires 2 MB of fast memory to work. This means that parallelizing hashes is limited by how much memory can be crammed in a chip while keeping cheap enough to be worth it. 2 MB of memory takes a lot more silicon than the SHA256 circuitry, for instance.
Cryptonight was designed to take advantage of the AES-NI instruction set, which uses existing hardware circuitry on modern x86_64 CPUs to speed up AES operations (Cryptonight is based on AES, a modern symmetric cipher). This means that at least some of the work done by Cryptonight is already being done in hardware when run on modern consumer machines.
There has been some talk of replacing the PoW algorithm with Cuckoo Cycle (an alternative PoW hash designed to be ASIC resistant too, see details about it at https://github.com/tromp/cuckoo). If such a switch happened, the R&D cost of developing a Cryptonight ASIC would be lost in large part, since they could not be used for Monero anymore.

So, no, there are no ASICs for mining Monero as of now, and probably will not in the near future either.


How much larger are Monero transactions compared to the average Bitcoin transaction? We know that because of the way Monero's privacy works, transactions are larger than a Bitcoin one, but how much larger on average are they compared to Bitcoin transactions? How will this affect the growth of the blockchain into the future? Mechanisms like the flexible blocksize are geared to encourage smaller blocks, but are there other mechanisms that can help reduce the size of the blockchain now, or into the future, like Bitcoin's ability to prune the blockchain for certain applications?

Most non coinbase Monero transactions are currently around 2,000 bytes (but with significant variation) which is somewhere in the neighborhood of 8 times larger than most Bitcoin non coinbase transactions.

The reason why RingCT should help eliminate the need for extremely large Monero transactions is that RIngCT no longer will require the use of outputs of many different denominations.


Code that checks for 'rogue block' I read recently about, for lack of a better term, a rogue block that was recorded into the blockchain that forked the chain but it didn't split exactly. I read that there is some code in later versions that looks for that bad block, but that there's no telling if that bad block is still out there. Can someone speak more about the code that checks for that? Is there any way to manually check or run that code/command to check, and verify for myself? Any additional info about that block is appreciated!

It concerns block 202612. There's a good explanation from Fluffy in this similar question: What happened at block 202612? You can find the references to block 202612 in the code on GitHub.


Is Monero compatible with Windows Subsystem for Linux I built monerod from github source.

coretests and unit_tests failed

monerod —dB-salvage

"Attempts to get hash from heigh 0 failed. - - hash not in db"

Before doing this I downloaded Linux, 64-bit from Getmonero.org which also aborted.

Is monerod compatible with WSL ?

Monero has native support for Windows, so I doubt any of the developers would want to waste time trying to support WSL (and there are no developers I'm aware of that are interested in working on this).

Running Monero natively on Windows is always going to have far better performance than running through something like WSL.

There is one aspect that is mentioned in the README however, and that is the depends build system, which produces reproducible builds:

  Using depends might also be easier to compile Monero on Windows than
  using MSYS. Activate Windows Subsystem for Linux (WSL) with a distro
  (for example Ubuntu), install the apt build-essentials and follow the
  depends steps as depicted above.

Worth taking note of the word "might" from the above quote and also that the Monero releases do not currently use the depends builds (though hopefully will soon).


ccminer hashing speed not onpar with minergate-gui I have NVIDIA-TESLA-K40, I was using MinerGate v6.6 GUI version -Hash speed of 290KH/S. where as ccminer only giving 120 H/S. lot of difference, from Kilo hash/sec to hash/sec. How to optimally use TESLA K40

i experienced similar Hashrates with MinerGate v6.6.
After updating to 6.7 the Hashrates were more accurate compard to them from ccminer.

From my perspective it was a wrong hashrate which was displayed.
You didn't name your operating system, but you could do a double check hashrates using linux ccminer vs windows ccminer.

Best regards


Is there some way to prove how long my Monero have been in my wallet? I am using simplewallet. Is there some way to prove how long these funds have been in my account?

Question adapted from here.

By using simplewallet, and running show_transfers command, you will get a list of all transactions, with their corresponding block height and transaction IDs. Block height is like a timestamp, and by using a block explorer, we can easily find when was that block found (example). You could also fetch the details yourself by running bitmonerod and using the command print_block <n>, which would give you details of the block with block height n. This way, you don't have to trust a centralized service. The resulting timestamp will be printed as epoch Unix time, which can be converted to human-readable DateTime.

However, the above doesn't really prove it to anyone except yourself because you if you just c&p the simplewallet log to some auditor as "proof", there's nothing preventing you from fabricating the result.

To really prove when you received certain funds, you'd have to give up your view key to the auditor. He could then create a watch-only wallet by using simplewallet and by using the show_transfers command, see only the incoming transactions. However, this doesn't tell him if you spent those funds in the meantime.
To prove that you still have the funds, or to show when you've spent them, you'd then need to export the key images and hand them over to the auditor who would then import them into his watch-only wallet created with your viewkey. This was described here, but the function to import/export key images has not yet made it to the official release. It could be made available by compiling latest repo from source, though.


Can you spend a portion of the balance of a cold storage wallet? When you have a Bitcoin paper wallet, you have to send the entire balance out of the wallet if you want to spend a part of it, because the change will not be sent back to the wallet.  I have been unable to tell if there is a similar issue with Monero paper wallets. Is this different for Monero ?

In Monero the change is sent back to the same (public) address. Therefore, it would, in theory, be possible to spend a portion of the balance of a cold storage wallet. However, currently the binaries have no feature available to sign your transaction offline. A possible solution to this is compiling yourself and using this patch. From the patch:

  This change adds the ability to create a new unsigned transaction from a watch only wallet, and save it to a file. This file can then be moved to another computer/VM where a cold wallet may load it, sign it, and save it. That cold wallet does not need to have a blockchain nor daemon. The signed transaction file can then be moved back to the watch only wallet, which can load it and send
  it to the daemon.

  Two new simplewallet commands to use it:
  sign_transfer (on the cold wallet)
  submit_transfer (on the watch only wallet)

  The transfer command used on a watch only wallet now writes an unsigned transaction set in a file called 'unsigned_monero_tx' instead of submitting the tx to the daemon as a normal wallet does. The signed tx file is called 'signed_monero_tx'.

It should be noted that merging the patch results in merge conflicts, which you'd have to go through one by one.

The patch is currently being ported to Ring CT and therefore will likely be merged into master in conjunction with Ring CT.


Failure of an exchange or pool to upgrade to Monero v0.10.1 by January 5th According to the release notes:

  The main thing to know is that you should 0.10.1. Otherwise, you will get booted off the network. If you are mining, make sure the pool you are mining on has upgraded its daemon. Only this version will work after the fork of January 5.

What is the worst case scenario if a pool or exchange does not upgrade in time and is forked off the network?

Would miners be at risk of losing anything other than the block rewards generated on the wrong fork?

Would users of exchanges be at risk of anything more than failed transactions if they send XMR to or from an exchange on the wrong fork? Could exchange users lose XMR?

How can a user of an exchange or mining pool verify that the exchange or mining pool has upgraded to Monero v0.10.1 - Wolfram Warptangent?

Miners will lose what they would have gained if the pool had been on the right fork: any block mined on the wrong fork will eventually get reorganized away. If the pool's on the wrong fork, any money from the wrong chain it sends miners will be just that: on the wrong chain. It will therefore only appear in wallets running the wrong chain. This will hopefully not include the miners themselves, and it will certainly not include ecxhanges.

Users sending to an exchange from the wrong fork will not see any money arrive. But then they won't have lost their money, since it'll still be there in the correct fork, so they'll see their money back once they update. Users can't sent from exchanges on the wrong fork, unless the exchange itself is on the wrong fork, and that's unlikely to happen.

You can't directly check whether a third party has upgraded. Best you can do is ask. Once the chain has its first ringCT tx, you'll quickly see who has updated and who hasn't, but that may be a bit late. There is close to a month to update though, so there should not be any issue, given the update is uncontroversial, and of obvious benefit to everyone.


Is there any remote node list to connect simplewallet? Someone previously asked how to connect simplewallet to a remote node here:

How do I connect monero-wallet-cli to a remote node?

However, is there any list of remote nodes available and their current status?

Check out https://moneroworld.com/#nodes for a current list and instructions.


Starting monerod v0.11.1 Exception in main! Failed to initialize p2p server. Failed to deinitialize core I'm on ubuntu 14.4 and monero used to work, but now I'm getting the following error. I'm not sure how to fix this.

2017-12-21 17:04:20.897     7fe75c63a780    INFO    global  src/daemon/main.cpp:279 Monero 'Helium Hydra' (v0.11.1.0-release)
2017-12-21 17:04:20.898     7fe75c63a780    INFO    global  src/daemon/protocol.h:55    Initializing cryptonote protocol...
2017-12-21 17:04:20.898     7fe75c63a780    INFO    global  src/daemon/protocol.h:60    Cryptonote protocol initialized OK
2017-12-21 17:04:20.906     7fe75c63a780    INFO    global  src/daemon/p2p.h:63 Initializing p2p server...
2017-12-21 17:04:21.767     7fe75c63a780    INFO    global  src/daemon/core.h:89    Deinitializing core...
2017-12-21 17:04:21.771     7fe75c63a780    ERROR   daemon  src/daemon/core.h:94    Failed to deinitialize core...
2017-12-21 17:04:21.781     7fe75c63a780    INFO    global  src/daemon/protocol.h:77    Stopping cryptonote protocol...
2017-12-21 17:04:21.781     7fe75c63a780    INFO    global  src/daemon/protocol.h:81    Cryptonote protocol stopped successfully
2017-12-21 17:04:21.781     7fe75c63a780    ERROR   daemon  src/daemon/main.cpp:287 Exception in main! Failed to initialize p2p server.

Make sure you don't have another monerod service running. I had to kill mine and start it again to get it to work.

ps -aux | grep monero
kill < id >

Get the id from ps and then kill it.


Does Multisig have any privacy drawbacks? Does implementing multisig at the protocol level raise any privacy concerns? In other words, because several people are now involved in a trx, does that raise the probabilities of de-anonymizing the trx? If you know lets say that 4 people were involved in a transaction, does that make it 4x easier to trace the transaction? Or if you know that someone uses multisig at a particular exchange, can you use that fact to narrow down the pool of possible trxs?

No, it doesn't. Monero multisig addresses look and work exactly the same as any other Monero address, and so do transactions. All the "magic" is done off-chain between the wallets involved. The reason that multisig has not been implemented pre-RCT is because the work would have been wasted since non-RCT transactions are becoming obsolete.

Bytecoin, Monero's predecessor implemented multisig (or at least had a documented method for implementing multisig), but it was completely absent any privacy measures so all amounts and so on could be easily deduced as it could not be used without mixin = 0. Ring signatures (together with CT) on the other hand enables the same degree of privacy regardless of whether it is multisig or not. Multisig transactions should be indistinguishable from a normal transaction on the blockchain.


How can I set a payment ID of 64 characters hex on wallet cli? I´ve been asked to send a 64 digit payment ID. I used the command:

  integrated_address

but it shows only the 16 digit payment ID. Thanks! :)

Payment ID is really a message attached to the TX. Usually it's only important when sending to exchanges, services etc. because they use just one address for receiving funds from different users and PID is the only way they can tell them apart.

Sending

If you're sending to an integrated address then just use: transfer [address] [amount]. You can recognize it's an integrated address because it's longer (106 characters vs 95 in regular)

If you're sending to a regular address + payment ID, then be sure to use: transfer [address] [amount] [paymentID]. Don't forget the payment ID in this case!

Receiving

If you want to receive something with the PID attached, use integrated_address and give it to your sender. It will generate a random 16-digit PID and encode it together with your regular address into the integrated format. Then, you'll be able to tell apart incoming payments by using payments [PID] command to filter according to payment ID.

To receive something with 256-bit PID, just generate random 64 hexadecimal "digits" by any means you like! Then give both your regular address and the payment ID to the sender, and he must be sure not to forget to attach it in the command when sending. That's why integrated format is more convenient.


Run monero-wallet-rpc in background in Ubuntu? Is there a flag that i can pass to monero-wallet-rpc so it runs in the background? I tried --detach since thats used in monerod but it didn't work. Any unofficial way to do it easily?

I am running Ubuntu 16.04.

If you can't find a flag and you run linux, you can use the usual way of sending an application to the background.

Start the application in the background:

./monero-wallet-rpc &

Additionally, don't show output on the terminal:

./monero-wallet-rpc > /dev/null 2>&1 &

If you connect via ssh to launch the application, it will exit when you close the ssh session - you can use nohup to keep the application running after the ssh session is closed (the first command will put the output in nohup.out, the second will ignore the output):

nohup ./monero-wallet-rpc &
nohup ./monero-wallet-rpc > /dev/null 2>&1 &


What is the public spend key used for? I know if you give your public view key to someone, they can see all the incoming transactions to an address. But it does not show the output transactions of that address. Is this what the public spend key is for?

The public view key doesn't allow seeing the incoming transactions. The private view key does that.

In fact, the public view key and public spend key are contained in the Monero address you give to people so that they can send you funds.

The public spend key is used (together with the public view key) to generate the public key of an output.

To generate the private key of an output (to spend it or to generate its key image to check if it has been spent), you need the private view key and the private spend key of the wallet.

Check What significance does the wallet public spendkey and public viewkey have in a transaction? for more details on how the public and private keys of an output are generated.


Is making a key image public equal to giving the monero in that output away? So I read about proving your balance to an auditor, and someone suggested that you can share your view key, exposing all outputs that you received on that address.

If you then give out all key images (created from your private spend key & the output), both spent and unspent you can prove how much monero is on a specific address.

If this reasoning is correct, can the auditor use the key images from the unspent outputs to spend the coins?

No, he can not.

An "output" is actually a one-time key-pair. It consists of an one-time public key, which resides on the blockchain, can be seen by everyone (but it can be matched to a wallet only by having the private view key and the public spend key), and acts as a container which holds some funds. It has a corresponding private key, which can be recovered only by the owning wallet.

This one-time private key is used to sign a transaction which spends that particular output.

Knowing a key image won't tell you this one-time private key, but it will only allow you to check that the same one-time private key has not been used more than once. You can't determine a private key from a key image, but knowing a key image you could tell if a 2nd signature was produced using the same one-time private key - without revealing the key itself. The mechanism is described on page 8 in the CryptoNote whitepaper.

To summarize:

Wallet recognizes an output, using private view key and public spend key (page 7 of WP, check if P = P')
Wallet recovers the one-time private key, using private spend key (b) and shared secret (aR) known from step 1. (page 8 of WP, x = H_s(aR) + b
Wallet computes the key image, using the one-time key-pair (I = xHp(P)). (page 9 of WP)
Wallet constructs a ring signature using one-time key-pair, foreign one-time public keys and the key image.

Trick is, to produce a proper signature, you need all 3 ingredients. Knowing the key image would let you know only if the same one-time private key tried to produce a 2nd signature. Somehow knowing the foreign one-time public keys would let you know which is the "real" public key getting spent (the remaining one). Knowing the one-time private key lets you produce a signature (you can construct a key image from it, and you can choose any number of public keys to ring yours with). Knowing only the public part of the one-time key and the key image lets you monitor for spent status of that output.

To answer the question, when you disclose a key image you kind of pre-announce a signature but never actually make it. The one who has only the key image and the matching one-time public key can now monitor for when you do make a signature which spends the output.


Is there an example in another language or even curl on the binary daemon calls? I am searching for an example preferably with curl on how to call the binary apis
/getblocks.bin,  /gethashes.bin and so on.

Is there somewhere an example besides the c++ code?

I would love an example in java or even curl.

Thanks

The difference between JSON RPCs and binary RPCs is the format of the data in the HTTP POST request and in the server's answer.

JSON RPCs use strings representing JSON objects.

Binary RPCs use a "portable binary storage" serialization (it starts with the header 011101010101020101 and the data is organized in a kind of tree that can contain sections, integers, booleans, strings, arrays, etc.). The files defining it are in contrib/epee/include/storages/ in the Monero source code (portable_storage.h, portable_storage_from_bin.h, portable_storage_to_bin.h).
The parameters and types used by a specific binary RPC can be found in src/rpc/core_rpc_server_commands_defs.h.

So, to use binary RPCs with a language other than C++, most of the work is in implementing the functions to serialize and deserialize the "portable binary storage" format. Then, for example, to call getblocks_by_height.bin you would use something like:

parameters = serialize_to_binary_storage(array_of_block_heights)
answer = rpc(host, port, "/getblocks_by_height.bin", parameters)
blocks = deserialize_from_binary_storage(answer)

I wrote a lisp library of Monero tools with an implementation (experimental) of the "portable binary storage" serialization. It could be used in addition to the C++ code to help writing implementations in other languages. It can be found in https://github.com/glv2/cl-monero-tools (src/serialization/constants.lisp, src/serialization/storage.lisp). There are also a few examples of RPCs in src/rpc/daemon.lisp.


Why limit the CRC by a modulo of 24 rather than 1626? When looking through Monero's source code I was intrigued by the choice of the Mnemonic's 25th word which is defined as follow:

  words += (' ' + words_store[create_checksum_index(words_store, language->get_unique_prefix_length())]);

Which calls:

  return result.checksum() % crypto::ElectrumWords::seed_length;

In short, a modulo of 24 is applied on the CRC32 result which then represents the index of a word in the current Mnemonic Seed.

Why was the choice made to reduce CRC32's effect by applying a modulo 24 (and pick a word from the Mnemonic Seed) rather than a modulo 1626 (and pick a word from the dictionary)?

Why was the choice made to reduce CRC32's effect...?

Well it doesn't actually reduce the intended effect in this use-case. It's purpose is to quickly detect if a wrong set of words was entered, nothing more.

Also, as @user36303 commented above regarding cryptosteel, a nice side effect is you can reduce the seed words from 25 to 24 words by simply writing the word that happens to also be the checksum upside-down.


What is the lowest fee one can pay to make a monero transaction? Is it possible to make a transaction without paying a fee or what is the lowest fee amount one can send with?

How long does it take to get your coins back if the network does not accept your transaction?

According to the monero.how calculator the lowest priority (1x) fee is currently about .00168 XMR assuming 1 input, 1 output and a ring size of 5

With a more common  1 input, and 2 outputs and a ring size of 5 the lowest fee is currently about .00312

With 2 input, and 2 outputs and a ring size of 5 thelowest fee is currently about .00336

Generally transactions that are not accepted by th network are dropped from the txpool after 24 hours

EDIT: As JollyMort stated in the comment below the min network relay fee is codified  based on the transaction size divided by the block size multiplied by the block reward and a set multiple:

((TX size)/(block size)) * (block reward) * 1.2%

Individual wallet clients are free to label the different fee priority levels however they like but the math remains the same. Monero.how chooses to refer to the 1x priority fee as "lowest" and the official GUI refers to the .25x priority fee as "slow". The answer is still the same as defined in code.


How can I permanently ban a peer? I have to repeatedly ban the same peer because it eventually (too soon) gets unbanned and then my daemon output spams me with "peer claims higher version that we think."  This issue persists with this one peer, so I'd like to ban them permanently.

There is no command to permanently ban, but you can set a lengthy ban time using the daemon command ban <IP> [<seconds>], or using the RPC method set_bans.

So if you set the seconds parameter to 4294967295, that will ban for just over 136 years.


What is key64 data type supposed to represent? In the codebase I saw key64, I am guessing it is 64 bytes array, but what is it meant to represent in genBorromean for example?

A point/number?

typedef key key64[64]; [ref]

So it's an array of 64 key's.

And a key is a struct that holds 32 bytes [ref].

Quoting the comment for the key struct:

// Can contain a secret or public key


How to parse transaction extra field to extract pubkey Is there some description of transaction extra field? From rpc-request to blockchain I have tx object with extra(Uint8Array). In monero repo I found how they parse extra field, but don't understand in details. I need to extract transaction public key to select my self transactions and calculate balance. Then I hope to find some way to create spending transaction.

The txextra field specification is here: https://cryptonote.org/cns/cns005.txt

That document references "varints", which are documented in section 1.2 here: https://tukaani.org/xz/xz-file-format.txt

You should read through all txextra sub-fields until you arrive at the field with tag 0x01, and the 32 byte tx public key will follow.


This address received 94.502 monero, with 550 confirmation(s) This address received 94.502 monero, with 550 confirmation(s).

Could you please help me understand what this means? It's been a while and the amount is still not received.

Thanks in Advance.

This means that particular address received that amount of monero in the transaction you're looking at, and that this transaction was mined with that many blocks mined after it.

If you're not seeing this in your wallet, then you need to update your wallet to at least that block. This could be your wallet being out of date compared to your daemon, or your daemon being out of date compared to the network (or both). See questions about these things if that's the case.


Can I process incoming transfers from the daemon RPC? Can I process incoming transfers using only the daemon RPC and my private view key (so without a wallet)? Or how can I decrypt vout from the get_block output JSON?

The daemon (monerod) has no wallet functionality, it's for working with the blockchain. To determine incoming transactions for a given wallet (e.g. viewable and spendable using your wallet keys), you would need to scan the blockchain for outputs owned by your wallet and check their spent status.

A full scan (in pseudo code) looks something like follows (ignoring subaddresses):

unspent = [] # array which will hold tuples of (tx, output)
a = hex2bin(v) # my private view key
A = hex2bin(V) # my public view key
b = hex2bin(s) # my private spend key
B = hex2bin(S) # my public spend key

for each block in blockchain:
    for each tx in block:
        R = get_tx_pubkey(tx)
        for each output, i in tx:
            if is_mine(output, R, i) and not is_spent(output, R, i):
                unspent.append((tx, output))

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

is_spent(out, R, i):
    x = Hs(8aR||i) + b
    I = xHp(xG)
    return has_key_image(blockchain, I)

get_tx_pubkey(tx):
    return key from tx.extra

Given the blockchain is hundreds of thousands of blocks each with N transactions, a full scan is pretty intensive.

Also, you cannot perform the above with just the daemon RPC method get_block, because other than the miner tx, get_block will only get you the tx hashes - not the actual tx data. Therefore you'd also need to use get_transactions. And of course, calling these JSON methods repeatedly over the whole blockchain would be very slow.

If you are looking to develop your own wallet implementation, there are the necessary binary methods, which remove the JSON parsing overhead, but really, this is why there is a wallet RPC interface - monero-wallet-rpc. That handles all the lower-level stuff and exposes a useful RPC interface for higher-level wallet functionality.

If you just want to process a single blocks transactions, with only the daemon JSON RPC interface and your wallet keys, you can use get_block (to get each tx hash) and get_transactions (to get the tx pubkey and outputs for each tx). Then you'd need to implement a method like is_mine above to check if you owned a given output and a method like is_spent above to check the spent status (and for has_key_image you could make use of is_key_image_spent).


Is it possible to set up a short cut to launch monerod with a flag and cli-wallet at all at once? Eack time I use monero I need to start monerod with a flag (I use a different port) and it is a bit tedious sometimes.

Is it possible to set up a short cut to launch monerod with a flag and cli-wallet at all at once?

I use mac os and I am not very good with command line.

I'm on macOS and I do the following to accomplish what you are asking:

Create a file called run_monerod.sh that contains the following:

#!/bin/bash
/Full/path/to/monerod --rpc-bind-port 11111

I create this from the Terminal by typing nano run_monerod.sh and then typing the other bit, then saving with cntl+x, y, enter. Finally I make the shell script executable by typing

chmod +x run_monerod.sh

Now I can call it with

./run_monerod.sh

and it runs detached on a different port, instead of having to type all that in every time.

Okay, so what's going on here?

the #!/bin/bash is called the "shebang", and basically tells your Mac "hey, this is a bash script." It's not really that necessary, but useful nonetheless.
nano is just a really simple text editor that can be used from the terminal
chmod +x says "make this executable."

Now, to run your wallet, you could do something similar... Make a file called run_wallet_cli.sh with the same shebang but instead of including the stuff for monerod, include the stuff for monero-wallet-cli that you usually type in the terminal when you're opening the wallet. Lastly, make it executable. When you want to use your wallet, run the monerod script, then once it's open, run the wallet script.

Bonus since macOS:

If you want to be able to click-to-run your scripts instead of running them in the command line, save them as .command instead of .sh. then just click on them in the Finder and have at it!


How does check_hash work in difficulty.cpp? I'm trying to dig into the monero codebase and understand how hashes are validated to be the solution for the current block. The below code returns true if the hash is valid, but I'm trying to understand why. I can tell it does a quick check on the highest word, but the rest I cannot fully grasp.

What I'd like to accomplish is to determine if the hash was close to the solution, even though it was not valid. What I did try was to make a copy of this function, removing the initial high word check, and reducing the difficulty variable that was passed (divide by 4) which returns true more often than when a block has actually been found.

I've also tried looking into the xmr-stak code, as what I'm really trying to accomplish is to get a list similar to the "Top 10 best results found".

bool check_hash(const crypto::hash &hash, difficulty_type difficulty) {
  uint64_t low, high, top, cur;
  // First check the highest word, this will most likely fail for a random hash.
  mul(swap64le(((const uint64_t *) &hash)[3]), difficulty, top, high);
  if (high != 0) {
    return false;
  }
  mul(swap64le(((const uint64_t *) &hash)[0]), difficulty, low, cur);
  mul(swap64le(((const uint64_t *) &hash)[1]), difficulty, low, high);
  bool carry = cadd(cur, low);
  cur = high;
  mul(swap64le(((const uint64_t *) &hash)[2]), difficulty, low, high);
  carry = cadc(cur, low, carry);
  carry = cadc(high, top, carry);
  return !carry;
}

Edit: With the help from glv, this is what I have:

uint64_t get_result(const crypto::hash &hash, difficulty_type difficulty) {
  uint64_t low, high;
  mul(swap64le(((const uint64_t *) &hash)[3]), difficulty, low, high);
  return high;
}

To my understanding, this is returning the highest word when multiplying the hash and the difficulty. So, in order to find a block, this value must be zero, but to find a close enough hash, I am checking that this value is below 4 in miner.cpp:

result = get_result(h, local_diff);

if(result < 4) {
  // we have a close answer
}

The check_hash function returns true if hash * difficulty < 2^256 and false otherwise.

From src/cryptonote_basic/difficulty.h:

/**
 * @brief checks if a hash fits the given difficulty
 *
 * The hash passes if (hash * difficulty) < 2^256.
 * Phrased differently, if (hash * difficulty) fits without overflow into
 * the least significant 256 bits of the 320 bit multiplication result.
 *
 * @param hash the hash to check
 * @param difficulty the difficulty to check against
 *
 * @return true if valid, else false
 */
bool check_hash(const crypto::hash &hash, difficulty_type difficulty);


How many Monero is mined in a day on average as of 2020 Jan? Monero blocks are mined every 2 minutes. But how many are mined in a day on average? Is each mined block less the previously mined?

The amount of new Monero created each day gradually reduces until it hits 0.6 XMR per block (the tail emission). A great answer on this subject can be found here.

  Monero blocks are mined every 2 minutes. But how many are mined in a day on average?

One block mined every 2 minutes is 720 blocks per day.

As of this moment, 1.99 XMR are produced for each block (so 1432 XMR per day).


Is there a way to tell how many coins are currently generated? Is there a way to show how many coins have been generated so far taking in to account the transaction fee's paid by senders?

For example if 1000 coins were generated ( issued ), and 10 transactions have occurred with a transaction fee of 1 coin each, is there any way to know that there are 990 coins available in the current money supply?

Or more simply put, is there a way to know how many coins are currently in circulation? ( Including the percentage of coins given to miners at the time from the transaction fee's )

( Please excuse my ignorance as I am kinda new to crypto )

While running monerod, type in the following command:

print_coinbase_tx_sum <start height> <block count>

This will sum all the coinbase transaction outputs for the blocks defined by the arguments, while also showing how much is from emission and how much from fees. Example output of the command print_coinbase_tx_sum 0 1000:

Sum of coinbase transactions between block heights [0, 1000) is 17583.808487522075 consisting of 17583.806159241255 in emissions, and 0.002328280820 in fees

Also note that the fees don't disappear but go to the miner who wins the block, so the total available supply will be the <x> in emissions part of the output.

Looks like the command is not really optimized. I've run it from 0 to 1244879 to find the current supply and it's been running for a few hours  (ongoing).


Does Monero offer an equivalent of Check Lock Time Verify transactions? Does Monero offer an equivalent of Check Lock Time Verify (CLTV) transactions? If not are there any major CryptoNote or RingCT specific obstacles that would prevent such a feature from being added in the future?

CLTV transactions would have many privacy focused applications.

There is a command to lock coins when you make a transaction by RPC in simplewallet. I don't think it's implemented in the command line interface. It's the unlock_time parameter in the JSON RPC transfer, described in the source code here:
https://github.com/monero-project/bitmonero/blob/eb1b87d2393f34caa9698bec23a4b78fa57da752/src/cryptonote_core/cryptonote_basic.h#L169

uint64_t unlock_time;  //number of block (or time), used as a limitation like: spend this tx not early then block/time

I think if you pass it an integer smaller then the current unix time in seconds, then it will interpret it as a number of blocks, and if it is larger than the unix time then it is interpreted as a time when the coins can be spent, or if it is zero then the funds can be spent immediately.

You can find a description of the JSON format for making RPC transfers and an example of one here:
https://wiki.bytecoin.org/wiki/Simplewallet_JSON_RPC_API


What does the "default" priority (priority = 0) do in monero-wallet-cli? Here's a paste selection from the set command in monero-wallet-cli.

priority [0|1|2|3|4] - default/unimportant/normal/elevated/priority fee

With priority set to 0, what does that actually mean in practice?  Does that mean a normal priority level is always used?  Or maybe a normal priority level is normally used, but a bigger mempool will provoke an elevated fee?

Another way to ask this question is: if the default priority is normal, why not have the options as priority [1|2|3|4] - unimportant/normal/elevated/priority fee, with the default setting as 2?

With priority set to 0, what does that actually mean in practice?

First note that the priority levels unimportant, normal, elevated, and priority correspond to multipliers of x1, x4, x20, and x166, respectively.

With priority set to 0 it will use the default fee multiplier, which is x4. In addition, the fee priority level is static, i.e., it won't change automatically if the mempoool grows and users have to set it manually. Transaction using the default priority will give miners sufficient incentive to raise the blocksize limit.  By contrast, if everyone would use the lowest priority (x1), miners wouldn't have sufficient incentive to raise the blocksize limit and the mempool would, most likely, become clogged.

  why not have the options as priority [1|2|3|4] - unimportant/normal/elevated/priority fee, with the default setting as 2?

The current implementation was probably designed for convenience. That is, after manually changing the fee priority level, it is probably more convenient to switch back to the default level, as it implies the standard / default setting recommended. By contrast, the term "normal" might be less efficient in conveying this.

More information about fee multipliers and the adaptive blocksize algorithm can be found here.


What language(s) should a new coder learn to contribute to Monero? What language(s) would be best to learn for someone interested in contributing to XMR (and, less relevantly, Bitcoin)?

I have a long term goal to contribute more and more significantly to these awesome projects but I have a long way to go.

I'm not sure what I want to code but ideas will come if I start learning...

Monero is for most parts written in C++ and C. That is, currently 81.2% of the code is written in C++, whereas 15.9% of the code is written in C. The remaining languages are CMake, Shell, Python, Perl6, and Other. The "language distribution" can be seen here (click on the purple/pink bar to see the distribution). Thus, if you want to contribute to Monero you, preferably, ought to learn C++ and C. For Bitcoin this relatively similar. One small deviation is that the Bitcoin repository also contains a significant percentage of Python code. However, this is probably demo code. For Monero you can find this demo code in a seperate repository.

In addition, there is also the GUI to which you can contribute. Its repository can be found here. The GUI is for most parts written in QML and C++. That is, currently 80.0% of the code is written in QML, whereas 15.9% of the code is written in C++. The remaining languages are QMake, Shell, and Javascript. The "language distribution" can be seen here (click on the purple/pink bar to see the distribution). Thus, if you want to contribute to GUI you, preferably, ought to learn QML and C++. Note that for some GUI features you will also have to make changes to the general Monero repository.


Why are Monero addresses so long? A raw Monero address is 95 characters long compared to 26-34 characters for a Bitcoin address.

Monero integrated address are even longer at 106 characters.

What is the cryptographic reason that causes Monero addresses to be so much longer than Bitcoin addresses?

From Cryptonote Address Tests

  Cryptonote Public Addresses differ in several ways compared to Bitcoin. First, Cryptonote uses two keypairs, known as the spend keypair and the view keypair. Furthermore, these keys are EdDSA (specifically ed25519) keys, whereas Bitcoin uses ECDSA (specifically secp256k1) keys. Finally, Cryptonote Public Addresses are direct representations of the pair of public keys, whereas Bitcoin (and clones) uses a hash of the single public key.

  (...)

  To create the actual Public Address, the following is 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!


Did somebody hacked my wallet? I am using a cold wallet for Monero and created a watch key to check my balance from online system. Today I tried to send some monero to exchange and it shows zero monero.

But my watch wallet is still showing balance.

[wallet 41nfBN]: status
Refreshed 1452435/1452435, synced, daemon RPC v1.13
[wallet 41nfBN]: balance
Balance: 5.231453820000, unlocked balance: 5.231453820000

GUI wallet I downloaded and restored using spend and view key shows a transfer which is not available in watch wallet.

https://xmrchain.net/search?value=5f504ffc4c89f6c2536f8f465a52370963a7224e764f90f3b6ecf5b0c700f7cc

What kind of transfer is that. Why is it not available in watch wallet ? Did somebody stole my moneros ?

Watch wallet can not show outgoing transfers unless some steps are made (import key images from cold wallet).

If you restore with spend and view key, and you see outgoing TX which you did not make, I'm sorry but then someone somehow found your secret spend key or mnemonic and took your funds.


Monero sync too too slow I'm syncing monero for the first time.
I have an SSD on my syncing PC.
I left all day syncing plus all night.
I still got 253624 blocks to sync, and letting it all night only synced 400 blocks. This will take forever.
From monerod I seem to only get messages like this:

  2017-06-05 12:29:51.590   [P2P4]  INFO    global  src/cryptonote_protocol/cryptonote_protocol_handler.inl:293 [93.230.40.55:18080 OUT] Sync data returned a new top block candidate: 1072218 -> 1325842 [Your node is 253624 blocks (352 days) behind]
  SYNCHRONIZATION started

What should I do too get fully synced while I'm still alive?

These are the usual suspects for slow sync:

CPU speed (for block verification). Nothing you can do here other than upgrade CPU or wait for some software optimization but I don't believe there can be any major improvements anymore.
HDD/SSD speed (big slowdown for HDDs, as you have to read / write the blockchain somewhere). Same "solution" as above.
Network bandwidth. If your connection is sucky, you might get better results reducing sync size or importing from .raw file.
Outdated software (sometimes optimizations are rolled out into latest versions). It's good practice in general to have updated software, and sometimes they'll come with a performance boost, too!

From your comments, it seems that network bandwidth is the culprit. Try the .raw method :)


Mandatory vs optional stealth address use Use of stealth address is optional with Bitcoin and mandatory with Monero.

What are the advantages and disadvantages of mandating the use of stealth addresses?

The big advantage is that enforcing one time addresses at the protocol level will prevent people from forgetting, or not bothering with using them.
In fact, reusing an address in Monero leads to an output becoming unspendable (since two outputs will also have an identical key image).

If the protocol was changed to allow address reuse, it would of course undermine privacy for the parties in that transasction, but it would also undermine privacy for the rest of Monero users in some small way, by making it fractionally easier to make inferences. For instance, if you are trying to work out which if inputs A, B, C, and D is the real input in a transaction, if one of them uses the same address as another input you know is from someone who sold all his monero beforehand (or other arbitrary reason you know they can't have spend an input, as it is irrelevant for the argument), then you can remove that input from consideration. This is similar to how you can remove inputs from consideration if they can be found to be spent with mixin 0 in another transaction, etc.

The main negative of using enforced one time addresses is that it becomes hard to scan for outputs paid to you: you have to process every single output of a transaction with your view key to see if it is yours. This makes SPV wallets difficult, and is generally slow.


How to change the total coin supply in monero? How to decrease coin supply in monero ? I know it uses:

#define MONEY_SUPPLY      ((uint64_t)(-1)) // =18446744073709551616

but how make it 9223372036854775808 or lower ?

at int's it posible change to 8 16 32 bit's

2^2 = 4
2^4 = 16
2^8 = 256
2^16 = 65536
2^32 = 4294967296
2^64 = 18446744073709551616

How to use different values ?

This does not control the money supply, contrary to what you might expect. If you want to cap it, you need to change get_block_reward (in src/cryptonote_basic/cryptonote_basic_impl.cpp) and stop emission when your chosen amount of coins is reached.


Do Monero and other Cryptonotes compile and sync on big endian CPUs? I know someone who is having some trouble with an IBM 390x CPU (which is big endian), and an altcoin. They are able to compile, but unable to start syncing as they get this error when the daemon tries to verify the first block:

// Check proof of work matches claimed amount
if (UintToArith256(hash) > bnTarget)
    return error("CheckProofOfWork(): hash doesn't match nBits");

I believe Bitcoin has supported big endian CPUs since v0.11, so I am just curious if Monero does as well?

Yes, it should compile and sync.

Endianess is relevant is several parts of the Monero source code:

SHA256 (hash function)
Skein (also a hash function)
int-util.h (various small utily functions acting on integers)
LMDB (blockchain database)

The definition of BYTE_ORDER varies from one operating system to an other.
Some of these libraries (SHA512 and LMDB) are external and other files come from Cryptonote so they use various ways to determine the BYTE_ORDER.

In case of Big Endian, it may be needed to edit src/platform/msc/sys/param.h, external/db_drivers/liblmdb/mdb.c and/or external/unbound/compat/sha512.c if the symbol can't be determined otherwise.