Accounts
Last updated
Last updated
Crypto Wallets (or Accounts) can be created and represented in unique ways on different blockchains. For developers who interface with account types on Slinky, e.g. during wallet integration on their dApp frontend, it is therefore important to understand that accounts on Slinky are implemented to be compatible with Ethereum type addresses.
To create one account you can either create a private key, a keystore file (a private key protected by a password), or a mnemonic phrase (a string of words that can access multiple private keys).
Aside from having different security features, the biggest difference between each of these is that a private key or keystore file only creates one account. Creating a mnemonic phrase gives you control of many accounts, all accessible with that same phrase.
Cosmos blockchains, like Slinky, support creating accounts with mnemonic phrases, otherwise known as (HD keys). This allows the user to create accounts on multiple blockchains without having to manage multiple secrets.
HD keys generate addresses by taking the mnemonic phrase and combining it with a piece of information called a . Blockchains can differ in which derivation path they support. To access all accounts from a mnemonic phrase on a blockchain, it is therefore important to use that blockchain's specific derivation path.
The terms "account" and "address" are often used interchangeably to describe crypto wallets. In the Cosmos SDK, an account designates a pair of public key (PubKey) and private key (PrivKey). The derivation path defines what the private key, public key, and address would be.
The PubKey can be derived to generate various addresses in different formats, which are used to identify users (among other parties) in the application. A common address form for Cosmos chains is the bech32 format (e.g. slinky1...
). Addresses are also associated with messages to identify the sender of the message.
The PrivKey is used to generate digital signatures to prove that an address associated with the PrivKey approved of a given message. The proof is performed by applying a cryptographic scheme to the PrivKey, known as Elliptic Curve Digital Signature Algorithm (ECDSA), to generate a PubKey that is compared with the address in the message.
Slinky defines its own custom Account
type to implement a HD wallet that is compatible with Ethereum type addresses. It uses Ethereum's ECDSA secp256k1 curve for keys (eth_secp265k1
) and satisfies the for full paths. This cryptographic curve is not to be confused with curve.
The root HD path for Slinky-based accounts is m/44'/60'/0'/0
. Slinky uses the Coin type 60
to support Ethereum type accounts, unlike many other Cosmos chains that use Coin type 118
()
The custom Slinky EthAccount satisfies the AccountI
interface from the Cosmos SDK auth module and includes additional fields that are required for Ethereum type addresses:
For more information on Ethereum accounts head over to the x/evm
module.
Addresses and Public Keys
Slinky
slinky
slinky
There are 3 main types of HRP for the Addresses
/PubKeys
available by default on Slinky:
Addresses and Keys for accounts, which identify users (e.g. the sender of a message
). They are derived using the eth_secp256k1
curve.
Addresses and Keys for validator operators, which identify the operators of validators. They are derived using the eth_secp256k1
curve.
Addresses and Keys for consensus nodes, which identify the validator nodes participating in consensus. They are derived using the ed25519
curve.
Accounts
slinky
slinkypub
eth_secp256k1
20
33
(compressed)
Validator Operator
slinkyvaloper
slinkyvaloperpub
eth_secp256k1
20
33
(compressed)
Consensus Nodes
slinkyvalcons
slinkyvalconspub
ed25519
20
32
Address formats for clients
The Bech32 format is the default format for Cosmos-SDK queries and transactions through CLI and REST clients. The hex format on the other hand, is the Ethereum common.Address
representation of a Cosmos sdk.AccAddress
.
Address (Bech32): slinky1z3t55m0l9h0eupuz3dp5t5cypyv674jj7mz2jw
Compressed Public Key: {"@type":"/ethermint.crypto.v1.ethsecp256k1.PubKey","key":"AsV5oddeB+hkByIJo/4lZiVUgXTzNfBPKC73cZ4K1YD2"}
Address conversion
The slinkyd debug addr <address>
can be used to convert an address between hex and bech32 formats. For example:
Key output
The Cosmos SDK Keyring output (i.e slinkyd keys
) only supports addresses and public keys in Bech32 format.
You can query an account address using the CLI, gRPC or
Command Line Interface
Cosmos gRPC and REST
JSON-RPC
defines a new format for segregated witness output addresses that contains a human-readable part that identifies the Bech32 usage. Slinky uses the following HRP (human readable prefix) as the base HRP:
EthAccount
can be represented in both (slinky1...
) and hex (0x...
) formats for Ethereum's Web3 tooling compatibility.
Address ( Hex): 0x91defC7fE5603DFA8CC9B655cF5772459BF10c6f
To retrieve the Ethereum hex address using Web3, use the JSON-RPC or endpoints: