# Submit a governance proposal

## Submit a Governance Proposal via CLI (Mac)

In this guide, we will provide a step-by-step walkthrough on how to submit a governance proposal using the Command Line Interface (CLI).

### Prerequisites

* Have homebrew: <https://brew.sh/>
* Install Go `1.21,` git
* Follow the dYdX setup guide below

{% 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 %}

### Create an address to submit the proposal

Set up a dYdX Chain address:

```bash
$ dydxprotocold keys add <address name>

- address: dydx1m5...dfpe3
  name: <address name>
  pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"BrarpF..Q1"}'
  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 words...
```

### Preparing a governance proposal

1. Do a test transaction to initialize the address or the chain will not know you initialized a new address. This can be done by receiving some funds in your new wallet.
2. Create a new JSON file based on previous proposals to get the correct format. Refer to previous proposals here: <https://www.mintscan.io/dydx/proposals>, for example:

{% tabs %}
{% tab title="Testnet" %}

<pre class="language-json"><code class="lang-json"><strong>//testproposal.json
</strong><strong>{
</strong>	"title": "Title of test proposal",
	"deposit": "200000adv4tnt",
	"summary": "Summary of the test proposal",
	"metadata": "Link to DRC, or other relevant metadata",
	"messages": [
		{
			"@type": "/cosmos.gov.v1.MsgExecLegacyContent",
			"content": {
				"@type": "/cosmos.gov.v1beta1.TextProposal",
				"title": "Title of TextProposal message",
				"description": "Description of TextProposal message"
			},
			"authority": "dydx10d07y265gmmuvt4z0w9aw880jnsr700jnmapky"
		}
	]
}
</code></pre>

{% endtab %}

{% tab title="Mainnet" %}

<pre class="language-json"><code class="lang-json">//proposal.json
<strong>{
</strong>	"title": "Title of test proposal",
	"deposit": "10000000000000000000000adydx",
	"summary": "Summary of the test proposal",
	"metadata": "Link to DRC, or other relevant metadata",
	"messages": [
		{
			"@type": "/cosmos.gov.v1.MsgExecLegacyContent",
			"content": {
				"@type": "/cosmos.gov.v1beta1.TextProposal",
				"title": "Title of TextProposal message",
				"description": "Description of TextProposal message"
			},
			"authority": "dydx10d07y265gmmuvt4z0w9aw880jnsr700jnmapky"
		}
	]
}
</code></pre>

{% endtab %}
{% endtabs %}

* `deposit` cannot be less than the minimum deposit amount, which is `2000 DYDX`, or `2000000000000000000000adydx` . \
  In the example above, we use `10000 DYDX`, which will make the proposal active upon publishing.&#x20;
* `messages` can contain more than one message for sub-items of the proposal, but cannot be empty, i.e. a proposal needs at least one motion. Adding more than one message would look like follows

```json
"messages": [
    {
        [MESSAGE 1]
    },
    {
        [MESSAGE 2]
    },
    ...
   ]
```

* `authority`use the same authority for each message - `dydx10d07y265gmmuvt4z0w9aw880jnsr700jnmapky`

3. Create the proposal Tx.&#x20;

{% hint style="info" %}
💡 This step can be executed from any workstation. It is not even necessary to have added neither walletA , walletB , walletC nor ourMultisig .
{% endhint %}

Submit the proposal first on Testnet and if succssful, submit the proposal on mainnet.

{% tabs %}
{% tab title="Testnet" %}

<pre class="language-bash"><code class="lang-bash">$ dydxprotocold tx gov submit-proposal \&#x3C;JSONfilename>.json \
    --chain-id dydx-testnet-4 \
    --yes --broadcast-mode sync \
    --fees 5000000000000000adv4tnt \
    --from dydx1z79c98w069eugzjme0dkd6quuhm8vfh2a00smh \
    --node https://testnet-dydx-rpc.lavenderfive.com:443
    
<strong>auth_info:
</strong>  fee:
    amount:
    - amount: "5000000000000000"
      denom: adv4tnt
    gas_limit: "200000"
    granter: ""
    payer: ""
  signer_infos: []
  tip: null
body:
  extension_options: []
  memo: ""
  messages:
  - '@type': /cosmos.gov.v1.MsgSubmitProposal
    initial_deposit:
    - amount: "200000"
      denom: adv4tnt
    messages:
    - '@type': /cosmos.gov.v1.MsgExecLegacyContent
      authority: dydx10d07y265gmmuvt4z0w9aw880jnsr700jnmapky
      content:
        '@type': /cosmos.gov.v1beta1.TextProposal
        description: Description of TextProposal message
        title: Title of TextProposal message
    metadata: Link to DRC, or other relevant metadata
    proposer: dydx1z79c98w069eugzjme0dkd6quuhm8vfh2a00smh
    summary: Summary of the test proposal
    title: Title of test proposal
  non_critical_extension_options: []
  timeout_height: "0"
signatures: []
confirm transaction before signing and broadcasting [y/N]: y
code: 0
codespace: ""
data: ""
events: []
gas_used: "0"
gas_wanted: "0"
height: "0"
info: ""
logs: []
raw_log: '[]'
timestamp: ""
tx: null
txhash: F45964CE07EC68FC0BF826D...6572790E004FE555C7FAD
</code></pre>

{% endtab %}

{% tab title="Mainnet" %}

```bash
dydxprotocold tx gov submit-proposal \<JSONfilename>.json \
    --chain-id dydx-mainnet-1 \
    --yes --broadcast-mode sync \
    --fees 2500000000000000adydx \
    --from dydx1z79c98w069eugzjme0dkd6quuhm8vfh2a00smh \
    --node https://dydx-rpc.lavenderfive.com:443
```

{% endtab %}
{% endtabs %}

* `dydx1z79c98w069eugzjme0dkd6quuhm8vfh2a00smh` is the address of the multisig from which we send tokens - in case you have instantiated the multisig locally, you can use it’s name, e.g. `ourMultisig`&#x20;
* `proposalFile.json` is the path to the file where you have store the proposal JSON&#x20;
* `fees` value 5000000000000000adydx may need adjustment; the transaction will fail only when broadcasted if this amount is not enough


---

# 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/submit-a-governance-proposal.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.
