Names → accounts

VLRegistry

Public, cross-chain account naming and contract discovery.

What VLRegistry is for.

Public, cross-chain account naming and contract discovery.

Anyone may resolve names. EOA registration needs the named account's signature; upgrades and lifecycle policy are owner-controlled.

How it fits together.

  1. A wallet signs a name registration, or a contract exposes its registry name.
  2. VLRegistry stores the name-to-account relationship for the selected chain.
  3. Applications resolve names, addresses, and public account attributes before acting.

Declared public interface.

These are the public and external methods declared directly by VLRegistry. Inherited token, ownership, and upgrade methods follow their respective standards.

initialize()Transaction

Initializes the deployed contract and its required dependencies.

registryName() returns (string memory)Read

Returns the human-readable name used for contract registration.

registerAddress(string calldata name, address account, bytes calldata signature) returns (bytes32 nameHash)Transaction

Registers the supplied account, relationship, or event subscription.

registerAddress(string calldata name, address account, uint256 accountChainId, bytes calldata signature) returns (bytes32 nameHash)Transaction

Registers the supplied account, relationship, or event subscription.

registerAddressWithAttributes(string calldata name, address account, AttributeInput[] calldata attributes, bytes calldata signature) returns (bytes32 nameHash)Transaction

Registers the supplied account, relationship, or event subscription.

registerContract(address account) returns (bytes32 nameHash)Transaction

Registers the supplied account, relationship, or event subscription.

updateNameAddress(string calldata name, address account, bool contractAccount) returns (bytes32 nameHash)Transaction · onlyOwner

Executes the update name address operation.

updateNameAddress(string calldata name, address account, uint256 accountChainId, bool contractAccount) returns (bytes32 nameHash)Transaction · onlyOwner

Executes the update name address operation.

deleteName(string calldata name) returns (address account)Transaction · onlyOwner

Removes or releases the specified record, permission, or held value.

releaseName(string calldata name) returns (address account)Transaction

Removes or releases the specified record, permission, or held value.

setInactivityPeriod(uint256 nextInactivityPeriod)Transaction · onlyOwner

Updates the named protocol configuration value or permission.

inactivityPeriod() returns (uint256)Read

Executes the inactivity period operation.

markAbandoned(string calldata name) returns (bytes32 nameHash)Transaction · onlyOwner

Executes the mark abandoned operation.

reactivateName(string calldata name, address account, bytes calldata signature) returns (bytes32 nameHash)Transaction

Executes the reactivate name operation.

resolveName(string calldata name) returns (Registration memory)Read

Reads the requested contract state or calculated result without changing state.

resolveContract(bytes32 key) returns (address account)Read

Reads the requested contract state or calculated result without changing state.

requireContract(bytes32 key) returns (address account)Read

Executes the require contract operation.

resolveAddress(address account) returns (Registration memory)Read

Reads the requested contract state or calculated result without changing state.

resolveAddress(address account, uint256 accountChainId) returns (Registration memory)Read

Reads the requested contract state or calculated result without changing state.

isNameRegistered(string calldata name) returns (bool)Read

Reads the requested contract state or calculated result without changing state.

nameLifecycle(string calldata name) returns (NameLifecycle memory)Read

Executes the name lifecycle operation.

isNameAvailable(string calldata name) returns (bool)Read

Reads the requested contract state or calculated result without changing state.

setAccountAttribute(bytes32 keyHash, bytes calldata keyData, bytes calldata valueData, bool privateAttribute)Transaction

Updates the named protocol configuration value or permission.

deleteAccountAttribute(bytes32 keyHash)Transaction

Removes or releases the specified record, permission, or held value.

accountAttribute(address account, bytes32 keyHash) returns (AccountAttribute memory)Read

Executes the account attribute operation.

accountAttributes(address account) returns (AccountAttribute[] memory records)Read

Executes the account attributes operation.

findAccountsByAttribute(bytes32 keyHash, bytes32 valueHash, uint256 offset, uint256 limit) returns (address[] memory accounts)Read

Reads the requested contract state or calculated result without changing state.

accountCountByAttribute(bytes32 keyHash, bytes32 valueHash) returns (uint256)Read

Reads the requested contract state or calculated result without changing state.

registrationDigest(string memory name, address account) returns (bytes32)Read

Executes the registration digest operation.

registrationDigest(string memory name, address account, uint256 accountChainId) returns (bytes32)Read

Executes the registration digest operation.

registrationWithAttributesDigest(string memory name, address account, AttributeInput[] memory attributes) returns (bytes32)Read

Executes the registration with attributes digest operation.

reactivationDigest(string memory name, address account, uint256 epoch) returns (bytes32)Read

Executes the reactivation digest operation.

Connect with ethers v6.

import { Contract, JsonRpcProvider, Wallet, encodeBytes32String, parseUnits } from "ethers";

const provider = new JsonRpcProvider(process.env.RPC_URL);
const signer = new Wallet(process.env.SIGNER_PRIVATE_KEY, provider);
const at = (address, abi, writable = false) =>
  new Contract(address, abi, writable ? signer : provider);

const registry = at(REGISTRY, [
  "function resolveName(string) view returns ((string,bytes32,address,uint256,address,bool,uint256))"
]);
const record = await registry.resolveName("priceedge.me");
console.log(record.account, record.chainId);

Use the address for the chain you selected.

Read the deployment manifest or resolve the configured registry entry for the target network. Test on a local or test network before using a privileged signer. See the contract source and contract index for the full interface.