From 0eb1816c22cc9b18313c8af6e281bd0aad4ebea5 Mon Sep 17 00:00:00 2001 From: johba Date: Sun, 5 Apr 2026 16:14:50 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20parse=20slot0=20response=20as=20array=20?= =?UTF-8?q?=E2=80=94=20viem=20v2=20returns=20tuples,=20not=20named=20objec?= =?UTF-8?q?ts=20(#2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit viem v2 readContract returns multi-output functions as plain arrays. slot0() tick is at index [1], not .tick property. Handles both array and record shapes for forward compatibility. --- web-app/src/views/CheatsView.vue | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/web-app/src/views/CheatsView.vue b/web-app/src/views/CheatsView.vue index c1b6328..f3888b2 100644 --- a/web-app/src/views/CheatsView.vue +++ b/web-app/src/views/CheatsView.vue @@ -555,12 +555,14 @@ async function loadLiquidityStats({ notify = false }: { notify?: boolean } = {}) functionName: 'slot0', }); - let currentTick: number | null = null; - if (isRecord(slot0Response) && typeof slot0Response.tick === 'number') { + // viem v2 returns multi-output calls as arrays, not named objects. + // slot0() returns [sqrtPriceX96, tick, observationIndex, ...] — tick is at index 1. + let currentTick: number; + if (Array.isArray(slot0Response) && slot0Response.length >= 2) { + currentTick = Number(slot0Response[1]); + } else if (isRecord(slot0Response) && typeof slot0Response.tick === 'number') { currentTick = slot0Response.tick; - } - - if (currentTick === null) { + } else { throw new Error('Unable to determine current pool tick'); }