> ## 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.

# USDT Transfer

> Dry-run and broadcast USDT transfers on peaq EVM using address-only ROS 2 services.

Use this service to transfer USDT from a locally-managed wallet address to any recipient address. The service is **address-only**:

* `from_address` identifies which local wallet to use for signing (mnemonic loaded from the local registry)
* `to_address` is the destination address

## Service Reference

| Service                           | Type                                          | Purpose                                                          |
| --------------------------------- | --------------------------------------------- | ---------------------------------------------------------------- |
| `/peaq_tether_node/usdt/transfer` | `peaq_ros2_interfaces/srv/TetherTransferUsdt` | Transfer USDT from a local wallet address to a recipient address |

## 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}"
```

## Dry-run (Quote Only)

Use `dry_run: true` to estimate and validate the transfer without broadcasting:

```bash theme={"theme":{"light":"github-light-default","dark":"github-dark"}}
export ROS_DOMAIN_ID="${ROS_DOMAIN_ID:-94}"
ros2 service call /peaq_tether_node/usdt/transfer \
  peaq_ros2_interfaces/srv/TetherTransferUsdt \
  "{from_address: '0xFROM', to_address: '0xTO', amount: '0.05', dry_run: true}"
```

## Real Transfer (Broadcast)

```bash theme={"theme":{"light":"github-light-default","dark":"github-dark"}}
export ROS_DOMAIN_ID="${ROS_DOMAIN_ID:-94}"
ros2 service call /peaq_tether_node/usdt/transfer \
  peaq_ros2_interfaces/srv/TetherTransferUsdt \
  "{from_address: '0xFROM', to_address: '0xTO', amount: '0.05', dry_run: false}"
```

## Common Failure Modes

* `INSUFFICIENT_FUNDS`: the `from_address` lacks native token for gas (even if USDT amount is 0).
* `Unknown address`: the `from_address` is not present in the local registry (no mnemonic available for signing).
* Provider rate limits: retry after a short delay, or use a higher-throughput RPC provider.
