Status Accounts
Aaryamann Challani
on Dec 04, 2023

This specification explains what a Status account is, and how it is created and used.

The core concept of an account in Status is a set of cryptographic keypairs. Namely, the combination of the following:

  1. 1
    a Waku chat identity keypair
  2. 2
    a set of cryptocurrency wallet keypairs

The Status node verifies or derives everything else associated with the contact from the above items, including:

  • Ethereum address (future verification, currently the same base keypair)
  • identicon
  • message signatures

  • An ECDSA (secp256k1 curve) public/private keypair MUST be generated via a BIP43 derived path from a BIP39 mnemonic seed phrase.
  • The default paths are defined as such:
    • Waku Chat Key (IK): m/43'/60'/1581'/0'/0 (post Multiaccount integration)
    • Status Wallet paths: m/44'/60'/0'/0/i starting at i=0
      • following BIP44
      • NOTE: this (i=0) is also the current (and only) path for Waku key before Multiaccount integration

  • A user is responsible for broadcasting certain information publicly so that others may contact them.

  • Refer to 53/WAKU2-X3DH for details on the X3DH prekey bundle broadcasting, as well as regeneration.

  • A user MAY register a public username on the Ethereum Name System (ENS). This username is a user-chosen subdomain of the stateofus.eth ENS registration that maps to their Waku identity key (IK).

  • An account MAY edit the IK generated identicon with a chosen picture. This picture will become part of the publicly broadcasted profile of the account.

Below is the wire format for the account information that is broadcasted publicly. An Account is referred to as a Multiaccount in the wire format.

message MultiAccount {
  string name = 1; // name of the account
  int64 timestamp = 2; // timestamp of the message
  string identicon = 3; // base64 encoded identicon
  repeated ColorHash color_hash = 4; // color hash of the identicon
  int64 color_id = 5; // color id of the identicon
  string keycard_pairing = 6; // keycard pairing code
  string key_uid = 7; // unique identifier of the account
  repeated IdentityImage images = 8; // images associated with the account
  string customization_color = 9; // color of the identicon
  uint64 customization_color_clock = 10; // clock of the identicon color, to track updates
  message ColorHash {
    repeated int64 index = 1;
  message IdentityImage {
    string key_uid = 1; // unique identifier of the image
    string name = 2; // name of the image
    bytes payload = 3; // payload of the image
    int64 width = 4; // width of the image
    int64 height = 5; // height of the image
    int64 filesize = 6; // filesize of the image
    int64 resize_target = 7; // resize target of the image
    uint64 clock = 8; // clock of the image, to track updates

The above payload is broadcasted when 2 devices that belong to a user need to be paired.

Copyright and related rights waived via CC0.