← all findings
medium CROSS_SURFACE_PRICE_MIX

SPY: off-chain share price and on-chain token price differ by 0.172%

subject SPY (0x117cc2133c37B721F49dE2A7a74833232B3B4C0C) · methodology assay-rh-v0.2.0 · detected 2026-09-21T20:48:14.000Z

The Chainlink feed returns a multiplier-adjusted TOKEN price (773.0897), while Robinhood's REST /prices endpoint returns the RAW UNDERLYING share price (mid 772.9400). These are different quantities related by uiMultiplier(): underlying x 1.001717991 = 774.2679 (residual -0.152%, 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.172%.

Impact
17.18 bps · 0.1718%
feed 773.0897 vs underlying-mid 772.9400 x multiplier 1.001717991 = 774.2679
Evidence — 2/2 citations re-fetched and byte-compared
mismatched 0 · pruned 0 · verified 2026-09-21T20:48:24.257Z
uiMultiplier() == 1001717991187472003
chain 4663 · block 69096116 · uiMultiplier()
0x117cc2133c37B721F49dE2A7a74833232B3B4C0C
0x0000000000000000000000000000000000000000000000000de6d134a5d8de83
latestRoundData().answer == 77308968340
chain 4663 · block 69096116 · latestRoundData()
0x319724394D3A0e3669269846abE664Cd621f9f6A
0x000000000000000000000000000000000000000000000001000000000000008d00000000000000000000000000000000000000000000000000000011fff93d94000000000000000000000000000000000000000000000000000000006ab1570d000000000000000000000000000000000000000000000000000000006ab15719000000000000000000000000000000000000000000000001000000000000008d
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 772.9400 (not multiplier-adjusted)
fetched 2026-09-21T20:48:08.611071936Z
https://api.robinhood.com/rhj/prices/SPY