Skip to content

Instantly share code, notes, and snippets.

@Semisol

Semisol/nip39.md Secret

Created January 28, 2023 15:45
Show Gist options
  • Save Semisol/3bfe26b41d670abfb958e4b841de1413 to your computer and use it in GitHub Desktop.
Save Semisol/3bfe26b41d670abfb958e4b841de1413 to your computer and use it in GitHub Desktop.

NIP-39

External Identities in Profiles

draft optional author:pseudozach author:Semisol

Abstract

Nostr protocol users may have other online identities such as usernames, profile pages, keypairs etc. they control and they may want to include this data in their profile metadata so clients can parse, validate and display this information.

i tag on a metadata event

A new optional i tag is introduced for kind 0 metadata event contents in addition to name, about, picture fields as included in NIP-01:

{
    "id": "123",
    "pubkey": "xxx",
    ...
    "tags": [
        ["i", "github:semisol", "9721ce4ee4fceb91c9711ca2a6c9a5ab"],
        ["i", "twitter:semisol_public", "1619358434134196225"],
    ]
}

An i tag will have two parameters, which are defined as the following:

  1. identity: This is the identity provider name (for example github) and the identity (for example semisol) joined together.
  2. proof: String or object that points to the proof of owning this identity.

Clients SHOULD process any i tags with more than 2 values for future extensibility.
Identity provider names SHOULD only include a-z, 0-9 and the characters ._-/ and MUST NOT include :.
Identity names SHOULD be normalized by replacing uppercase letters with lowercase letters and if there are multiple aliases for an entity using the primary one.
If a matching metadata event is found when trying to look up an identity, a client SHOULD check if it's the latest version, and if not if it has this claim. This is to prevent showing or checking public keys that disowned a claim.

Claim types

github

Identity: A GitHub username.
Proof: The ID of the GitHub Gist located at https://gist.github.com/<identity>/<proof> with a single file with the text Verifying that I control the following Nostr public key: <npub encoded public key>

twitter

Identity: A Twitter username.
Proof: The ID of the Twitter tweet located at https://twitter.com/<identity>/status/<proof> with the text Verifying that I control the following Nostr public key: <npub encoded public key>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment