fix: parse slot0 response as array — viem v2 returns tuples, not named objects (#2)
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.
This commit is contained in:
parent
2f25febfe6
commit
0eb1816c22
1 changed files with 7 additions and 5 deletions
|
|
@ -555,12 +555,14 @@ async function loadLiquidityStats({ notify = false }: { notify?: boolean } = {})
|
||||||
functionName: 'slot0',
|
functionName: 'slot0',
|
||||||
});
|
});
|
||||||
|
|
||||||
let currentTick: number | null = null;
|
// viem v2 returns multi-output calls as arrays, not named objects.
|
||||||
if (isRecord(slot0Response) && typeof slot0Response.tick === 'number') {
|
// 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;
|
currentTick = slot0Response.tick;
|
||||||
}
|
} else {
|
||||||
|
|
||||||
if (currentTick === null) {
|
|
||||||
throw new Error('Unable to determine current pool tick');
|
throw new Error('Unable to determine current pool tick');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue