← all findings
low CROSS_SURFACE_PRICE_MIX

MSFT: off-chain share price and on-chain token price differ by 0.041%

subject MSFT (0xe93237C50D904957Cf27E7B1133b510C669c2e74) · methodology assay-rh-v0.2.0 · detected 2026-09-21T20:50:08.000Z

The Chainlink feed returns a multiplier-adjusted TOKEN price (499.9864), while Robinhood's REST /prices endpoint returns the RAW UNDERLYING share price (mid 501.7700). These are different quantities related by uiMultiplier(): underlying x 1.000412953 = 501.9772 (residual -0.397%, attributable to bid/ask spread and quote timing). Valuing balanceOf() with an off-chain share price, or computing a premium/discount between an on-chain token price and an off-chain share price, produces a phantom error of 0.041%.

Impact
4.13 bps · 0.0413%
feed 499.9864 vs underlying-mid 501.7700 x multiplier 1.000412953 = 501.9772
Evidence — 2/2 citations re-fetched and byte-compared
mismatched 0 · pruned 0 · verified 2026-09-21T20:50:19.441Z
uiMultiplier() == 1000412952576205964
chain 4663 · block 69097216 · uiMultiplier()
0xe93237C50D904957Cf27E7B1133b510C669c2e74
0x0000000000000000000000000000000000000000000000000de22e47ab01248c
latestRoundData().answer == 49998638543
chain 4663 · block 69097216 · latestRoundData()
0x45C3C877C15E6BA2EBB19eA114Ea508d14C1Af2E
0x00000000000000000000000000000000000000000000000100000000000003030000000000000000000000000000000000000000000000000000000ba426adcf000000000000000000000000000000000000000000000000000000006ab183f0000000000000000000000000000000000000000000000000000000006ab183fd0000000000000000000000000000000000000000000000010000000000000303
Off-chain inputs — NOT covered by the byte-verified guarantee
The citations above are re-fetched from chain state and byte-compared. The values below cannot be, because they do not live on chain. They are listed so you can tell the difference.
underlying share bid/ask used for the mid 501.7700 (not multiplier-adjusted)
fetched 2026-09-21T20:50:05.144079839Z
https://api.robinhood.com/rhj/prices/MSFT