> For the complete documentation index, see [llms.txt](https://docs.clusters.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.clusters.xyz/integration-guides/registering-a-name/solana.md).

# Solana

1. **Let the user decide what name they want**

<figure><img src="/files/0RvG1cLL8QtO3CQGhE23" alt=""><figcaption></figcaption></figure>

You'll want to provide some sort of input box that allows a user to see if the name they want is available.

2. **Check if the name is valid**

There are some restrictions for registering a name. In short, the name must fit in 32 bytes, must not have a space, or a /.

```javascript
import { isNameValid } from "@clustersxyz/sdk"

const validName = "clusters";
console.log(isNameValid(validName)); // true

const invalidName = "c/c/c/c";
console.log(isNameValid(invalidName)); // false
```

3. **Once you know the name is valid, make sure the name is not taken**

```javascript
import { isNameValid } from "@clustersxyz/sdk"

const name = "clusters";
const nameAvailability = await clusters.getNameAvailability([name]);
console.log(nameAvailability[0].isAvailable) // false
```

4. **Get the raw transaction data for the on-chain transaction**

This call will get you the on-chain transaction data to register the names you want at the minimum registration fee of 0.01 ETH (converted to lamports).

{% hint style="info" %}
If you want to impose a specific registration amount, you can do so in the names array. Input these amounts in Wei and they'll be converted to SOL. Check out the documentation on [getting the transaction data](/getting-started/javascript/registration.md#getregistrationtransaction-names-sender-network) to learn more.
{% endhint %}

```javascript
const names = [{ name: 'mynewname' }];
const signerAddress = 'A59..iHqw';
const data = await clusters.getRegistrationTransactionSolana(names, signerAddress);
```

5. **You can now display the registration fee**

```typescript
import { LAMPORTS_PER_SOL } from '@solana/web3.js';

const registrationFee = Number(data.registrationFee) / LAMPORTS_PER_SOL;

// Total Registration fee: 0.2248 SOL
console.log(`Total Registration fee: ${registrationFee} ${data.gasToken.symbol}`);
```

6. **Submit the transaction**

```javascript
// Example of a solana provider
// https://docs.phantom.app/solana/detecting-the-provider
const solanaProvider = window.phantom?.solana;

for (const transaction of data.transactionData) {
   const deserializedMessage = web3.VersionedMessage.deserialize(
      Buffer.from(transaction, 'base64')
   );
   const newTransaction = new web3.VersionedTransaction(deserializedMessage);
   
   const signedTransaction = await $Wallet.solanaProvider.signTransaction(newTransaction);
   const signature = await connection.sendTransaction(signedTransaction);
}
```

7. **Track the status of the transaction**

Once the transaction is submitted, you can check when the registration has been processed. An alternative method is pinging the `getNameAvailability()` function to see when the name becomes taken.

```javascript
const getStatus = await clusters.getTransactionStatus(signature);
console.log(getStatus.status) // finalized
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.clusters.xyz/integration-guides/registering-a-name/solana.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
