# EOA Wallets

### Prerequisites

{% content-ref url="/pages/kFmJGDEHByceRa56HMoy" %}
[Setup the dYdX CLI](/dydx-chain-technical-docs/getting-started/developer-tools/dydx-cli/setup-the-dydx-cli.md)
{% endcontent-ref %}

### 1. List wallets

{% hint style="info" %}
The command below will not read data from the blockchain, but only what has been added or imported into your local installation (By default the `keyring-backend`is set to `os)` \
You can change the keyring as preferred. When using the MacOS default keyring it may require you to unlock access to your Keychain app.
{% endhint %}

```bash
$ dydxprotocold keys list
- address: dydx1m4...dfpel
  name: test
  pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"Ara...zbQ0"}'
  type: local
```

{% hint style="info" %}
Note that the pubkey value can be used for sharing with multisig counterparties, when they instantiate the multisig on their workstations
{% endhint %}

```bash
dydxprotocold keys show test
```

###

### 2. Generate new wallet

Let’s say you want to name your wallet `myNewWallet` - you can choose an arbitrary name, that is meaningful to you. Spaces are allowed, although they might not be convenient when you try to use the wallet&#x20;

```bash
$ dydxprotocold keys add myNewWallet 
- address: dydx1cza...069c
  name: myNewWallet
  pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"A9QEyr+iQoCI...6IjzVG2vEMf"}'
  type: local


**Important** write this mnemonic phrase in a safe place.
It is the only way to recover your account if you ever forget your password.

some mnemonic keywords will appear here
```

This will output the newly created wallet information, as well as the mnemonic for it.

### 3. Import an existing wallet with a mnemonic

You will need to have the mnemonic of the wallet available. `myImportedWallet` is an example, use a name that is meaningful to you.

The command will halt with the message > Enter your bip39 mnemonic asking for your mnemonic - paste it (or enter it manually) and hit enter:

```bash
dydxprotocold keys add myImportedWallet --recover
```

### 4. Add an offline wallet

`dydxprotocold` allows you to add the public key of someone else’s wallet, so that you can, for example, work with a multisig containing that wallet. The section can help obtain a wallet’s public key.&#x20;

To add it to your setup, execute the following command, adjusting the name `offllineWallet` accordingly

```bash
$ dydxprotocold keys add offllineWallet --pubkey='{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"A9QEyr+iQoCI...6IjzVG2vEMf"}'
- address: dydx1cza...069c
  name: offllineWallet
  pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"A9QEyr+iQoCI...6IjzVG2vEMf"}'
  type: offline
```

### 5. Connect a Ledger HW wallet

{% hint style="warning" %}
💡 If you encounter the following error during the process, please perform the steps in Ledger Wallet and try again.

`Error: failed to generate ledger key: failed to retrieve device: ledger nano S: hidapi: failed to open device`
{% endhint %}

1. Connect your Ledger device to your workstation&#x20;
2. Make sure the Cosmos App is installed - open it&#x20;
3. Run the following command: (note that `myLedgerWallet` is an arbitrary name - you can choose your own name)

```bash
dydxprotocold keys add myLedgerWallet --ledger
- address: dydx1cza...069c
 name: myLedgerWallet
 pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"A9QEyr+iQoCI...6IjzVG2vEMf"}'
 type: ledger
```

To output the wallet address in the Ledger device - this will allow you to review the address on the device.

```bash
dydxprotocold keys show myLedgerWallet --device
```

{% hint style="info" %}
Every time you use dydxprotocold with `myLedgerWallet` you will need to have your Ledger device connected, the Cosmos app open on it
{% endhint %}

### 6. Rename a wallet

```bash
dydxprotocold keys rename <old name> <new name>
```

{% hint style="info" %}
💡 On MacOS, this may require you to input your password in Keychain several times.
{% endhint %}

### 7. Query token balances

You can list the tokens balances of an address with

```bash
dydxprotocold query bank balances dydx1y66c5c7zpcqxqgqec9ttutuwu60qkzav22h3ue
balances:
- amount: "22071848837500000000"
  denom: adydx
pagination:
  next_key: null
  total: "0"
```

### 8. Send a transaction

```bash
dydxprotocold tx bank send <from> <to> <amount><denom> --fees <fee amount><feedenom>
```

* `from:`can be either wallet name, or wallet address, but it cannot be an offline wallet&#x20;
* `to:`is the recipient’s wallet address&#x20;
* `amount denom:`e.g. 1000000000000000000 adydx for sending 1 DYDX&#x20;
* `fee amount denom:`e.g. 5000000000000000 adydx - this value may need adjustment

Let's take a look at an example on testnet:

```bash

$ dydxprotocold tx bank send testnetWallet \
dydx14zzueazeh0hj67cghhf9jypslcf9sh2n5k6art \
100000000000000000adv4tnt \
--fees 5000000000000000adv4tnt \
--node https://dydx-testnet-rpc.polkachu.com:443 \
--chain-id dydx-testnet-4


auth_info:
  fee:
    amount:
    - amount: "5000000000000000"
      denom: adv4tnt
    gas_limit: "200000"
    granter: ""
    payer: ""
  signer_infos: []
  tip: null
body:
  extension_options: []
  memo: ""
  messages:
  - '@type': /cosmos.bank.v1beta1.MsgSend
    amount:
    - amount: "100000000000000000"
      denom: adv4tnt
    from_address: dydx14zzueazeh0hj67cghhf9jypslcf9sh2n5k6art
    to_address: dydx14zzueazeh0hj67cghhf9jypslcf9sh2n5k6art
  non_critical_extension_options: []
  timeout_height: "0"
signatures: []
code: 0
codespace: ""
data: ""
events: []
gas_used: "0"
gas_wanted: "0"
height: "0"
info: ""
logs: []
raw_log: '[]'
timestamp: ""
tx: null
txhash: 985DB721FF8B65DB5FCAF57C93599DEDA5B5EDF7C24C8013112CE8752C7E2866

```

{% hint style="info" %}
For mainnet, pass `--chain-id dydx-mainnet-1` instead. Also make sur the node is a mainnet RPC endpoint.
{% endhint %}

### 9. Vote for a proposal

```bash
dydxprotocold query gov proposals
```

View a specific proposal details

```bash
$ dydxprotocold query gov proposal 22

deposit_end_time: "2024-02-28T06:16:24.014055663Z"
final_tally_result:
  abstain_count: "289052466830663152761344"
  no_count: "4808846255497145968117"
  no_with_veto_count: "19555000000000000000"
  yes_count: "90144414592955946800079127"
id: "22"
messages:
- '@type': /dydxprotocol.prices.MsgCreateOracleMarket
  authority: dydx10d07y265gmmuvt4z0w9aw880jnsr700jnmapky
  params:
    exchange_config_json: '{"exchanges":[{"exchangeName":"Binance","ticker":"STRKUSDT","adjustByMarket":"USDT-USD"},{"exchangeName":"Bybit","ticker":"STRKUSDT","adjustByMarket":"USDT-USD"},{"exchangeName":"Kraken","ticker":"STRKUSD"},{"exchangeName":"Kucoin","ticker":"STRK-USDT","adjustByMarket":"USDT-USD"},{"exchangeName":"Okx","ticker":"STRK-USDT","adjustByMarket":"USDT-USD"},{"exchangeName":"Gate","ticker":"STRK_USDT","adjustByMarket":"USDT-USD"}]}'
    exponent: -9
    id: 43
    min_exchanges: 3
    min_price_change_ppm: 4000
    pair: STRK-USD
- '@type': /dydxprotocol.perpetuals.MsgCreatePerpetual
  authority: dydx10d07y265gmmuvt4z0w9aw880jnsr700jnmapky
  params:
    atomic_resolution: -6
    default_funding_ppm: 0
    id: 43
    liquidity_tier: 2
    market_id: 43
    ticker: STRK-USD
- '@type': /dydxprotocol.clob.MsgCreateClobPair
  authority: dydx10d07y265gmmuvt4z0w9aw880jnsr700jnmapky
  clob_pair:
    id: 43
    perpetual_clob_metadata:
      perpetual_id: 43
    quantum_conversion_exponent: -9
    status: STATUS_INITIALIZING
    step_base_quantums: "1000000"
    subticks_per_tick: 1000000
- '@type': /dydxprotocol.delaymsg.MsgDelayMessage
  authority: dydx10d07y265gmmuvt4z0w9aw880jnsr700jnmapky
  delay_blocks: 3600
  msg:
    '@type': /dydxprotocol.clob.MsgUpdateClobPair
    authority: dydx1mkkvp26dngu6n8rmalaxyp3gwkjuzztq5zx6tr
    clob_pair:
      id: 43
      perpetual_clob_metadata:
        perpetual_id: 43
      quantum_conversion_exponent: -9
      status: STATUS_ACTIVE
      step_base_quantums: "1000000"
      subticks_per_tick: 1000000
metadata: ""
proposer: dydx19rl2uqr87c6sv8p7lhg9yz4mde3cdaluk4ss5w
status: PROPOSAL_STATUS_PASSED
submit_time: "2024-02-21T06:16:24.014055663Z"
summary: Add the x/prices, x/perpetuals and x/clob parameters needed for a STRK-USD
  perpetual market. Create the market in INITIALIZING status and transition it to
  ACTIVE status after 3600 blocks.
title: Add STRK-USD perpetual market
total_deposit:
- amount: "2000000000000000000000"
  denom: adydx
voting_end_time: "2024-02-25T06:16:24.014055663Z"
voting_start_time: "2024-02-21T06:16:24.014055663Z"
```

### 10. Submit vote

```bash
dydxprotocold tx gov vote <proposal id> <option> --from <addres or wallet name> --fees 
```

* `option`: should be either Yes , No , NoWithVeto , or Abstain&#x20;
* `Fees`: 5000000000000000adydx - this value may need some adjustment

### 11. Query vote tally

```bash
$ dydxprotocold query gov tally 22

abstain_count: "289052466830663152761344"
no_count: "4808846255497145968117"
no_with_veto_count: "19555000000000000000"
yes_count: "90144414592955946800079127"
```


---

# 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.dydx.community/dydx-chain-technical-docs/getting-started/developer-tools/dydx-cli/eoa-wallets.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.
