From 508908a76ba4cbfd3229adc4e6554ed888e36ff2 Mon Sep 17 00:00:00 2001 From: aphex Date: Wed, 28 Aug 2024 12:48:43 +0100 Subject: [PATCH] update uni dtl callback parameters when creating an auction --- .../create-auction/prepare-dtl-parameters.ts | 66 ++++++++ apps/dapp/src/pages/create-auction-page.tsx | 145 +++++------------- 2 files changed, 108 insertions(+), 103 deletions(-) create mode 100644 apps/dapp/src/modules/create-auction/prepare-dtl-parameters.ts diff --git a/apps/dapp/src/modules/create-auction/prepare-dtl-parameters.ts b/apps/dapp/src/modules/create-auction/prepare-dtl-parameters.ts new file mode 100644 index 00000000..88f90d7b --- /dev/null +++ b/apps/dapp/src/modules/create-auction/prepare-dtl-parameters.ts @@ -0,0 +1,66 @@ +import { getDuration, getTimestamp } from "utils/date"; +import { toBasisPoints } from "utils/number"; +import { getAddress, zeroAddress } from "viem"; +import { CreateAuctionForm } from "pages/create-auction-page"; + +type BaseDtlOnCreateParams = Pick< + CreateAuctionForm, + | "dtlProceedsPercent" + | "dtlVestingStart" + | "dtlVestingDuration" + | "dtlRecipient" +>; + +/** Prepares onCreate parameters for BaseDirectToLiquidity */ +export function prepareBaseDTLParameters(values: BaseDtlOnCreateParams) { + const poolPercent = values.dtlProceedsPercent + ? toBasisPoints(values.dtlProceedsPercent[0] ?? 0) + : 0; + + const vestingStart = values.dtlVestingStart + ? getTimestamp(values.dtlVestingStart) + : 0; + + const vestingExpiry = + vestingStart === 0 + ? 0 + : vestingStart + getDuration(Number(values.dtlVestingDuration ?? 0)); + + const recipient = !values.dtlRecipient + ? zeroAddress + : getAddress(values.dtlRecipient); + + return { + poolPercent, + vestingStart, + vestingExpiry, + recipient, + }; +} + +export const baseDtlOnCreateParams = { + components: [ + { + type: "uint24", + name: "poolPercent", + }, + { + type: "uint48", + name: "vestingStart", + }, + { + type: "uint48", + name: "vestingExpiry", + }, + { + type: "address", + name: "recipient", + }, + { + type: "bytes", + name: "implParams", + }, + ], + type: "tuple", + name: "OnCreateParams", +}; diff --git a/apps/dapp/src/pages/create-auction-page.tsx b/apps/dapp/src/pages/create-auction-page.tsx index 2142557d..7ebd304e 100644 --- a/apps/dapp/src/pages/create-auction-page.tsx +++ b/apps/dapp/src/pages/create-auction-page.tsx @@ -97,6 +97,10 @@ import { useStoredAuctionConfig } from "state/auction-config"; import type { Token } from "@repo/types"; import { DownloadIcon, ShareIcon, TrashIcon } from "lucide-react"; import { TriggerMessage } from "components/trigger-message"; +import { + baseDtlOnCreateParams, + prepareBaseDTLParameters, +} from "modules/create-auction/prepare-dtl-parameters"; const optionalURL = z.union([z.string().url().optional(), z.literal("")]); @@ -145,6 +149,7 @@ const schema = z .string() .regex(/^(0x)?[0-9a-fA-F]{40}$/) .optional(), + dtlUniMaxSlippage: z.array(z.number()).optional(), dtlUniV3PoolFee: z.string().optional(), customCallbackData: z .string() @@ -584,121 +589,39 @@ export default function CreateAuctionPage() { break; } case CallbacksType.UNIV2_DTL: { - const proceedsPercent = values.dtlProceedsPercent - ? toBasisPoints(values.dtlProceedsPercent[0] ?? 0) - : 0; - const vestingStart = values.dtlVestingStart - ? getTimestamp(values.dtlVestingStart) - : 0; - const vestingExpiry = - vestingStart === 0 - ? 0 - : vestingStart + - getDuration(Number(values.dtlVestingDuration ?? 0)); - const recipient = !values.dtlRecipient - ? zeroAddress - : getAddress(values.dtlRecipient); - const implParams = toHex(""); + const baseDTLArgs = prepareBaseDTLParameters(values); + const maxSlippage = toBasisPoints(values.dtlUniMaxSlippage?.[0] ?? 0); + + const implParams = encodeAbiParameters( + parseAbiParameters("uint24 maxSlippage"), + [maxSlippage], + ); + callbackData = encodeAbiParameters( - [ - { - components: [ - { - type: "uint24", - name: "proceedsUtilisationPercent", - }, - { - type: "uint48", - name: "vestingStart", - }, - { - type: "uint48", - name: "vestingExpiry", - }, - { - type: "address", - name: "recipient", - }, - { - type: "bytes", - name: "implParams", - }, - ], - type: "tuple", - name: "OnCreateParams", - }, - ], - [ - { - proceedsUtilisationPercent: proceedsPercent, - vestingStart: vestingStart, - vestingExpiry: vestingExpiry, - recipient: recipient, - implParams: implParams, - }, - ], + [baseDtlOnCreateParams], + [{ ...baseDTLArgs, implParams }], ); + break; } + case CallbacksType.UNIV3_DTL: { - const proceedsPercent = values.dtlProceedsPercent - ? toBasisPoints(values.dtlProceedsPercent[0] ?? 0) - : 0; - const vestingStart = values.dtlVestingStart - ? getTimestamp(values.dtlVestingStart) - : 0; - const vestingExpiry = - vestingStart === 0 - ? 0 - : vestingStart + - getDuration(Number(values.dtlVestingDuration ?? 0)); - const recipient = (values.dtlRecipient ?? zeroAddress) as `0x${string}`; + const baseDTLArgs = prepareBaseDTLParameters(values); + const poolFee = values.dtlUniV3PoolFee ? Number(values.dtlUniV3PoolFee) : 0; + + const maxSlippage = toBasisPoints(values.dtlUniMaxSlippage?.[0] ?? 0); + const implParams = encodeAbiParameters( - parseAbiParameters("uint24 poolFee"), - [poolFee], + parseAbiParameters("uint24 poolFee, uint24 maxSlippage"), + [poolFee, maxSlippage], ); callbackData = encodeAbiParameters( - [ - { - components: [ - { - type: "uint24", - name: "proceedsUtilisationPercent", - }, - { - type: "uint48", - name: "vestingStart", - }, - { - type: "uint48", - name: "vestingExpiry", - }, - { - type: "address", - name: "recipient", - }, - { - type: "bytes", - name: "implParams", - }, - ], - type: "tuple", - name: "OnCreateParams", - }, - ], - [ - { - proceedsUtilisationPercent: proceedsPercent, - vestingStart: vestingStart, - vestingExpiry: vestingExpiry, - recipient: recipient, - implParams: implParams, - }, - ], + [baseDtlOnCreateParams], + [{ ...baseDTLArgs, implParams }], ); break; } @@ -1872,6 +1795,22 @@ export default function CreateAuctionPage() { )} /> + ( + + + + )} + /> )} {callbacksType === CallbacksType.UNIV3_DTL && (