> ## Documentation Index
> Fetch the complete documentation index at: https://docs.peaq.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Wallet

> Create EVM wallet addresses from ROS 2 without ever passing secrets over services.

Use the wallet service to create a new EVM address that the robot can use for USDT operations on peaq EVM. The mnemonic is stored locally in the shared registry file and is never sent over ROS by default.

## Service Reference

| Service                           | Type                                          | Purpose                                                   |
| --------------------------------- | --------------------------------------------- | --------------------------------------------------------- |
| `/peaq_tether_node/wallet/create` | `peaq_ros2_interfaces/srv/TetherCreateWallet` | Create a new EVM wallet address (mnemonic stored locally) |

## Launch Prerequisites

Start `peaq_tether_node` once, then call services as needed.

* To start/stop the node (tmux + background options), follow the steps in [Service Index](/peaqchain/sdk-reference/robotics-sdk/ros2/tether/overview).
* In any new terminal where you run `ros2` commands, make sure you’ve sourced your ROS/workspace environment and set the same `ROS_DOMAIN_ID` as the node:

```bash theme={"theme":{"light":"github-light-default","dark":"github-dark"}}
# source /opt/ros/<your_ros_distro>/setup.bash
# source <path to your peaq-robotics-ros2 clone>/install/setup.bash
export ROS_DOMAIN_ID="${ROS_DOMAIN_ID:-94}"
```

## Create a Wallet Address

```bash theme={"theme":{"light":"github-light-default","dark":"github-dark"}}
export ROS_DOMAIN_ID="${ROS_DOMAIN_ID:-94}"
ros2 service call /peaq_tether_node/wallet/create \
  peaq_ros2_interfaces/srv/TetherCreateWallet \
  "{label: 'robot_001', export_mnemonic: false}"
```

Response fields:

* `address`: checksummed EVM address (0x...)
* `mnemonic`: empty unless **both** of the following are true:
  * You call the service with `export_mnemonic: true`
  * You explicitly allow unsafe export in config (`tether.wallet_registry.unsafe_export_mnemonic: true`)

## Unsafe Mnemonic Export (Development Only)

Mnemonic export is disabled by default. To enable it temporarily for local testing:

1. Set the config flag in `peaq_robot.yaml`:

```yaml theme={"theme":{"light":"github-light-default","dark":"github-dark"}}
tether:
  wallet_registry:
    unsafe_export_mnemonic: true
```

2. Request export in the service call:

```bash theme={"theme":{"light":"github-light-default","dark":"github-dark"}}
export ROS_DOMAIN_ID="${ROS_DOMAIN_ID:-94}"

# Restart the node after enabling unsafe export in config (stop + start using your chosen method).
# Example stop command (background mode):
# pkill -f "peaq_ros2_tether.*tether_node" 2>/dev/null || true

ros2 service call /peaq_tether_node/wallet/create \
  peaq_ros2_interfaces/srv/TetherCreateWallet \
  "{label: 'robot_001', export_mnemonic: true}"
```

> Warning: Never enable mnemonic export in production. Treat exported mnemonics like root credentials.

## Operational Tips

* Treat the returned `address` as the only identifier used by the tether node APIs.
* Do not enable mnemonic export in production.
* Back up the registry file securely if the address controls real funds.
