Summary
This proposal is for an oracle upgrade of the wstETH collateral. Currently, Prisma is using the stETH/USD Chainlink oracle which we would like to update to a combination of stETH/ETH & ETH/USD.
Motivation
Our original understanding was that using the stETH/USD oracle with a deviation threshold of 1% was equal and a better option than a combination of stETH/ETH & ETH/USD which both have a deviation of 0.5%.
In the past few days, mkUSD has traded just under the peg and we have had a small number of redemptions which can happen with volatility when mkUSD is slightly under peg. However upon closer inspection, we noticed that the deviation of the oracle was too high, sometimes exceeding 1% which made a redemption profitable for an MEV bot to the detriment of a user. While redemptions are cost free to the user being redeemed against, they are still a net negative though important peg keeping mechanism for Prisma.
The nature of of all on chain oracles including Chainlink means deviation will always happen but we have now been tracking the options and noticed that stETH/USD is much more likely to deviate from the true spot price than a combination of the stETH/ETH & ETH/USD oracles. We have observed deviation of over 1.2% on the stETH/USD oracle meaning redemptions could happen even if mkUSD was trading over peg in volatile market conditions. This only happened for a handful of blocks but is enough for MEV bots to take advantage of it and our monitors initially failed to catch as those deviations are rare occurrences to the credit of Chainlink.
As a result, we are proposing that we upgrade the wstETH oracle to use Chainlink stETH/ETH & ETH/USD oracles instead of stETH/USD Chainlink oracle which it is currently using.
Specification
[(β0xC105CeAcAeD23cad3E9607666FEF0b773BC86aacβ, β0xec6e407d0000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca000000000000000000000000086392dc19c0b719886221c78ab11eb8cf5c528120000000000000000000000000000000000000000000000000000000000015180035faf820000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000001β)]
{
method: 'setOracle',
types: [ 'address', 'address', 'uint32', 'bytes4', 'uint8', 'bool' ],
inputs: [
'7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0',
'86392dC19c0b719886221c78AB11eb8Cf5c52812',
86400,
'0x035faf82',
18,
true
],
names: [
'_token',
'_chainlinkOracle',
'_heartbeat',
'sharePriceSignature',
'sharePriceDecimals',
'_isEthIndexed'
]
}
Data
Credit to wavey at yearn |||| Source code
Next steps
This will be a three day snapshot temperature check