There are two types of accounts in ICON, accounts that are associated with users, often dubbed as Externally Owned Account (EOA), and Smart Contract (SCORE) Accounts. EOA address starts with "hx" followed by a 20-byte hex string, while Smart Contract Account address starts with "cx" followed by a 20-byte hex string.
In order to deploy a SCORE on ICON network or make a transaction, one must hold a valid EOA. Furthermore, when we say account in this document, it means EOA. The terms of EOA, wallet, and keystore are not exactly same, but often interchangeably used.
Account is cryptographically defined by a private-public key pair, and the account address can be derived from its public key. Creating an account is equivalant to creating a key pair, and the account can be exported as a file, a keystore file.
Keystore file is a JSON text file containing your private key and address. Private key is encrypted with the password that you enter when you create an account or keystore file. If you lose your keystore file and password, there is no way to recover. You will lose you account and the assets you own.
Keystore file is used to authenticate a user. Every transaction must be signed with your private key. If your private key is leaked, anyone possessing the private key can access your account and sign the transaction on your behelf. Therefore, it is always recommended to use keystore file instead of plain private key.
There are several ways creating an account.
You can create a keystore file from CLI using tbears keystore
command.
$ tbears keystore [keystore_file_name]
Input your keystore password :
Retype your keystore password :
Made keystore file successfully
KeyWallet is an object representing an account. Below code creates a new KeyWallet instance. Internally, private-public key pair is generated.
wallet = KeyWallet.create()
# load existing account using private key
key = bytes.fromhex(userPrivateKey)
wallet = KeyWallet.load(key)
# load existing account from keystore file
wallet = KeyWallet.load(keystoreFilePath, password)
wallet.store(destinationFilePath, password)
KeyWallet wallet = KeyWallet.create()
// load existing account using private key
Bytes key = new Bytes(userPrivateKey)
KeyWallet wallet1 = KeyWallet.load(key);
// load existing account using keystore file
File file = new File(destinationDirectory, filename);
KeyWallet wallet2 = KeyWallet.load(password, file);
// path to store the keystore file. keystore file name is automatically generated.
File destinationDirectory = new File("./");
// keystore file password
String password = "password_string";
String fileName = KeyWallet.store(wallet, password, destinationDirectory);
ICONex is a Chrome extention app. Installing ICONex
-
Click "Load Wallet".
-
You can load your account from keystore file ("Select wallet file") or using private key ("Enter Private Key").