It does look like you can save some gas using this technique.
I deployed a BudgetReverseRegistrar and then set a resolver from an EOA, where:
function claim(address resolver) external {
bytes32 hash = sha3HexAddress(msg.sender);
ens.setSubnodeRecord(REVERSE_NODE, hash, address(this), resolver, 0);
ens.setSubnodeOwner(REVERSE_NODE, hash, address(0));
}
This is just exploiting the fact that the owner of a reverse record is superfluous as the reverse registrar lets the rightful owner reclaim it.
If that resolver was an wildcard off-chain resolver, an external server would just answer resolve("{addr}.addr.reverse", name()) which is address β name.
85k gas for any length name (since no name stored on-chain)
The current reverse registrar for short names is 114k gas (34% more expensive) and 160k gas for a 33-character primary.
IMO, setting a wildcard on addr.reverse seems dangerous since it lets that resolver provide a name for any address, but individually setting each addressβs resolver to the same wildcard seems fine. Minimizing gas to set your reverse resolver to an offchain database seems reasonable for on-boarding.
Like I described previously, using the same setup, new contracts could set their resolver to themselves during construction, and then just answer their own name(node) query.
Or set their resolver to some fixed deployment, like DotEthContractNameWildcardResolver, which on resolve("{addr}.addr.reverse", name()), reads addr.dotethname() from the corresponding contract and appends ".eth".