3

Context

I'm using Ubuntu 14.04 LTS. I cloned the cpp-ethereum repo and built everything using the makefiles. Now (in the same path) I have a bunch of executable binaries in folders such as eth, ethkey, and ethminer.

To quote the ethdocs: Creating a key is tantamount to creating an account. Therefore, I'll assume the following terms are all equivalent and I'll use them interchangeably: wallet, account, key, keyfile, keystore. (Please, correct me if I'm wrong.)

So I went ahead and created a so-called "account" using eth:

./eth account new

This listed 3 things:

  1. A created key, starting with ef9a8d59
  2. An ICAP, starting with XE240BF3
  3. An address, starting with 00134f5f

Additionally, I had to create

  1. A password

Then I ran ./eth account list and I saw my account's address. Sweet.

To quote the go-ethereum wiki: If you lose the password you use to encrypt your account, you will not be able to access that account. Repeat: It is NOT possible to access your account without a password and there is no forgot my password option here. Do not forget it.

So I assumed having these 4 data (especially the password) were equivalent to having total access to my account, and that they were all I'd ever need to access my Ether from anywhere (say, if I purged the disk did a fresh install of Ubuntu).

Problem

Fast-forward a few weeks, and today I'm trying to transfer my funds using eth. However, my old account is no longer listed when I run ./eth account list.

So I try running

eth account import <my_address>

but I get

  ✘  03:07:08 PM.525|eth  Invalid JSON in key file 
Error: reading key file failed

Besides, I don't see any "keyfiles" lying around in the cpp-ethereum path.

Questions

  1. How can I "add back" my account/wallet/address to eth? What data do I need?
  2. How can I "add" my account/wallet/address to the Ethereum Wallet GUI application (using eth, if possible)? I only see options for "Create new account" and "Import pre-sale accounts". What data do I need?
  3. Please ELI5 how wallets/accounts/keyfiles/keys/keystores work. Are these terms equivalent?
  4. What data allows one to have total access to one's account from anywhere, anytime? Eg. I see some wallet applications (such as the GUI one) generate "keyfiles" (actual files on one's computer that look like Python dicts / JSON), but there seems to be no universal/canonical representation of an Etherem wallet. Are those "keyfiles" the absolute master key to one's account?
  5. How can I take the funds in my account and convert them to bitcoin?
2

An account on any blockchain (BTC and ETH included) is fundamentally a public and private keypair.

A keypair is a special set of large numbers that can be used to encrypt and decrypt data. Anyone with the public key can encrypt data that only the private key can decrypt. Conversely, the holder of the private key can create a signature that anyone with the public key can verify.

This forms the basis for accounts, or wallets, on the Ethereum blockchain. The public address forms the address of the account. Transactions are accepted by the network if and only if the account has a sufficient balance AND the transaction has been signed by the private key of the sending account.

Thus anyone with the private key controls the account. This is why the private key must remain secret. So most programs that generate public and private keypairs also encrypt the private key with a passphrase. This protects the key from being stolen and used without the owner's consent.

This means that in order to access your coins, you must have both the passphrase AND the encrypted private key. Without the encrypted private key, the passphrase does you no good. It appears that you passed the public address of your account to eth account import, but it is probably expecting a path to your encrypted private keyfile.

According to the documentation for ethkey the keyfiles are stored at ~/.web3/keys

I also recommend you check out the documentation in the cpp-ethereum repo. Particularly ethkey and cold wallet storage device.

If you want to securely store your coins for a number of different blockchains then I highly recommend something like the Ledger Nano S or the Trezor. These are hardware wallets that manage your key for you and keep them air-gapped off of any computer while still giving you a lot of accessibility to your wallet.

Another note on wallets, although this is not the case for the wallet you generated with cpp-ethereum. Sometimes a wallet (aka the keypair) will be generated from a seed. A seed is a secret set of data with high entropy that is feasible to write down or memorize that can be used to re-generate the key. The seed is a last resort backup for restoring a wallet and is not to be confused with the password. The seed can be thought of as equivalent to having an unencrypted copy of the private keyfile, so it must be kept very secret and protected from loss or destruction just like the private keyfile described above.

As for exchanging crypto currencies, you need to go to an exchange to trade and have wallets set up for each blockchain that you intent to operate on if you do not want to keep your money in an exchange. If you have both wallets set up, the fastest and simple way is with a service like ShapeShift.

Best of luck to you, I hope you did not lose access to your funds. Make sure you back up your encrypted private key file and its password going forward.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.