> For the complete documentation index, see [llms.txt](https://docs.options.pods.finance/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.options.pods.finance/options-protocol-overview/options-smartcontracts/podfactory.md).

# OptionFactory

OptionFactory uses the "MegaFactory" pattern, it is a contract that creates 4 different types of option contracts: `PodPut, WPodPut, PodCall, WPodCall`. Under the hood, it calls 4 specific "sub-factory" (aka builders): `PodPutBuilder, WPodPutBuilder, PodCallBuilder, WPodCallBuilder.`

## Methods

### createOption

This function is meant to be called by a caller who wants to deploy a new instance of a Put Option (aka PodPut) contract. Here is the initial step if you're going to deploy your option flavor.

It returns a new instance of a PodPut.

| Input Name         | Type    | Required                            | Description                                                                                                                                                        |
| ------------------ | ------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| name               | string  | any                                 | The option token name (e.g., Pod BTC:USDC 300)                                                                                                                     |
| symbol             | string  | any                                 | The option token symbol (e.g., "PodPutBTC")                                                                                                                        |
| optionType         | uint8   | 0 / 1                               | 0 for Put, 1 for Call                                                                                                                                              |
| exerciseType       | uint8   | 0 / 1                               | 0 for American / 1 for European                                                                                                                                    |
| underlyingAsset    | address | contract address                    | Underlying asset address                                                                                                                                           |
| strikeAsset        | address | contract address                    | Strike asset address. Works with interest-bearing tokens aToken from Aave.                                                                                         |
| strikePrice        | uint256 | any                                 | Strike price (units of strikeAsset that buy 1 unit of underlying) (e.g., 12000000000 means you need 12000000000 units of strike asset to exercise 1 unit of WBTC.) |
| expiration         | uint256 | higher than current block timestamp | Expiration option date in UNIX timestamp (e.g., 1609401600)                                                                                                        |
| exerciseWindowSize | uint256 | higher than  86400 (24h)            | Duration of the exercise windows in seconds.                                                                                                                       |
| isAave             | bool    |                                     | If true, deploys a different contract version that supports liquidity mining on Aave (claim rewards)                                                               |

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

```javascript
/// Instantiate Option Factory
OptionFactory optionFactory = OptionFactory("/*address*/");

// Parameters example
string name = "WBTC:USDC 12000 31Dec 2020";
string symbol = "PodPut WBTC:USDC";
uint8 optionType = 0; // 0 for Put, 1 for Call
uint8 exerciseType = 0; // 0 for American, 1 for European
//WBTC
address underlyingAsset = 0x2260fac5e5542a773aa44fbcfedf7c193bc2c599;
// USDC
address strikeAsset = 0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48; 
uint256 strikePrice = 12000000000; // Using 6 decimals, equal to strikeAsset decimals
uint256 expiration = 1609401600; // timestamp in seconds: 31 Dec 2020 08AM
uint256 exerciseWindowSize = 86400; // 24H in seconds
uint256 isAave = false; // if the collateral token is not aTokens


optionFactory.createOption(
        name,
        symbol,
        optionType,
        exerciseType,
        underlyingAsset,
        strikeAsset,
        strikePrice,
        expiration,
        exerciseWindowSize,
        isAave
    )
    
// OptionFactory.sol
/**
     * @notice creates a new PodPut Contract
     * @param _name The option token name. Eg. "Pods Put WBTC-USDC 5000 2020-02-23"
     * @param _symbol The option token symbol. Eg. "podWBTC:20AA"
     * @param _optionType The option type. Eg. "0 for Put, 1 for Call"
     * @param _exerciseType The exercise type. Eg. "0 for European, 1 for American"
     * @param _underlyingAsset The underlying asset. Eg. "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"
     * @param _strikeAsset The strike asset. Eg. "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"
     * @param _strikePrice The option strike price including decimals (strikePriceDecimals == strikeAssetDecimals), Eg, 5000000000
     * @param _expiration The Expiration Option date in UNIX timestamp. E.g 1600178324
     * @param _exerciseWindowSize The Expiration Window Size duration in UNIX timestamp. E.g 24*60*60 (24h)
     * @param _isAave True if the collateral token is aToken
 */
    function createOption(
        string memory _name,
        string memory _symbol,
        PodOption.OptionType _optionType,
        PodOption.OptionType _exerciseType,
        address _underlyingAsset,
        address _strikeAsset,
        uint256 _strikePrice,
        uint256 _expiration,
        uint256 _exerciseWindowSize,
        bool isAave
    ) public returns (address) {}
```

{% endtab %}

{% tab title="Web3" %}

```javascript
// Soon
```

{% endtab %}
{% endtabs %}

###

###


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.options.pods.finance/options-protocol-overview/options-smartcontracts/podfactory.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
