> For the complete documentation index, see [llms.txt](https://nomos-docs.gitbook.io/nomos-1/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://nomos-docs.gitbook.io/nomos-1/v2/frontend/create-proposal.md).

# Create Proposal

### Creating Proposal

On creating proposal, client need to direct the execution call to "**Vote contract**" as the target contract address.

```typescript
const executionResponse = await client?.execute(userAddress, voteAddress, proposalPayload, 'auto');
```

#### Proposal Payload

The proposal payload will have "**propose**" as Json key and the json child will have 4 keys which are:

* title (required)
* description (required)
* msgs (required): array of CosmosMsg json object
* latest \<optional>: to set expiration

<pre class="language-typescript"><code class="lang-typescript"><strong>const payload = {
</strong><strong>    propose : {
</strong><strong>      title,
</strong>      description,
      msgs: [
        cosmosWasmMsg,
      ],
    }
}
</code></pre>

The CosmosMsg that client should pass as message is the json representation of [WasmMsg::Execute](https://docs.rs/cosmwasm-std/latest/cosmwasm_std/enum.WasmMsg.html). The reason is we need to forward call/exeuction to other contract which is instance of [cw-ica-controller](https://github.com/srdtrk/cw-ica-controller/) contract that will forward the call to be executed by ICA address in the target chain.

```typescript
const cosmosWasmMsg = {
          wasm: {
            execute: {
              contract_addr: icaControllerAddress,
              msg: Buffer.from(JSON.stringify(controllerMessage)).toString('base64'),
              funds: [],
            },
          },
  };
```

The WasmMsg::Execute json payload above will be executed by controllerAddress and the message inside it should have "send\_cosmos\_msgs" json key like below:

```typescript
 const controllerMessage = {
    send_cosmos_msgs: {
      messages: [
        {
          stargate: {
            type_url: msg.typeUrl,
            value: Buffer.from(encodedMsg).toString('base64'),
          },
        },
      ],
      packet_memo: 'packet memo by nomos',
    },
  };
```

The content of messages array should be [Stargate](https://docs.rs/cosmwasm-std/1.5.3/cosmwasm_std/enum.CosmosMsg.html) message that always have two json keys which are:

* type\_url
* value

A Stargate message encoded the same way as a protobuf [Any](https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/any.proto). This is the same structure as messages in `TxBody` from [ADR-020](https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-020-protobuf-transaction-encoding.md)
