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.
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=….
Prizes, tips, trades and refunds go to ironknight@siegeworlds instead of a 34-character address.
Only names your server signs for can exist under siegeworlds. Nobody squats your players' names.
A player's tags in your other titles point at the same address. One lookup links them.
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
| Name | Fee | Use it for |
|---|---|---|
siegeworlds | 500 DIVI | the game namespace (6+ letters) |
name@siegeworlds | 10 DIVI | each player tag, paid by the player |
| update or delete | 10 DIVI | repoint a tag, rotate the signer, retire a name |
| 3, 4, 5 letters | 10,000 / 5,000 / 1,000 | short brand names, such as a studio tag |
Names never expire. Live fees: GET /api/v1/info.
DVNS1 auth <tag> <owner> <divi> with the signer key. The signature is valid for that name, owner and address only./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.
| Mode | Set | When |
|---|---|---|
| Verified | policy=closed + server auth | tags must match in-game names (recommended) |
| Open | policy=open | first come, first served, for a community or event |
| Issued | your signer registers tags itself, 10 DIVI each | gifting tags as rewards or to founders |
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.
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.
names?address= shows ironknight@siegeworlds when they sign in to your next product. Greet them, skip onboarding, grant a crossover item.
When a new title launches, offer each player the tag they hold in siegeworlds first. Your signer can check before it signs.
The chain.siegeworlds field holds the in-game account id, so a partner sees a tag and knows which account to credit.
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.
a-z 0-9 - _, lower case, and cannot start or end with - or _.siegeworlds with a new signer. Tags already issued stay valid."network": "testnet" to each call.