Skip to content

Naming System - intended usage

Introduction

The way to interact with Naming System is to use HTTP API. To read about possible states and life cycle of a name please see the doc.

The following assumes that the node exposes at address 127.0.0.1 the following ports:

  • User API external HTTP endpoint: 3013
  • User API internal HTTP endpoint: 3113

Name management flow

In order to work through the example we need the (Base58Check-encoded) public-private key pair of the account with positive balance.

Verify availability

Verify that the name that your going to claim is not taken using the /names/{name} endpoint. For the purpose of this example let's consider foobar.test name:

curl http://localhost:3013/v2/names/foobar.test
{"reason":"Name not found"}

Preclaim

In order to claim a name you need to submit a preclaim transaction first, containing commitment hash.

You need to pick a random salt value, to make commitment hash unique. Commitment hash is calculated based on the formula. For the purpose of this example name foobar.test with salt 123 is considered. In order to obtain commitment hash use the /debug/names/commitment-id endpoint:

curl http://localhost:3113/v2/debug/names/commitment-id\?name\=foobar.test\&salt\=123
{"commitment_id":"cm_2ijL6NFZ11RsBVWwFB69oZYp6gFV9JSB71xccbnqrPisEiMrji"}

To preclaim a name:

  • prepare name preclaim transaction as per specification. In order to ease the initial integration, the æternity node provides /debug/names/preclaim endpoint:
    curl -X POST -H "Content-Type: application/json" http://localhost:3113/v2/debug/names/preclaim -d '{"commitment_id":"cm_2ijL6NFZ11RsBVWwFB69oZYp6gFV9JSB71xccbnqrPisEiMrji", "fee": 1, "ttl":1234, "account_id":"ak_tjnw1KcmnwfqXvhtGa9GRjanbHM3t6PmEWEWtNMM3ouvNKRu5"}'
    {"tx":"..."}
    
  • sign the prepared transaction (e.g. by using the SDK)
  • post the signed transaction using the /transactions endpoint

Mind that preclaim and claim transactions will not be accepted in the same generation, so please check that at least one key block is mined before submitting claim transaction. To check the height of the blockchain use the /generations/current endpoint.

Claim

When a name is preclaimed, you are in a position to claim it:

  • prepare name claim transaction as per specification. In order to ease the initial integration, the æternity node provides /debug/names/claim endpoint. You must use the name with the same salt as used in commitment hash computation. Note that the name should be API encoded in the same way as a name hash.
    curl -X POST -H "Content-Type: application/json" http://localhost:3113/v2/debug/names/claim -d '{"name": ""nm_3sDdKewfAc1ektVJpwuTD", "name_salt": 123, "fee": 1, "ttl":1234, "account_id":"ak_tjnw1KcmnwfqXvhtGa9GRjanbHM3t6PmEWEWtNMM3ouvNKRu5"}'
    {"tx":"..."}
    
  • sign the prepared transaction (e.g. by using the SDK)
  • post the signed transaction using the /transactions endpoint

After claiming the name (and claim transaction being accepted) you may verify name presence using the /names/{name} endpoint.

Note that the name is claimed for the max period (50000 blocks) and relative to the current height of chain.

Update

In order to make better use of claimed name you need to specify where it should point to. To do so, specify pointers, which translates to different blockchain entities. In the initial version the following well-known pointer keys are available:

  • account_pubkey

In order to update pointers:

  • prepare name update transaction as per specification. In order to ease the initial integration, the æternity node provides /debug/names/update endpoint:
    curl -X POST -H "Content-Type: application/json" http://localhost:3113/v2/debug/names/update -d '{"name_id": "nm_2S4U3A6LGh2LASvbA1RgA6WVq9FDBCfEZK6FN5uL65MPVhiVGL", "name_ttl": 10000, "client_ttl": 50, "pointers":[{"key":"account_pubkey", "id":"ak_3scLu3oJbhsdCJkDjfJ6BUPJ4M9ZZJe57CQ56deSbEXhaTSfG3Wf3i2GYZV6APX7RDDVk4Weewb7oLePte3H3QdBw4rMZw"}], "fee": 1, "ttl":1234, "account_id":"ak_tjnw1KcmnwfqXvhtGa9GRjanbHM3t6PmEWEWtNMM3ouvNKRu5"}'
    {"tx":"..."}
    
  • sign the prepared transaction (e.g. by using the SDK)
  • post the signed transaction using the /transactions endpoint

Note that name_ttl is relative to the current height of the chain. Here we shortened the claim.

Spend to name

Now you may use account and oracle pointers interchangeably with their addresses. In order to utilize account pubkey pointer, put a name instead of an account key, e.g. in spend transaction put it in recipient_id field:

curl -X POST -H "Content-Type: application/json" -d '{"sender_id":"...", "recipient_id":"foobar.test", "amount":2, "fee":1, "ttl":1234}' http://127.0.0.1:3113/v2/debug/transactions/spend

Transfer ownership

In order to transfer a name to another user:

  • prepare name transfer transaction as per specification. In order to ease the initial integration, the æternity node provides /debug/names/transfer endpoint:
    curl -X POST -H "Content-Type: application/json" http://localhost:3113/v2/debug/names/transfer -d '{name_id": "nm_2S4U3A6LGh2LASvbA1RgA6WVq9FDBCfEZK6FN5uL65MPVhiVGL", "recipient_id": "ak_3scLu3oJbhsdCJkDjfJ6BUPJ4M9ZZJe57CQ56deSbEXhaTSfG3Wf3i2GYZV6APX7RDDVk4Weewb7oLePte3H3QdBw4rMZw", "account_id":"ak_tjnw1KcmnwfqXvhtGa9GRjanbHM3t6PmEWEWtNMM3ouvNKRu5", "fee": 1, "ttl":1234}'
    {"tx":"..."}
    
  • sign the prepared transaction (e.g. by using the SDK)
  • post the signed transaction using the /transactions endpoint

Revoke

In order to revoke a name:

  • prepare name revoke transaction as per specification. In order to ease the initial integration, the æternity node provides /debug/names/revoke endpoint:
    curl -X POST -H "Content-Type: application/json" http://localhost:3113/v2/debug/names/revoke -d '{"name_id": "nm_2S4U3A6LGh2LASvbA1RgA6WVq9FDBCfEZK6FN5uL65MPVhiVGL", "fee": 1, "ttl":1234, "account_id":"ak_tjnw1KcmnwfqXvhtGa9GRjanbHM3t6PmEWEWtNMM3ouvNKRu5"}'
    {"tx":"..."}
    
  • sign the prepared transaction (e.g. by using the SDK)
  • post the signed transaction using the /transactions endpoint