# Proposal Types

Every [Governance Proposal](https://docs.optswap.org/user-manual/governance/proposals) must be of a single Proposal Type. The parameters required for each Proposal Type differ based on the particular action required to be performed.

{% hint style="warning" %}
**All OptSwap Contracts are Non-Custodial.** While the proposal types below are versatile and quite powerful in terms of the actions that can be performed by the governance, it is just as important (if not more so) to understand what the governance **cannot** do. Specifically, the governance:

* **Cannot** access or withdraw user funds from any contracts (DEX/AMM/Staking/etc.,)
* **Cannot** change or manipulate user positions in the DEX or AMM contracts.
* **Cannot** change or reverse past transactions in any manner whatsoever.
* **Cannot** change the on-chain spot and settlement prices reported by the Meta Oracle.
  {% endhint %}

### **Meta Oracle**

#### Add Oracle

Track a unique Uniswap V2/V3 Pair as an on-chain Oracle to store Time Weighted Average Prices (TWAPs) and liquidity snapshots.

**Parameters:** `token0` (address), `token0Decimals` (number), `token1` (address), `token1Decimals` (number), `router` (address), `liquidityPool` (address), `liquidityPoolType` (`UniV2/UniV3`), `nativeAssetToken` (`Token0/Token1/None`)

#### Disable Oracle

Disable an existing Oracle.

**Parameters:** `token0` (address), `token1` (address), `liquidityPool` (address)

#### Enable Oracle

Re-enable a previously disabled Oracle.

**Parameters:** `token0` (address), `token1` (address), `liquidityPool` (address)

#### Set Treasury Mint Ratio

Sets the Treasury Mint Ratio for OS\* tokens minted by the Meta Oracle as rewards during the Price Mining operations by miners. See [Price Mining](https://docs.optswap.org/user-manual/meta-oracle/price-mining).

**Parameters:** `treasuryMintRatio` (percentage between 0-100%)

#### Withdraw Funds

Withdraw any donations to the Meta Oracle back into the treasury.

**Parameters:** `tokens[]` (address array)

### **Treasury Operations**

#### Transfer Native Asset

Transfer an amount of the network's native asset (gas token) from the treasury to the given address.

**Parameters:** `toAddress` (address), `amount` (number)

#### Transfer Tokens

Transfer an amount of ERC-20 tokens from the treasury to the given address.

**Parameters:** `toAddress` (address), `transferToken` (address), `amount` (number)

#### Approve Tokens And Notify Reward

Approve an amount of the native asset (gas token) or ERC-20 token to the given smart contract address and call the `notifyReward` function. This is used mainly for transferring staking and other rewards to the respective smart contracts.

**Parameters:** `toAddress` (address), `rewardToken` (address), `rewardAmount` (number)

### **Commercial Papers**

#### Issue New Commercial Paper

Issues a new [Commercial Paper](#commercial-papers) (C-Paper) which users can subscribe to.

**Parameters:** `name` (string), `symbol` (string), `whitelisted` (boolean), `restrictiveLegend` (boolean), `underlyingToken` (address), `faceValue` (number), `subscriptionDiscount` (number), `issueStartAt` (timestamp), `issueEndAt` (timestamp), `maturityTimestamp` (timestamp), `maxSupply` (number)

#### Whitelist Users

Approves users to be able to subscribe to a commercial paper that is not open to the public.

**Parameters:** `cPaperAddress` (address), `users[]` (address array), `whitelisted[]` (boolean array)

#### Withdraw Funds

Withdraw funds accrued from user subscriptions into the treasury from the relevant C-Paper contract.

**Parameters:** `cPaperAddress` (address), `tokens` (address array)

### **Fundraising**

#### Create Fundraising Round

Creates a new [Fundraising](#fundraising) Round for the specified token at the specified rate.

**Parameters:** `maxSupply` (number), `token` (address), `tokenDecimals` (number), `whitelisted` (boolean), `restrictiveLegend` (boolean), `rate` (number), `startAt` (timestamp), `endAt` (timestamp), `vestingPeriod` (number)

#### Whitelist Users

Approves users to be able to subscribe to a fundraising round that is not open to the public.

**Parameters:** `roundNumbers` (number array), `users[]` (address array), `whitelisted[]` (boolean array)

#### Remove Restrictive Legends

Removes the Restrictive Legend from the specified vesting fundraises.

**Parameters:** `vestingNumbers` (number array)

#### Withdraw Funds

Withdraw funds accrued from fundraising rounds into the treasury.

**Parameters:** `tokens` (address array)

### **Airdrops**

#### Create Airdrops

Creates native asset (gas token) or ERC-20 token [Airdrops](https://docs.optswap.org/user-manual/governance/airdrops) for the specified set of users in the specified amounts and also specifies the vesting ending timestamps for each.

**Parameters:** `users[]` (address array), `tokens[]` (address array), `amounts[]` (number array), `vestingEndsAt[]` (timestamp array)

#### Withdraw Funds

Withdraw excess tokens deposited into the Airdrops contract back into the treasury.

**Parameters:** `tokens` (address array)

### **DEXes & AMMs**

#### Deploy New OptSwap DEX Contract

Deploy a new OptSwap Options Decentralized Exchange (DEX) contract for the specified underlying and cash asset pair alongside the contract and exchange specifications.

**Parameters:** `underlyingAsset` (address), `underlyingAssetDecimals` (number), `cashAsset` (address), `cashAssetDecimals` (number), `fixedLotSize` (number), `minTickSize` (number), `maxUnderlyingExercisePeriod` (number), `maxForceCashSettlementWaitPeriod` (number), `metaOracle` (address), `useViaToken` (boolean), `viaTokenAddress` (address)

#### Deploy New OptSwap AMM Contract

Deploy a new OptSwap Automated Market Maker (AMM) contract paired to the specified DEX with the specified strike and expiry parameters.

**Parameters:** `optSwapContract` (address), `standardStrikeDistance` (number), `expiryStart` (timestamp), `expiryFrequency` (number)

#### Update OptSwap Details

Updates the fees, rewards and settlement parameters to the specified values for an existing DEX.

**Parameters:** `optSwapContract` (address), `makerFees` (number), `takerFees` (number), `settlementFees` (number), `positionConversionFees` (number), `underlyingAssetFeesDisbursalContract` (address), `cashAssetFeesDisbursalContract` (address), `feesTransferReward` (number), `maxUnderlyingExercisePeriod` (number), `maxForceCashSettlementWaitPeriod` (number), `rewardPerSettlementsExecutionPoint` (number), `allowForceExerciseCashCalls` (boolean), `allowForceExerciseCashPuts` (boolean), `allowForceExerciseWithPartialSwap` (boolean), `allowForceExerciseUnderlying` (boolean), `matchFinderFeesPerLot` (number)

#### Update OptSwap AMM Address

Registers a new AMM contract with the specified DEX.

**Parameters:** `optSwapContract` (address), `ammAddress` (address)

#### Set OptSwap AMM Rewards

Updates the rewards parameters for the AMM associated with the given DEX.

**Parameters:** `optSwapContract` (address), `rewardPerMatchFinderPoint` (number), `rewardPerLiquidityProviderPoint` (number), `rewardPerManagedOrderCancellationPoint` (number)

### **Staking**

#### Deploy New Staking Contract

Creates a new staking contract for the given staked token & reward token pair. The staked & reward tokens may be any combination of the native asset (gas token) or ERC-20 tokens.

**Parameters:** `stakedToken` (address), `stakedTokenDecimals` (number), `stakedTokenIsNativeAsset` (boolean), `rewardToken` (address), `rewardTokenIsNativeAsset` (boolean)

### **Other**

#### Execute Transaction

Calls the method specified by the signature and data on the target contract (as a delegate call or not). Note that arbitrary transactions are disallowed against the Meta Oracle, Airdrops & Fundraising contracts, any of the issued tokens (OS\*/veOS\*) or any of the previously deployed DEXes/AMMs.

**Parameters:** `target` (address), `value` (number), `signature` (string), `data` (bytes), `executionTime` (timestamp), `withDelegatecall` (boolean)

#### Proxy Upgrade

Upgrade the proxy implementation (logic) contract of one of the Core smart contracts in OptSwap.

**Parameters:** `target` (address), `logicContractAddress` (address), `data` (bytes), `value` (number)

#### Proxy Change Admin

Change the proxy admin of one of the Core smart contracts in OptSwap.

**Parameters:** `target` (address), `newAdmin` (address)

#### Redact Proposal

Redacts the specified proposal by overwriting the string and bytes arguments.

**Parameters:** `proposalNumber` (number)

#### Set Governance Proposal Fee

Set a minimum fee to create a new proposal, payable in OS\* tokens.

**Parameters:** `feeAmount` (number)

#### Set Proposal Execution Reward

Set a maximum reward payable to the miner who executed the proposal, denominated in OS\* tokens.

**Parameters:** `rewardAmount` (number)

#### Set Token Authorized Supply

Set the maximum authorized OS\* token supply.

**Parameters:** `authorizedAmount` (number)

#### Register New Contract

Registers a new contract of the given type with the governance registry. The parameters specific to the particular contract type must be specified by the proposer.

**Parameters:** `target` (address), `contractType` (`OptSwap/OptSwapDAOStaking/OptSwapDAOCommercialPaperToken/MetaOracle/ERC-20/Other`), `{...contractTypeSpecificArguments}` (multi-type)
