IDotnsPopResolver

Git Source

Title: IDotnsPopResolver

Resolver for per-name records produced by the dotNS gateway pallet.

Holds three record kinds:

  • Chat key: ECDH public-key bytes used for end-to-end encrypted messaging.
  • Device link (deviceLabelhashOf): for a personhood-name node, the labelhash of the device name it was linked to when it was issued.
  • Personhood link (personhoodNodeOf): reverse index mapping a device-name labelhash to the personhood-name node it is linked to. Mirrors deviceLabelhashOf on every write so a caller that holds a device-name labelhash can resolve the personhood name without scanning events. Lives separately from the per-user LabelStore so that the store can remain a labels-only, protocol-write / user-read surface, and follows the project's resolver-per-record-category convention used by @custom:contract IDotnsContentResolver and

Notes:

  • contract: IDotnsReverseResolver. Write authorisation is delegated to the address registered as DotnsProtocolRegistry.POP_CONTROLLER at call time, so rotating the PoP controller is a single set on the protocol registry with no resolver upgrade required.

  • security-contact: admin@parity.io

Functions

setChatKey

Sets the chat key for node.

Callable only by the address registered under DotnsProtocolRegistry.POP_CONTROLLER, otherwise @custom:reverts NotPopController. Overwrites any previous value. The payload must be exactly 65 bytes: the uncompressed secp256k1 public key encoding (1 prefix byte followed by the 32-byte X and 32-byte Y affine coordinates); any other length reverts with @custom:reverts InvalidChatKeyLength. Emits @custom:emits ChatKeyUpdated on every successful write.

function setChatKey(bytes32 node, bytes calldata chatKey) external;

Parameters

NameTypeDescription
nodebytes32The node whose chat key is being written.
chatKeybytesECDH public key bytes (pallet-side type is [u8; 65]).

Sets the device link for a personhood-name node.

Callable only by the authorised PoP controller, otherwise

Note: reverts: NotPopController. Overwrites any previous link. When overwriting, the stale inverse entry is nulled so both the forward (deviceLabelhashOf) and reverse (personhoodNodeOf) indices remain consistent: re-linking the same personhoodNode to a new deviceLabelhash clears personhoodNodeOf(oldDevice), and re-linking the same deviceLabelhash to a new personhoodNode clears deviceLabelhashOf(oldPersonhood). The invariant personhoodNodeOf(deviceLabelhashOf(node)) == node always holds after the call. Emits @custom:emits DeviceLinkUpdated on every successful write.

function setDeviceLink(bytes32 personhoodNode, bytes32 deviceLabelhash) external;

Parameters

NameTypeDescription
personhoodNodebytes32The personhood-name node carrying the link.
deviceLabelhashbytes32The labelhash of the linked device name.

chatKey

Returns the chat key associated with a node.

function chatKey(bytes32 node) external view returns (bytes memory chatKey);

Parameters

NameTypeDescription
nodebytes32The node to query.

Returns

NameTypeDescription
chatKeybytesThe stored chat key bytes, or empty if unset.

deviceLabelhashOf

Returns the device-name labelhash linked to a personhood-name node.

function deviceLabelhashOf(bytes32 personhoodNode)
    external
    view
    returns (bytes32 deviceLabelhash);

Parameters

NameTypeDescription
personhoodNodebytes32The personhood-name node to query.

Returns

NameTypeDescription
deviceLabelhashbytes32The linked device-name labelhash, or zero if unset.

personhoodNodeOf

Returns the personhood-name node a device name is linked to.

Reverse of @custom:function deviceLabelhashOf. Written by the same setDeviceLink call so the two directions stay in lockstep. Returns zero when the device name has never been linked to a personhood name.

function personhoodNodeOf(bytes32 deviceLabelhash)
    external
    view
    returns (bytes32 personhoodNode);

Parameters

NameTypeDescription
deviceLabelhashbytes32The labelhash of the device name to query.

Returns

NameTypeDescription
personhoodNodebytes32The linked personhood-name node, or zero if unset.

Events

ChatKeyUpdated

Emitted when a node's chat key is set or updated.

event ChatKeyUpdated(bytes32 indexed node, bytes chatKey);

Parameters

NameTypeDescription
nodebytes32The node whose chat key was written.
chatKeybytesThe new chat key bytes.

DeviceLinkUpdated

Emitted when a personhood name's device link is set or updated.

event DeviceLinkUpdated(bytes32 indexed personhoodNode, bytes32 indexed deviceLabelhash);

Parameters

NameTypeDescription
personhoodNodebytes32The personhood-name node carrying the link.
deviceLabelhashbytes32The labelhash of the linked device name.

Errors

NotPopController

Thrown when the caller is not the authorised PoP controller.

error NotPopController(address caller);

Parameters

NameTypeDescription
calleraddressThe address that attempted the write.

InvalidChatKeyLength

Thrown when the provided chat key does not match the expected 65-byte length.

error InvalidChatKeyLength(uint256 length);

Parameters

NameTypeDescription
lengthuint256The length of the payload that was rejected.