Account

Settlus incorporates EVMOS account features, making it compatible with both Cosmos-based and Ethereum accounts. Users who create an Ethereum account on popular wallets (e.g., MetaMask) can immediately use their account on Settlus.

Prerequisite Readings

Creating New Account

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 Settlus, support creating accounts with mnemonic phrases, otherwise known as hierarchical deterministic key generation (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 derivation path. Blockchains can differ in which derivation path they support. To access all accounts from an mnemonic phrase on a blockchain, it is therefore important to use that blockchain's specific derivation path.

Settlus Account

Settlus account implements EVMOS account.

Addresses and Public Keys

BIP-0173 defines a new format for segregated witness output addresses that contains a human-readable part that identifies the Bech32 usage. Settlus uses the following HRP (human readable prefix) as the base HRP:

NetworkMainnetTestnet

Settlus

settlus

settlus

There are 3 main types of HRP for the Addresses/PubKeys available by default on Settlus:

  • 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 secp256k1 curve.

Address bech32 PrefixPubkey bech32 PrefixCurveAddress byte lengthPubkey byte length

Accounts

settlus

settluspub

eth_secp256k1

20

33 (compressed)

Validator Operator

settlusvaloper

settlusvaloperpub

eth_secp256k1

20

33 (compressed)

Consensus Nodes

settlusvalcons

settlusvalconspub

secp256k1

20

32

Address formats for clients

EthAccount can be represented in both Bech32 (settlus1...) and hex (0x...) formats for Ethereum's Web3 tooling compatibility.

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): settlus1z3t55m0l9h0eupuz3dp5t5cypyv674jj7mz2jw

  • Address (EIP55 Hex): 0x91defC7fE5603DFA8CC9B655cF5772459BF10c6f

  • Compressed Public Key: {"@type":"/ethermint.crypto.v1.ethsecp256k1.PubKey","key":"AsV5oddeB+hkByIJo/4lZiVUgXTzNfBPKC73cZ4K1YD2"}

Address conversion

The settlusd debug addr <address> can be used to convert an address between hex and bech32 formats. For example:

Bech32

 $ settlusd debug addr settlus12g8w5dr5jyncct8jwdxwsy2g9ktdrjjlcs5f0a
  Address bytes: [82 14 234 52 116 145 39 140 44 242 115 76 232 17 72 45 150 209 202 95]
  Address (hex): 520EEA347491278C2CF2734CE811482D96D1CA5F
  Address (EIP-55): 0x520EEA347491278c2Cf2734Ce811482D96D1CA5F
  Bech32 Acc: settlus12g8w5dr5jyncct8jwdxwsy2g9ktdrjjlcs5f0a
  Bech32 Val: settlusvaloper12g8w5dr5jyncct8jwdxwsy2g9ktdrjjluy76df

Hex

 $ settlusd debug addr 14574A6DFF2DDF9E07828B4345D3040919AF5652
  Address bytes: [82 14 234 52 116 145 39 140 44 242 115 76 232 17 72 45 150 209 202 95]
  Address (hex): 520EEA347491278C2CF2734CE811482D96D1CA5F
  Address (EIP-55): 0x520EEA347491278c2Cf2734Ce811482D96D1CA5F
  Bech32 Acc: settlus12g8w5dr5jyncct8jwdxwsy2g9ktdrjjlcs5f0a
  Bech32 Val: settlusvaloper12g8w5dr5jyncct8jwdxwsy2g9ktdrjjluy76df

Key output

TIP

The Cosmos SDK Keyring output (i.e settlusd keys) only supports addresses and public keys in Bech32 format.

We can use the keys show command of settlusd with the flag --bech <type>(acc | val | cons) to obtain the addresses and keys as mentioned above. Let's see some examples.

Accounts

 $ settlusd keys show dev0 --bech acc
- address: settlus12g8w5dr5jyncct8jwdxwsy2g9ktdrjjlcs5f0a
  name: dev0
  pubkey: '{"@type":"/ethermint.crypto.v1.ethsecp256k1.PubKey","key":"AoXK/IdkFJCSSkeEHPQwvLHIeSSZ7/OT+cB84hOsao2t"}'
  type: local

Validator

 $ settlusd keys show dev0 --bech val
- address: settlusvaloper12g8w5dr5jyncct8jwdxwsy2g9ktdrjjluy76df
  name: dev0
  pubkey: '{"@type":"/ethermint.crypto.v1.ethsecp256k1.PubKey","key":"AoXK/IdkFJCSSkeEHPQwvLHIeSSZ7/OT+cB84hOsao2t"}'
  type: local

Consensus

 $ settlusd keys show dev0 --bech cons
- address: settlusvalcons12g8w5dr5jyncct8jwdxwsy2g9ktdrjjlghdxpg
  name: dev0
  pubkey: '{"@type":"/ethermint.crypto.v1.ethsecp256k1.PubKey","key":"AoXK/IdkFJCSSkeEHPQwvLHIeSSZ7/OT+cB84hOsao2t"}'
  type: local

Querying an Account

You can query an account address using the CLI, gRPC or REST API endpoint

Command Line Interface

# NOTE: the --output (-o) flag will define the output format in JSON or YAML (text)
settlusd q auth account $(settlusd keys show dev0 -a) -o text

'@type': /ethermint.types.v1.EthAccount
base_account:
account_number: "0"
address: settlus12g8w5dr5jyncct8jwdxwsy2g9ktdrjjlcs5f0a
pub_key:
  '@type': /ethermint.crypto.v1.ethsecp256k1.PubKey
  key: AoXK/IdkFJCSSkeEHPQwvLHIeSSZ7/OT+cB84hOsao2t
sequence: "1"
code_hash: 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470

Cosmos gRPC and REST

# GET /cosmos/auth/v1beta1/accounts/{address}
curl -X GET "http://localhost:1337/cosmos/auth/v1beta1/accounts/settlus14au322k9munkmx5wrchz9q30juf5wjgz2cfqku" -H "accept: application/json"

JSON-RPC

To retrieve the Ethereum hex address using Web3, use the JSON-RPC eth_accounts or personal_listAccounts endpoints:

# query against a local node with 8545 port
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}' -H "Content-Type: application/json" http://localhost:8545

curl -X POST --data '{"jsonrpc":"2.0","method":"personal_listAccounts","params":[],"id":1}' -H "Content-Type: application/json" http://localhost:8545

Last updated