PodCall is a contract that should inherit PodOption and override the four main functions: mint, unmint, exercise, and withdraw.
Methods
mint
This function is meant to be called by underlying token holders wanting to write option tokens.
Locks some amount of the underlying asset and writes option tokens. The issued amount ratio is 1:1 (e.g., 1 option token for 1 underlying token). It presumes the caller has already calledIERC20.approve() on the underlying token contract to move caller funds.
This function can only be called duringtradeWindow period depending on the exercise type.
For European: before exerciseWindow.
For American: anytime before expiration.
/// Instantiate OptionPodCall podCall =PodCall("/*address*/");// Number of options to mint. The decimals of the options will be the same// as the decimals of the underlying asset.// (E.g: If option decimals is equal to 6, 1000000 = 1 option, // givig the seller the right to buy 1 unit of underlying)uint256 amountOfOptions =1000000;/** @param amountOfOptions The amount option tokens to be issued; this will lock* same amount in a 1:1 ratio units of underlying asset into this* contract.* @param owner The address that will store at shares. owner will* be able to withdraw later on behalf of the sender. It is also important * to notice that the options tokens will not be send to owner, but to the msg.sender*/podCall.mint(amountOfOptions, owner);
// Soon
unmint
Unlocks some amount of the underlying token by burning option tokens. This mechanism ensures that users can only redeem tokens they've previously lock into this contract.
This function can only be called duringtradeWindow period depending on the exercise type.
For European: before exerciseWindow.
For American: anytime before expiration.
exercise
Allow call token holders to use them to buy some amountOfOptions units of the underlying token for the amountOfOptions * strike price units of the strike token. It presumes the caller has already called IERC20.approve() on the strike token contract to move caller funds.
During the process:
The amountOfOptions units of underlying tokens are transferred to the
caller
The amountOfOptions option tokens are burned.
The amountOfOptions * strikePrice units of strike tokens are transferred into
this contract as a payment for the underlying tokens.
This function can only be called duringexpirationWindow period depending on the exercise type.
For European: after trade window and before expiration.
For American: anytime before expiration.
withdraw
Withdraws the locked amount of Strike tokens after expiration by burning Options.
The Strike Asset is NOT withdrawn on a first-come-first-serve basis. Meaning that, if there is not enough underlying asset left because the series has been exercised, The mix of underlying tokens and strike assetare distributed proportionally to the sellers.
This function can only be called duringwithdrawWindow which is after expiration.
/// Instantiate Option
PodCall podCall = PodCall("/*address*/");
uint256 amountOfOptions = 10000000;
/*
* @param amountOfOptions The amount option tokens to be unminted; this will burn
* same amount of options, releasing in a 1:1 ratio units of underlying asset.
*/
podCall.unmint(amountOfOptions);
// Soon
/// Instantiate Option
PodCall podCall = PodCall("/*address*/");
uint256 amountOfOptions = 10000000;
// @param amountOfOptions The amount option tokens to be exercised
podCall.exercise(amountOfOptions);
// Soon
/// Instantiate Option
PodCall podCall = PodCall("/*address*/");
// Withdraws the original position. Could be only underlying asset,
// a mix of underlying asset and strike, or only strike asset.
podCall.withdraw();