Controller doesn't send treasury funds to the vault's treasury address
The Controller contract sends `treasury` funds to its own immutable `treasury` address instead of sending the funds to the one stored in the respective vault contract.\\nEach vault has a treasury address that is assigned on deployment which can also be updated through the factory contract:\\n```\\n    constructor(\\n        // // rest of code\\n        address _treasury\\n    ) SemiFungibleVault(IERC20(_assetAddress), _name, _symbol, _tokenURI) {\\n        // // rest of code\\n        treasury = _treasury;\\n        whitelistedAddresses[_treasury] = true;\\n    }\\n\\n    function setTreasury(address _treasury) public onlyFactory {\\n        if (_treasury == address(0)) revert AddressZero();\\n        treasury = _treasury;\\n    }\\n```\\n\\nBut, the Controller, responsible for sending the fees to the treasury, uses the immutable treasury address that it was initialized with:\\n```\\n    constructor(\\n        // // rest of code\\n        address _treasury\\n    ) {\\n        // // rest of code\\n        treasury = _treasury;\\n    }\\n\\n    // @audit just one example. Search for `treasury` in the Controller contract to find the others\\n    function triggerEndEpoch(uint256 _marketId, uint256 _epochId) public {\\n        // // rest of code\\n        \\n        // send premium fees to treasury and remaining TVL to collateral vault\\n        premiumVault.sendTokens(_epochId, premiumFee, treasury);\\n        // strike price reached so collateral is entitled to collateralTVLAfterFee\\n        premiumVault.sendTokens(\\n            _epochId,\\n            premiumTVLAfterFee,\\n            address(collateralVault)\\n        );\\n\\n        // // rest of code\\n    }\\n```\\n
The Controller should query the Vault to get the correct treasury address, e.g.:\\n```\\ncollateralVault.sendTokens(_epochId, collateralFee, collateralVault.treasury());\\n```\\n
It's not possible to have different treasury addresses for different vaults. It's also not possible to update the treasury address of a vault although it has a function to do that. Funds will always be sent to the address the Controller was initialized with.
```\\n    constructor(\\n        // // rest of code\\n        address _treasury\\n    ) SemiFungibleVault(IERC20(_assetAddress), _name, _symbol, _tokenURI) {\\n        // // rest of code\\n        treasury = _treasury;\\n        whitelistedAddresses[_treasury] = true;\\n    }\\n\\n    function setTreasury(address _treasury) public onlyFactory {\\n        if (_treasury == address(0)) revert AddressZero();\\n        treasury = _treasury;\\n    }\\n```\\n