This document describes the in-built accounts system of OKBC.

#Pre-requisite Readings

#OKBC Accounts

OKBC defines its own custom Account type that uses Ethereum's ECDSA secp256k1 curve for keys. This satisfies the EIP84 for full BIP44 paths. The root HD path for OKBC-based accounts is m/44'/60'/0'/0.

#Addresses and Public Keys

There are 3 main types of Addresses/PubKeys available by default on OKBC:

  • 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.
Address bech32 PrefixPubkey bech32 PrefixCurveAddress byte lengthPubkey byte length
Accountsexexpubeth_secp256k12033 (compressed)
Validator Operatorexvaloperexvaloperpubeth_secp256k12033 (compressed)
Consensus Nodesexvalconsexvalconspubed255192032

#Address formats for clients

OKBCAccounts can be represented in both Bech32 and hex format 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): ex1hcngft7gfkhn8z8fnlajzh7agyt0az0v6ztmme
  • Address (EIP55 Hex): 0xBE2684Afc84daf3388E99FFB215FdD4116FE89EC
  • Compressed Public Key (Bech32): expub17weu6qepqgantzvj79rywafrxmye524tpa8kp6akjct3nw7wel623lsnfwynqyfe75k

You can query an account address using the OKBC CLI or REST clients:

# NOTE: the --output (-o) flag will define the output format in JSON or YAML (text)
okbchaincli q auth account $(okbchaincli keys show <MYKEY> -a) -o text
  address: ex1hcngft7gfkhn8z8fnlajzh7agyt0az0v6ztmme
  eth_address: 0xBE2684Afc84daf3388E99FFB215FdD4116FE89EC
  - denom: okb
    amount: "10000000"
  public_key: expub17weu6qepqgantzvj79rywafrxmye524tpa8kp6akjct3nw7wel623lsnfwynqyfe75k
  account_number: 0
  sequence: 1
  code_hash: c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470
# GET /auth/accounts/{address}
curl -X GET "<NODE_IP>/auth/accounts/ex1hcngft7gfkhn8z8fnlajzh7agyt0az0v6ztmme" -H "accept: application/json"


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

To retrieve the Ethereum hex address using Web3, use the JSON-RPC okbc_accounts endpoint:

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

#Two format address

#The relationship between ex and 0x address

There are two address formats in ex, one is the address at the prefix of ex, such as: ex1hcngft7gfkhn8z8fnlajzh7agyt0az0v6ztmme;Another address starts with 0x, such as: 0x8aF3B04bF0400b16911b5A12360122148056d562.The addresses prefix with 0x and ex are from the same mnemonic, the balance under their address is the same, the same number of okb for the owner under the two addresses. After the mnemonic is imported into the metamask, the address starting with 0x can be recovered;Use okbchaincli to view addresses starting with 0x and ex. You can view the address prefix with ex on the dex web page and mobile client.

#How to use

The address starting with ex can be used directly on the mobile client, web page or okbchaincli for operations such as transfer, deposit, and voting.Addresses starting with 0x can only be used for transfer operations on metamasks at present.

Note: Using addresses prefix with ex can only transfer funds to addresses prefix with ex, and cannot be cross-transferred.

#Mutual conversion

The address at the prefix of 0x and the address at the prefix of ex come from the same mnemonic and can be converted to each other.Addresses starting with 0x are in Hex format, and ethereum currently uses addresses in this format.The address at the prefix of ex, the format specification comes from the btc protocolBIP173(bech32),Currently btc and cosmos are using this format address.

The address of the two formats can be converted mutually, the conversion method: useexchain-java-sdkexchain-javascript-sdkmethod convertAddressFromHexToBech32 and method convertAddressFromBech32ToHex to convert