in the SettlementBranch::fillMarketOrder
down the call stack it makes a call to verify offchain prices, to get the bid and ask prices, down that call stack it makes a call to the chainlink verifier proxy, which is a payable function, it is payable becuase the verifier takes eth to verify this prices, but at fillMarketOrder
the entry to this process the function itself is not payable, which means any attempt to try to verify the prices will always fail and revert.
in the SettlementBranch::fillMarketOrder
when it is called to fill orders, it does the necessary calculations, and then it tries to verify the priceData using the SettlementConfiguration::verifyOffchainPrice
, this verifies and returns the validated bid and ask prices, inside that function it makes an internal call to verifyDataStreamsReport
to verify the data stream report, the snippet as shown below
SettlementConfiguration::verifyDataStreamsReport
The function clearly show here that there is an attached fee and it actually gets it from the util contract, to verification and it tries to make the call to the ChainlinkVerifer, and it passes along the fee gotten as shown below
The getEthVericationFee
gets the fees from the fee manager and then the verifyReport
is also called using that fee and it makes a call to the chainlinkVerifier
by passing along a value a fee for the verification, when we check the verifier contract we see that it is a proxy that redirects the call and it is actually a payable function as shown below
Because the fillMarketOrder
function itself does not have a payable modifier itself it will not be able to pay for this verification
filling orders by keepers is one of the main functionality in zaros, if orders can be filled then the protocol does not work at all
Manual Review
Add a payable modifer to the fillMarketOrder
function
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.