Background
Implicit accounts work similarly to Bitcoin/Ethereum accounts.
- They allow you to reserve an account ID before it’s created by generating a ED25519 key-pair locally.
- This key-pair has a public key that maps to the account ID.
- The account ID is a lowercase hex representation of the public key.
- An ED25519 Public key contains 32 bytes that maps to 64 characters account ID.
- The corresponding secret key allows you to sign transactions on behalf of this account once it’s created on chain.
You can find the implicit accounts specification [here](https://nomicon.io/DataStructures/Account.html#implicit-account-ids).
Creating an account locally
For the purpose of this demo, we’ll use the betanet
network.
Set betanet network
export NEAR_ENV=betanet
Generating the Implicit account
near account create-account fund-later use-auto-generation save-to-folder ~/.near-credentials/implicit
Example Output
The file "~/.near-credentials/testnet/8bca86065be487de45e795b2c3154fe834d53ffa07e0a44f29e76a2a5f075df8.json" was saved successfully
Here is your console command if you need to script it or re-run:
near account create-account fund-later use-auto-generation save-to-folder ~/.near-credentials/implicit
Using the Implicit Account
We can export our account ID to a bash env variable:
export ACCOUNT="8bca86065be487de45e795b2c3154fe834d53ffa07e0a44f29e76a2a5f075df8"
Assuming you’ve received tokens on your new account, you can transfer from it using the following command:
“`bash
near send $ACCOUNT
“`
“`bash
near tokens $ACCOUNT send-near
“`
Transferring to the implicit account
Let’s say someone gives you their account ID 0861ea8ddd696525696ccf3148dd706c4fda981c64d8a597490472594400c223
. You can just transfer to it by running:
“`bash
near send
“`
“`bash
near tokens
“`
BONUS: Converting public key using python (for learning purposes)
For this flow we’ll use python3
(with version 3.5+
) with base58
library.
You can install this library with pip3
:
pip3 install --user base58
Start python3 interpreter:
python3
The first thing is to get the data part from the public key (without ed25519:
prefix). Let’s store it in a variable pk58
:
pk58 = 'BGCCDDHfysuuVnaNVtEhhqeT4k9Muyem3Kpgq2U1m9HX'
Now let’s import base58:
Finally, let’s convert our base58 public key representation to bytes and then to hex:
base58.b58decode(pk58).hex()
Output:
'98793cd91a3f870fb126f66285808c7e094afcfc4eda8a970f6648cdf0dbd6de'
This gives us the same account ID as near-cli
, so this is encouraging.
ot a question?
Ask it on StackOverflow!