Skip to main content

65/STATUS-ACCOUNT-ADDRESS

Abstract

This specification details what a Status account address is and how account addresses are created and used.

Background

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

  1. a Waku chat identity keypair
  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

Initial Key Generation

Public/Private Keypairs

  • 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

Account Broadcasting

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

X3DH Prekey bundles

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

Optional Account additions

ENS Username

  • 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).

User Profile Picture

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

Wire Format

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.

Security Considerations

Copyright and related rights waived via CC0.

References

normative

informative