Skip to content
On this page

Future Updates

In this section, we'll discuss the forthcoming enhancements and development roadmap for the Ever Name system.

Note

The following sections are currently under development and are not yet available on GitHub.

Domain Transfer Verification

Challenge

Current domain contracts allow the owner to set any address as the target, which is subsequently displayed in the wallet. This can be misused by malicious individuals who set inappropriate or provocative domain names to harass users.

Proposed Solution

We aim to introduce an intermediary action requiring confirmation of target assignment by the wallet.

Contract Interaction Framework

To understand the proposed solution, we'll delve into the functioning of the Certificate.sol contract.

Variables

  • address public _target; - The actual target value needed for interaction with other methods can be retrieved via the contract method resolve().
  • address public _pendingTarget; - The interim target value can be retrieved using the pendingResolve() method.

Methods

  • setTarget(address target) - Accessible only by the owner and only for an active domain. If target matches the owner, the _setTarget(target) function is invoked. If target doesn't match the owner, the _setPendingTarget(target) function is triggered.
  • _setTarget(address target) - A private method which modifies the _target variable to target.
  • _setPendingTarget(address target) - A private method that changes the _pendingTarget variable to target.
  • approvePendingTarget() - Accessible only by _pendingTarget. This method triggers _setTarget(_pendingTarget) and _setPendingTarget(0:0...0).
  • rejectPendingTarget() - Accessible only by _pendingTarget. This function invokes _setPendingTarget(0:0...0).
  • rejectTarget() - Accessible only by _target. This function calls _setTarget(0:0...0).

Workflow Example

Alice, the owner of the domain alice.friend, wishes to have her domain displayed on Bob's account. Alice invokes the setTarget(Bob) method and asks Bob to confirm it. Bob triggers the approvePendingTarget() method on the domain, and it is now displayed as alice.friend. If Bob doesn't wish to confirm Alice's generosity, he invokes the rejectPendingTarget() method.

Upon confirmation, if Alice is ever implicated in money laundering via a crypto-casino, Bob can disassociate the alice.friend domain at any moment by triggering the rejectTarget() method.

Bulk Domain Registration

Challenge

The Root.sol contract currently only supports the registration of domains on an individual basis. Each domain requires a separate payload generation and token transfer.

Proposed Solution

Our aim is to incorporate a feature allowing batch domain registration while retaining the option for individual registrations.

Contract Interaction Framework

In this context, we'll explore the methods of the Root.sol contract.

Structures

  • struct NameSet - Utilized for calculating the cost of registration.
    • string name; - The domain name.
    • uint128 duration; - The intended registration period.

Methods

  • buildRegisterBatchPayload(string[] names) - names is an array of domains to be registered subsequently. The method operates similar to buildRegisterPayload.
  • expectedRegisterBatchAmount(NameSet[] name_sets) - Essentially, it returns the number of tokens required for the registration of specified domains for the specified period.

Workflow Example

Alice, having successfully laundered all her money via a crypto-casino, decides to purchase multiple appealing domains. After adding telegram.venom, `shop.venom

, and ever.venom` to her shopping cart, Alice generates the payload as follows:

javascript
root.methods.buildRegisterBatchPayload({ names: ["telegram", "shop", "ever"] });

Next, Alice calculates the total cost as follows:

javascript
root.methods.expectedRegisterBatchAmount({
  name_sets: [
    {
      name: "telegram",
      duration: 60 * 60 * 24 * 365,
    },
    {
      name: "shop",
      duration: 60 * 60 * 24 * 365,
    },
    {
      name: "ever",
      duration: 60 * 60 * 24 * 365,
    },
  ],
});

Lastly, Alice transfers the calculated amount of tokens with the generated payload to the Root.sol address.