SeriesVault
acts as a simple storage contract for the SeriesController's
ERC20
and ERC1155
tokens. Whenever the SeriesController
receives collateral from minting options, it transfers the collateral to be stored in the SeriesVault
. Currently the SeriesVault
does not store any option tokens, but a future upgrade to the protocol might enable this so that we can implement spreads.SeriesVault
and SeriesController
are separate contracts because we wanted to separate the Series settlement layer logic (the SeriesController
) from the Series collateral storage (the SeriesVault
). This results in higher gas usage, but gives more flexibility for future changes to either contract.SeriesController
contract, such as the setERC20ApprovalForController
and setERC1155ApprovalForController
functions. This is to ensure that no arbitrary address can approve themselves to transfer the tokens held in the SirenVault
updateImplementation
and transferOwnership
exist so that the owners can update the contracts in the event of a critical vulnerability that puts user's funds at risk.Math.pow(2, 256) - 1
amount of the ERC20
token from the SirenVault
. This is called by the SeriesController
upon initialization.SeriesController
uses this function to store the ERC20
Series collateral tokens in the SeriesVault
.ERC1155
tokens from the SirenVault
. This is called by the SeriesController
upon initialization.SeriesController
does not store option tokens in the SeriesVault
. However, a future extension to the protocol may make use of Vault-stored option tokens, so we expose this functionality for the future.SeriesVault
's logic contract. The SIREN protocol's contracts use the EIP-1822 standard for implementing upgradeable contracts. This allows us to update vulnerable contracts and keep users' option tokens safe. When the SIREN protocol has reached a certain level of stability, we can remove these safety guards and ensure no one on the Siren team can swap out the smart contract functionality._newImplementation
SeriesVault
's function implementationsnewOwner
address. See the onlyOwner
modifier for the permissions granted to the protocol admin.newOwner