Skip to content

ENS Resolver Upgrade Implementation #113

@apbendi

Description

@apbendi

Rough spec for the flow needed to set up existing ENS name holders to use Umbra.

Contract Address

  • ENS Registry (mainnet & rinkeby): 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e
  • Public Resolver:
    • rinkeby: 0xf6305c19e814d2a75429Fd637d01F7ee0E77d615
    • mainnet: 0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41
  • Umbra Resolver (i.e. ForwardingStealthKeyResolver):
    • rinkeby: 0x291e2dfe31CE1a65DbEDD84eA38a12a4D5e01D39
    • mainnet: TBD

Steps

  1. Check the reverse record for the current account. If it doesn't resolve to an ENS name, link them to ENS or give them the option to register a subdomain
  2. Check if the current account is the owner by calling owner(bytes32 node) on the ENS Registry. If they're not, tell them they can't configure their ENS name unless they're the owner, and direct them to the ENS App or give them the option to register a subdomain.
  3. Check the user's current resolver by calling resolver(bytes32 node) on the ENS Registry
    • If the resolver is the Public Resolver, continue to the next step
    • If the resolver is Umbra Resolver, see if they have stealth keys by calling stealthKeys(bytes32 node)
      • If they do, they're already set up with Umbra!
      • If they don't, they somehow got to a weird state, but we can recover cleanly by setting the stealth keys on the Umbra Resolver using setStealthKeys(bytes32 node, uint256 spendingPubKeyPrefix, uint256 spendingPubKey, uint256 viewingPubKeyPrefix, uint256 viewingPubKey)
    • If the resolver is anything else, tell them they can't use Umbra with their ENS name unless they're using the public resolver. Direct them to the ENS app or give them the option to register a subdomain.
  4. Authorize the Umbra Resolver on the Public Resolver by calling setAuthorisation(bytes32 node, address target, bool isAuthorised) on the Public Resolver, where target is the Umbra Resolver's address and isAuthorised is true.
  5. Set the stealth keys on the Umbra Resolver by calling setStealthKeys(bytes32 node, uint256 spendingPubKeyPrefix, uint256 spendingPubKey, uint256 viewingPubKeyPrefix, uint256 viewingPubKey)
  6. Change the user's resolver to the Umbra Resolver by calling setResolver(bytes32 node, address resolver) where resolver is the Umbra Resolver's address

Validation

If everything went well, after the txs succeed:

  • Checking the user's resolver by calling resolver(bytes32 node) on the ENS Registry should return the Umbra Resolver address
  • Checking the user's stealth keys by calling stealthKeys(bytes32 node) on the Umbra Resolver should return the expected public keys
  • Checking the user's address by calling addr(bytes32 node) on the Umbra Resolver should return the user's account

Metadata

Metadata

Assignees

Labels

appA change related to the Umbra frontendlibraryA change related to the umbra-js library

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions