# 5 Create Test Accounts

This section provides guidance on how to create an account name using a public key.

## About an account

An account is a collection of authorizations stored on the blockchain and used to identify a sender/recipient. It has a flexible authorization structure that enables it to be owned either by an individual or by group of individuals depending on how permissions have been configured. An account is required to send or receive a valid transaction to the blockchain.

This tutorial series uses two "user" accounts, `bob` and `alice`, as well as the default `cyberway` account for configuration. Additionally accounts are made for various contracts throughout this tutorial series.

## Create Test Accounts

> **Public Key Persistence**\
> In section [Create Development Wallet](https://docs.cyberway.io/development_environment/create_development_wallet), you created a development key pair and pasted the public key in the *Development Public Key* field for the value to persist throughout the tutorial.

In the following steps, if you see `YOUR_PUBLIC_KEY` instead of the public key value, you can either go back to section [Create Development Wallet](https://docs.cyberway.io/development_environment/create_development_wallet) and persist the value or replace `YOUR_PUBLIC_KEY` with the public key value manually.

Throughout these tutorials the accounts `bob` and `alice` are used. Create two accounts using `cleos create account`:

```bash
cleos create account cyberway bob YOUR_PUBLIC_KEY
cleos create account cyberway alice YOUR_PUBLIC_KEY
```

For each command that confirms that the transaction has been broadcast, you should see a confirmation message similar to the following:

```bash
executed transaction: 40c605006de...  200 bytes  153 us
#         cyberway <= cyberway::newaccount            {"creator":"cyberway","name":"alice","owner":{"threshold":1,"keys":[{"key":"EOS5rti4LTL53xptjgQBXv9HxyU...
warning: transaction executed locally, but may not be confirmed by the network yet    ]
```

## Public Key

Note in `cleos` command a public key is associated with account `alice`. Each CyberWay account is associated with a public key.

Be aware that the account name is the only identifier for ownership. You can change the public key but it would not change the ownership of your CyberWay account.

Check which public key is associated with `alice` using `cleos get account`:

```bash
cleos get account alice
```

You should see a message similar to the following:

```bash
permissions:
     owner     1:    1 GLS6MRyAjQq8ud7h...HuGYqET5GDW5CV
     active    1:    1 GLS6MRyAjQq8u...8BhtHuGYqET5GDW5CV
memory:
     quota:       unlimited  used:      3.758 KiB

net bandwidth:
     used:               unlimited
     available:          unlimited
     limit:              unlimited

cpu bandwidth:
     used:               unlimited
     available:          unlimited
     limit:              unlimited
```

Notice that actually `alice` has both `owner` and `active` public keys. CyberWay has a unique authorization structure that has added security for your account. You can minimize the exposure of your account by keeping the owner key cold, while using the key associated with your `active` permission. This way, if your `active` key were ever compromised, you could regain control over your account with your `owner` key.

In term of authorization, if you have an `owner` permission you can change the private key of `active` permission. But you cannot do so other way around.

> **Using Different Keys for Active/Owner on a PRODUCTION Network**\
> In this tutorial we are using the same public key for both *owner* and *active* for simplicity. In production network, two different keys are strongly recommended.

## Troubleshooting

If you get an error while creating the account, make sure your wallet is unlocked:

```bash
cleos wallet list
```

You should see an asterisk (\*) next to the wallet name like this one:

```bash
Wallets:
[
  "default *"
]
```


---

# Agent Instructions: 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:

```
GET https://docs.cyberway.io/development_environment/create_test_accounts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
