# Technical

**The XRP Domains is designed to be compatible with the XLS-20 (NFT) storage standard on the XRP Ledger.**

### Domain Name Standard

All domain names must be normalized using a process called UTS-46 normalization. This ensures that uppercase and lowercase names are considered the same (**alice.xrp** = **ALICE.xrp = AliCe.xrp**), and also removes any spaces, white spaces, dots, and other invalid characters that are prohibited.

All domain names entered into the system must follow standardized naming conventions to ensure a consistent appearance for all users. This helps to prevent duplication and confusion between similar-looking names, and enhances security for our users.

The domain name is stored on the **XRP Ledger** with the mapping **NFTokenID** with **URI**. This **URI** will contain the domain name with the following structure:&#x20;

**https\://{host}/{sub-folder}/hello.xrp**

When resolving domain names, the XRP Domains system will parse this **URI** structure to ensure that the full domain name is obtained.

```
{
    "NFTokenID":"0008000043F7F087FD0F9CC7E2A1B173601FA4B35304904AB3E563A400000109",
    "URI":"68747470733A2F2F7872706E732D6D657461646174612D736572766963652E6865726F6B756170702E636F6D2F746573746E65742F68756C6C6F"
    //https://{host}/{sub-folder}/hello.xrp
}
```

```
const url = xrpl.convertHexToString(URI);
const obj = XRPIDjs.parseURI(url);
//domain object
obj.name// hello.xrp
obj.tld // .xrp
obj.sub // sub
obj.nameless // hello
```

The **URI** will also will also return metadata (domain information) as JSON, ensuring compatibility with marketplaces such as onXRP.com, xrp.cafe, and others. Please check the link below for more information.

{% embed url="<https://docs.xrpdomains.xyz/getting-started/metadata>" %}

### Domain Registration

When buyers register a domain, they will need to go through five steps as outlined below:

<figure><img src="https://1483130842-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F69A3jx2fInuaLsJBZ4Xk%2Fuploads%2FlSHJePaqJrs0i9KAb0wL%2FRegistry%20Controller.jpg?alt=media&#x26;token=7f67bc09-1571-4f33-8440-bc44512a124d" alt=""><figcaption></figcaption></figure>

**Step 1:** When a buyer submits a **hello.xrp** registration request, it should be validated by checking naming standards first and then verifying if hello.xrp has an owner.

**Step 2:** The user must connect their Xumm wallet and confirm a single payment transaction to purchase **hello.xrp**. It is important to ensure that the wallet has sufficient balance and is connected to the correct network (mainnet).

**Step 3:** Once the payment is successfully confirmed on the **XRP Ledger**, the system will generate an order to reserve the **hello.xrp** for the buyer. The system will not mint **hello.xrp** directly. Instead, it will be added to a queue and minted only when the user completes the payment. When the payment is confirmed, the system will grant the user permission and create the **hello.xrp.**

**Step 4:** After the payment is confirmed, the system will mint the **hello.xrp** (which typically takes 1-2 minutes), in case there is an error, the buyer can check in the "**Domains Pending"** section on the dApp and proceed to complete the minting process for **hello.xrp.** The system will record the domain name to the **XRP Ledger** and map the **NFTokenID** to the corresponding **URI.** Check also: [**Domain name standards**](https://docs.xrpdomains.xyz/getting-started/technical#domain-name-standard)

**Step 5:** Once the minting process is complete, the system will send a request to the buyer's Xumm wallet The buyer must **Accept** this request to transfer the **hello.xrp** io their wallet and establish ownership. Alternatively, they can confirm the request later by checking the "**Incoming Domains**" section on the dApp.

### Domain Resolution&#x20;

Domain resolution involves the same first step as **Domain Registration**, where the validity of the domain is checked. Next, the SDKs & APIs will be utilized to query and retrieve information about the domain's owner, as well as other details such as social information and wallet addresses. [Read more](https://docs.xrpdomains.xyz/developer-guide/sdk)

### Domain Transfer

Domain transfer requires 2 steps as follows:

**Step 1:** The transferer will use the dApp to create an **NFTokenCreateOffer** command with the recipient's address set as the **Destination,** and set the Expiration to 10 days. The command will then be signed using the Xumm wallet. The transferor can also **cancel** this command by checking the "**Outgoing Domains**" section on the dApp.

**Step 2:** The recipient will see the transferred domain in the "**Incoming Domains**" section on the dApp.  You must click on "Accept" and sign the transaction using their Xumm wallet to complete the domain transfer process.

<figure><img src="https://1483130842-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F69A3jx2fInuaLsJBZ4Xk%2Fuploads%2FvibvLii8o0dbiZDlclfr%2Fimage.png?alt=media&#x26;token=a1087f5d-611f-4a28-8519-fc64e376734e" alt=""><figcaption></figcaption></figure>
