liquidops
Version:
LiquidOps is an over-collateralised lending and borrowing protocol built on Arweave's L2 AO.
56 lines (45 loc) • 1.3 kB
text/typescript
import { getData } from "../../ao/messaging/getData";
import { tokenInput } from "../../ao/utils/tokenInput";
export interface GetCooldown {
recipient: string;
token: string;
}
export type GetCooldownRes =
| { onCooldown: false }
| {
onCooldown: true;
expiryBlock: number;
remainingBlocks: number;
};
export async function getCooldown({
recipient,
token,
}: GetCooldown): Promise<GetCooldownRes> {
if (!recipient) throw new Error("Please specify a recipient");
if (!token) throw new Error("Please specify a token address");
const { oTokenAddress } = tokenInput(token);
const cooldownRes = await getData({
Target: oTokenAddress,
Owner: recipient,
Action: "Is-Cooldown",
});
if (!cooldownRes?.Messages?.[0]?.Tags) {
return { onCooldown: false };
}
const cooldownResTags = Object.fromEntries(
cooldownRes.Messages[0].Tags.map((tag: { name: string; value: string }) => [
tag.name,
tag.value,
]),
);
if (!cooldownResTags["Is-Cooldown"]) {
return { onCooldown: false };
}
const expiresOn = parseInt(cooldownResTags["Cooldown-Expires"]);
return {
onCooldown: true,
expiryBlock: expiresOn,
remainingBlocks:
expiresOn - parseInt(cooldownResTags["Request-Block-Height"]),
};
}