Skip to content

Latest commit

 

History

History
42 lines (33 loc) · 1.69 KB

README.md

File metadata and controls

42 lines (33 loc) · 1.69 KB

merkle-stellar

Travis CI

Library to read Merkle root out of Stellar blockchain.

Install

$ npm i -g keybase-merkle-stellar

Demo

$ keybase-merkle-stellar-check max
✔ 1. fetch latest root from stellar: returned #27980338, closed at 2020-01-29T13:00:06Z
✔ 2. fetch keybase path from root for max: got back seqno #14406067
✔ 3. check hash equality for 070202749f229c2b6a99bac9fd8fe8a0e429dc266c2e9dff2dbc51e0fe190a09: match
✔ 4. extract UID for max: map to dbb165b7879fe7b1174df73bed0b9500 via legacy tree
✔ 5. walk path to leaf for dbb165b7879fe7b1174df73bed0b9500: tail hash is 913358757a2e1c36cb17e70b4bc51496829e97179509f854f18641d80e57637f
✔ 6. fetch sigchain from keybase for dbb165b7879fe7b1174df73bed0b9500: got back 691 links

The Code

The main operations can be found in the Checker class:

  // checkUsername traverses the stellar root down to the given username, and returns the
  // full sigchain of the user. This function is kept simple for the basis
  // of site documentation.
  async checkUsername(username: string): Promise<ChainLinkJSON[]> {
    const groveHash = await this.fetchLatestGroveHashFromStellar()
    const pathAndSigs = await this.fetchPathAndSigsForUsername(groveHash, username)
    const treeRoots = await this.checkSigAgainstStellar(pathAndSigs, groveHash)
    const uid = this.extractUid(username, pathAndSigs, treeRoots.body.legacy_uid_root)
    const chainTail = this.walkPathToLeaf(pathAndSigs, treeRoots.body.root, uid)
    const chain = await this.fetchSigChain(chainTail, uid)
    return chain
  }