# Deterministic Oracles Deployment



## Overview [#overview]

Deployment of deterministic oracles, both according to the linear discount model and the zero-coupon bond model, is done through the `SpectraPriceOracleFactory` .

## Deployment [#deployment]

One deploys a deterministic oracle through the method

```solidity
/**
* @dev Deploys a new `SpectraOracle` for a given PT.
* @param _pt The address of the Principal Token (PT).
* @param _discountModel The discount model address.
* @return oracle The address of the newly deployed Oracle.
*/
function createOracle(
   address _pt,
   address _discountModel,
   uint256 initialImpliedAPY,
   address initOwner
) external returns (address oracle)
```

The `_discountModel` address corresponds to the address of either the `LinearDiscountModel` , `LinearAPRModel` or `ZeroCouponDiscountModel` , depending on the pricing model one wants to use.

The `initialImpliedAPY` field is the implied APY according to which we want to discount the PT over the term. The  `initialImpliedAPY` field is in 18 decimals precision, `10 ** 18` representing a `100%`  implied APY.

The owner of the oracle contract can change the discount model used in the oracle by calling `setDiscountModel()` .

## Example [#example]

For example, to deploy an oracle with a `30%` implied APY over the term, one does

```solidity

createOracle(
   address(0) // PT address,
   address(0) // Discount Model Contract address,
   3e17, // 30% implied APY
   address(0) // Address of the owner
) external returns (address oracle)
```
