nips/76.md
2024-04-28 00:41:59 +08:00

2.2 KiB

NIP-76

Speedrunning Leaderboard Entry

draft optional

This NIP defines event kind 7602 as an entry towards a Game's speedrunning leaderboard, specified via a d tag, e.g. a game's Steam App ID. Each game's leaderboard has optional Categories, Variations, Platform, Level, Region and Versions to create alternate leaderboards for one game.

{
  "kind": 7602,
  "d", "<Unique Identifier for the game>", //E.g. Among Us' Steam App ID is 945360
  "tags": [
    ["c", "<Category Identifier the submission is for>", <Long Name>], //E.g. A%G (Any% Glitchless), AlAc (All Achievements)
    ["v", "<Variation of the category the submission is for>", <Long Name>], //E.g. for Celeste AnyP (Any%), ARB (All Red berries), TE (True Ending) etc.
    ["p", "<Platform identifier>"], //E.g. N64, EMU
    ["reg", "<3 Letter ISO Country Code>"], //E.g. JPN, AUS
    ["lvl", "<Level>"], //E.g. FG, W1L1, F3OS
    ["rlt", "<Start Unix Time>", "<Stop Unix Time>"], //Real Life Time, subtract Start from Stop to get actual time
    ["igt", "<Start Unix Time>", "<Stop Unix Time>"] //In Game Time
  ],
  "proof": "<Link to proof e.g. Twitch Vod>",
  "created_at": "<Unix Time>",
  "pubkey": "<Public Key>",
  "sig": "<signature>"
}

Tags can be entered multiple times if required such as a game having multiple varieties under one category, e.g. Pizza Tower Full Game Any% has Playable Character and Glitches? varieties.

An example of a potential Super Mario 64 120 Star N64 run submission.

{
  "kind": 7602,
  "d", "SM64",
  "tags": [
    ["c", "120S", "120 Star"],
    ["p", "N64"],
    ["reg", "JPN"],
    ["rlt", "1587370820", "1587376601"],
  ],
  "proof": "https://www.twitch.tv/videos/2034126985",
  "created_at": "1714228879",
  "pubkey": "1a6ea253df444f434417bdcaf9d4aef75f00921965e1afd836da0ae9cd1a0e074cb3490bb4cc26ead75af",
  "sig": "076b3405407f26b87ff9333fa336c1c6fbdfc27f2f"
}

Reporting a submission

NIP-56 reports should be used to report runs.

{
  "kind": 1984,
  "tags": [
    ["e", <eventId>, "doubt"],
    ["p", <pubkey>]
  ],
  "content": "<Reason for report>",
  ...
}

Clients can decide whether or not to display a run based on the number of reports.