Divi Name Service · for the Siege Worlds team

Every player gets name@siegeworlds

Register Siege Worlds once on the Divi chain. Then each player can own a gamer tag that any Divi wallet can pay, that your server vouches for, and that links their accounts across every product you ship.

Your server signs exactly this

What lands on chain (OP_RETURN, 10 DIVI)

The preview runs in this page only. It checks the naming rules but not whether the tag is taken; for that, call GET /api/v1/fee?name=….

What you get

Pay players by name

Prizes, tips, trades and refunds go to ironknight@siegeworlds instead of a 34-character address.

Tags you can trust

Only names your server signs for can exist under siegeworlds. Nobody squats your players' names.

One identity across products

A player's tags in your other titles point at the same address. One lookup links them.

Step 1 · Register Siege Worlds

Do this once, from a studio wallet you keep cold. That address owns the namespace. Name a separate signer address held by your game server: it approves tags, and you can replace it without touching ownership.

POST https://name.divi.cx/api/v1/build
{ "network": "mainnet", "op": "register", "name": "siegeworlds",
  "payer": "DStudioCold…", "divi": "DStudioTreasury…",
  "fields": {
    "kind":   "game",
    "signer": "DServerHotKey…",
    "policy": "closed",
    "site":   "https://your-siege-worlds-site.example"
  } }

The answer tells the wallet what to pay: siegeworlds has 11 letters, so the fee is 500 DIVI, sent to the registry with the record as its OP_RETURN. Broadcast, then POST /api/v1/notify {"txid": …}. Or from a terminal:

dvns register siegeworlds --wif-file studio.wif \
  --field kind=game --field signer=DServerHotKey… --field policy=closed \
  --field site=https://your-siege-worlds-site.example
NameFeeUse it for
siegeworlds500 DIVIthe game namespace (6+ letters)
name@siegeworlds10 DIVIeach player tag, paid by the player
update or delete10 DIVIrepoint a tag, rotate the signer, retire a name
3, 4, 5 letters10,000 / 5,000 / 1,000short brand names, such as a studio tag

Names never expire. Live fees: GET /api/v1/info.

Step 2 · Players claim their tags

  1. Player, in Siege Worlds
    Logged in, asks for their tag and gives the Divi address that should receive payments (the IronDivi extension supplies it).
  2. Your game server
    Confirms the player owns that in-game name, then signs DVNS1 auth <tag> <owner> <divi> with the signer key. The signature is valid for that name, owner and address only.
  3. Player's wallet
    Calls /build with the signature, pays 10 DIVI and owns the tag. Your server spends nothing.
// Siege Worlds server (Node). diviRpc talks to a divid that holds the signer key.
app.post("/divi-tag", requireLogin, async (req, res) => {
  const tag = req.user.gameName.toLowerCase();           // you choose the tag
  const { address } = req.body;                          // player's Divi address
  const name = `${tag}@siegeworlds`;
  const message = `DVNS1 auth ${name} ${address} ${address}`;
  const auth = await diviRpc("signmessage", [SIGNER_ADDRESS, message]);
  res.json({ name, auth, account: req.user.id });
});

// Player's browser
const { address } = await window.irondivi.connect();   // IronDivi extension
const { name, auth, account } = await (await fetch("/divi-tag", {
  method: "POST", headers: { "content-type": "application/json" },
  body: JSON.stringify({ address }) })).json();
const built = await (await fetch("https://name.divi.cx/api/v1/build", {
  method: "POST", headers: { "content-type": "application/json" },
  body: JSON.stringify({ op: "register", name, payer: address, divi: address, auth,
    fields: { kind: "gamertag", "chain.siegeworlds": account } }) })).json();
// wallet pays built.send.amount to built.send.to with built.send.memo,
// then POST https://name.divi.cx/api/v1/notify { txid }

No divid on the server? dvns sign-auth --wif-file signer.wif --name ironknight@siegeworlds --owner ADDR --divi ADDR prints the same signature. If /build answers 409, its auth_message is the exact text to sign.

Other ways to run the namespace

ModeSetWhen
Verifiedpolicy=closed + server authtags must match in-game names (recommended)
Openpolicy=openfirst come, first served, for a community or event
Issuedyour signer registers tags itself, 10 DIVI eachgifting tags as rewards or to founders

Step 3 · Use the names in the game

GET /api/v1/resolve/ironknight@siegeworlds      → address to pay, plus fields
GET /api/v1/names?ns=siegeworlds&limit=1000      → every Siege Worlds gamer tag
GET /api/v1/names?address=DPlayer…             → all of this player's names, any game
GET /api/v1/names?kind=game&top=true            → every game registered on Divi

Always show the tag and its address together before sending. A mistyped tag is a different tag, just as a mistyped address is a different address.

Connect your products and cross-market

Each Siege Worlds product can have its own namespace (for example a companion app, a map editor, or a sequel). A player who uses the same Divi address in each one is the same person on chain. You need no shared login and no data deal between teams.

Spot returning players

names?address= shows ironknight@siegeworlds when they sign in to your next product. Greet them, skip onboarding, grant a crossover item.

Reserve their name everywhere

When a new title launches, offer each player the tag they hold in siegeworlds first. Your signer can check before it signs.

Map back to accounts

The chain.siegeworlds field holds the in-game account id, so a partner sees a tag and knows which account to credit.

Run events across titles

Tournament prizes pay out by tag. Every product and partner studio reads the same names from the same chain.

One tag can also carry ids for several products, for example chain.siegeworlds=sw-48213 and chain.siegeworlds-arena=a-993. Players stay in control: they own their tags, pick the address, and can update or delete them for 10 DIVI. An update replaces the whole record, so resend every field you want to keep.

Rules worth knowing