QA Report #307
Labels
bug
Something isn't working
QA (Quality Assurance)
Assets are not at risk. State handling, function incorrect as to spec, issues with clarity, syntax
(Low)
feeRate
can be modified for existing vaultsfeeRate
is a parameter that controls the fee applied on exercise. It can be set by the function:So it can be changed by the owner at any time, changing also the fee payed by existing vaults.
Proof of concept
Alice is a trader looking for a delta neutral position on her NFTs. She opens a vault with strike 10 ETH and fee 0.5%. She's happy getting 9.95 ETH if the option is exercised. During the call lifetime the fee gets increased up to 1%. Now Alice will get 9.90 ETH, an amount which may bring her EV negative.
Recommendations
It's suggested to save
feeRate
into a vault struct duringcreateVault
orbuyOption
. This value can then be used duringexercise
instead of the global variable.(Low) Mistake in tokenURI encoding
In the
tokenURI
string calculation, we need to pass the vault premium. At line L464 there's agetPremium(vault.premiumIndex)
but the function actually wants a vaultId:As a consequence the premium gets mispriced on UI, leading to unpredictable errors.
Recommendations
Change L464 to
premiumOptions[vault.premiumIndex]
.(Info) Wrong math terminology: strike curve is not "exponential"
Documentation (L400) claims that during dutch auction, strike decreases in time "exponentially". This term is correct colloquially, but it's technically misused since the curve is actually a parabola instead of an exponential.
Suggested removing the adverb or finding a more appropriate one.
(Info) Missing event when changing
feeRate
The function
setFee
doesn't emit an event when changingfeeRate
.It's generally suggested to add events for every important parameter that can get changed, for easier off-chain monitoring.
The text was updated successfully, but these errors were encountered: