Chapter 03 · Tabs
One details object built from CLI-shaped JSON, one signature, one QR. Read this tab first; it is the template the other eight follow.
FIGURE 3.1 · IdentityUpdateRequestDetails, as used by the simplest tab.
updateIdentity.ts is 111 lines: parse three fields, build details, build the request, sign,
encode, return. It is the one tab with a CLI equivalent (src/index.ts), which makes it the
best place to see the minimum viable path.
const details = IdentityUpdateRequestDetails.fromCLIJson(
params.identityChanges, // { name, parent, contentmultimap, … }
params.requestId // { requestid: "i…" }
? { requestid: CompactIAddressObject.fromAddress(params.requestId).toJson() }
: undefined
);
fromCLIJson is the bridge between "the JSON a Verus CLI prints" and the typed details
object. It accepts snake_case fields, parses the partial identity, and derives the detail flags from
the fields present. That is why this tab's form takes a JSON blob rather than eight separate inputs —
it is intentionally a thin skin over the CLI shape.
{ "name": "mylo",
"parent": "i…",
"contentmultimap": { "i…key": ["hex…"] } }
name + parent.expiryHeight if the flag is set, and refuses after that height.txid is present, the update must spend that transaction.| Symptom | Cause |
|---|---|
| QR scans, wallet says "invalid request" | identityChanges is not an object, or the JSON has snake_case keys the parser rejects |
| Update applies but nothing changes | Partial identity field missing — the bitmask has no bit for it |
| Signature error at generation time | Signing identity not in the daemon's wallet, or wrong chain for the port |
src/routes/requests/updateIdentity.ts src/index.ts # CLI version of the same flow src/routes/utils.ts # buildGenericRequestFromDetails + signRequest