Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions app/create/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ export default function CreateAuction() {

const router = useRouter();
const { status, address } = useAccount();
const { data: hash, isPending, writeContract } = useWriteContract();
const { data: hash, isPending, writeContractAsync } = useWriteContract();
const { isLoading: isConfirming, isSuccess: isConfirmed } =
useWaitForTransactionReceipt({
hash,
Expand Down Expand Up @@ -307,7 +307,7 @@ export default function CreateAuction() {
};

const handleSubmit = async () => {
if (!address || !writeContract) return;
if (!address || !writeContractAsync || !publicClient) return;

setIsSubmitting(true);
try {
Expand Down Expand Up @@ -342,7 +342,7 @@ export default function CreateAuction() {
// Prepare auction parameters based on type
const params = transformFormDataToParams(formData, auctionType);
console.log("Auction Params:", params);
await auctionService.createAuction(writeContract, params);
await auctionService.createAuction(writeContractAsync, publicClient, params);
} catch (error) {
console.error("Error creating auction:", error);
setIsSubmitting(false);
Expand Down
12 changes: 8 additions & 4 deletions components/auction/bid-form.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import {
useWriteContract,
useWaitForTransactionReceipt,
useChainId,
usePublicClient,
} from "wagmi";
import { ConnectButton } from "@rainbow-me/rainbowkit";
import { getAuctionService } from "@/lib/auction-service";
Expand All @@ -41,12 +42,13 @@ export function BidForm({ auction }: BidFormProps) {
const [showSuccess, setShowSuccess] = useState(false);
const account = useAccount();
const {
writeContract,
writeContractAsync,
data: hash,
isPending,
error: writeError,
} = useWriteContract();
const chainId = useChainId();
const publicClient = usePublicClient();
const {
isLoading: isConfirming,
isSuccess: isConfirmed,
Expand Down Expand Up @@ -184,7 +186,7 @@ export function BidForm({ auction }: BidFormProps) {
}, [writeError, confirmError]);

const handleSubmit = async () => {
if (!isValidBid || !isConnected || !address || isSubmitting) return;
if (!isValidBid || !isConnected || !address || isSubmitting || !publicClient) return;

// Prevent submission if auction is claimed or ended
if (
Expand All @@ -199,7 +201,8 @@ export function BidForm({ auction }: BidFormProps) {
const auctionService = await getAuctionService(auction.protocol, chainId);
if (isReverseDutchAuction) {
await auctionService.placeBid!(
writeContract,
writeContractAsync,
publicClient,
BigInt(auctionId),
auction.biddingToken as Address,
);
Expand All @@ -209,7 +212,8 @@ export function BidForm({ auction }: BidFormProps) {
return;
}
await auctionService.placeBid(
writeContract,
writeContractAsync,
publicClient,
BigInt(auctionId),
auction.biddingToken as Address,
parseEther(bidAmount),
Expand Down
6 changes: 3 additions & 3 deletions components/auction/dutch-auction-price.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ export function DutchAuctionPrice({
}: DutchAuctionPriceProps) {
const [currentPrice, setCurrentPrice] = useState<bigint>(BigInt(0));
const [isLoading, setIsLoading] = useState(false);
const { writeContract } = useWriteContract();
const { writeContractAsync } = useWriteContract();
const chainId = useChainId();
const client = usePublicClient();
// Check if this is a reverse Dutch auction
Expand Down Expand Up @@ -68,14 +68,14 @@ export function DutchAuctionPrice({
}, [auctionId, protocol, isEnded, isReverseDutchAuction]);

const handleBuyout = async () => {
if (!writeContract || isEnded) return;
if (!writeContractAsync || !client || isEnded) return;

setIsLoading(true);
try {
const dutchService = await getAuctionService(protocol,chainId);
const auction = await dutchService.getAuction(auctionId,client);
const biddingToken = auction.biddingToken as Address;
await dutchService.placeBid!(writeContract,auctionId,biddingToken);
await dutchService.placeBid!(writeContractAsync, client, auctionId, biddingToken);
Comment thread
coderabbitai[bot] marked this conversation as resolved.
onBuyout();
} catch (error) {
console.error("Error buying out auction:", error);
Expand Down
10 changes: 6 additions & 4 deletions components/auction/vickrey-reveal-form.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { Alert, AlertDescription } from "@/components/ui/alert";
import { Eye, AlertCircle, CheckCircle } from "lucide-react";
import { useAccount, useWriteContract, useWaitForTransactionReceipt, useChainId } from "wagmi";
import { useAccount, useWriteContract, useWaitForTransactionReceipt, useChainId, usePublicClient } from "wagmi";
import { getAuctionService } from "@/lib/auction-service";

interface VickreyRevealFormProps {
Expand All @@ -32,7 +32,8 @@ export function VickreyRevealForm({ auctionId, onRevealSuccess }: VickreyRevealF
const [autoFilled, setAutoFilled] = useState(false);
const chainId = useChainId();
const { address } = useAccount();
const { writeContract, data: hash, isPending, error: writeError } = useWriteContract();
const { writeContractAsync, data: hash, isPending, error: writeError } = useWriteContract();
const publicClient = usePublicClient();
Comment thread
coderabbitai[bot] marked this conversation as resolved.

const {
isLoading: isConfirming,
Expand Down Expand Up @@ -89,7 +90,7 @@ export function VickreyRevealForm({ auctionId, onRevealSuccess }: VickreyRevealF
}, [writeError, confirmError]);

const handleReveal = async () => {
if (!address || !writeContract) {
if (!address || !writeContractAsync || !publicClient) {
setError("Please connect your wallet");
return;
}
Expand All @@ -102,7 +103,8 @@ export function VickreyRevealForm({ auctionId, onRevealSuccess }: VickreyRevealF
const bidAmountWei = BigInt(Math.floor(parseFloat(bidAmount) * 1e18));

await vickreyService.revealBid!(
writeContract,
writeContractAsync,
publicClient,
auctionId,
bidAmountWei,
salt
Expand Down
12 changes: 6 additions & 6 deletions lib/auction-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import { Address, formatEther, parseEther } from "viem";
import { AuctionType, Auction, Bid } from "./types";
import { Config, UsePublicClientReturnType } from "wagmi";
import { WriteContractMutate } from "wagmi/query";
import { WriteContractMutateAsync } from "wagmi/query";

export interface AuctionData {
name: string;
Expand Down Expand Up @@ -84,16 +84,16 @@ export type AuctionParams =
// Abstract auction service interface
export interface IAuctionService {
contractAddress: Address;
createAuction(writeContract: WriteContractMutate<Config, unknown>, params: Partial<AuctionParams>): Promise<void>;
placeBid?(writeContract: WriteContractMutate<Config, unknown>, auctionId: bigint, tokenAddress: Address,bidAmount?: bigint): Promise<void>;
withdraw?(writeContract: WriteContractMutate<Config, unknown>, auctionId: bigint): Promise<void>;
claim(writeContract: WriteContractMutate<Config, unknown>, auctionId: bigint, biddingToken?: string): Promise<void>;
createAuction(writeContract: WriteContractMutateAsync<Config, unknown>, publicClient: UsePublicClientReturnType, params: Partial<AuctionParams>): Promise<void>;
placeBid?(writeContract: WriteContractMutateAsync<Config, unknown>, publicClient: UsePublicClientReturnType, auctionId: bigint, tokenAddress: Address, bidAmount?: bigint): Promise<void>;
withdraw?(writeContract: WriteContractMutateAsync<Config, unknown>, auctionId: bigint): Promise<void>;
claim(writeContract: WriteContractMutateAsync<Config, unknown>, auctionId: bigint, biddingToken?: string): Promise<void>;
getAuction(auctionId: bigint, client: UsePublicClientReturnType): Promise<Auction>;
getBidHistory?(client: UsePublicClientReturnType, auctionId: bigint, startBlock: bigint, endBlock: bigint): Promise<(undefined | Bid)[]>;
getAuctionCounter(): Promise<bigint>;
getLastNAuctions(client: UsePublicClientReturnType, n?: number): Promise<(Auction | null)[]>;
getCurrentPrice?(auctionId: bigint): Promise<bigint>;
revealBid?(writeContract: WriteContractMutate<Config, unknown>, auctionId: bigint, bidAmount: bigint, salt: string): Promise<void>;
revealBid?(writeContract: WriteContractMutateAsync<Config, unknown>, publicClient: UsePublicClientReturnType, auctionId: bigint, bidAmount: bigint, salt: string): Promise<void>;
getCurrentBid?(client: UsePublicClientReturnType, auctionId: bigint, userAddress: Address): Promise<bigint>;
}

Expand Down
29 changes: 17 additions & 12 deletions lib/services/allpay-auction-service.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Address, erc20Abi, erc721Abi, formatEther, parseAbiItem } from "viem";
import { Address, erc20Abi, erc721Abi, formatEther, Hash, parseAbiItem } from "viem";
import { Config, readContracts } from '@wagmi/core';
import { wagmi_config } from "@/config";
import { IAuctionService, AllPayAuctionParams, getTokenName, mappedData } from "../auction-service";
Expand All @@ -8,7 +8,7 @@ import { generateCode } from "../storage";
import { ALLPAY_ABI } from "../contract-data";
import { AUCTION_CONTRACTS } from "../contract-data";
import { UsePublicClientReturnType } from "wagmi";
import { WriteContractMutate } from "wagmi/query";
import { WriteContractMutateAsync } from "wagmi/query";

export class AllPayAuctionService implements IAuctionService {
contractAddress: Address;
Expand Down Expand Up @@ -55,22 +55,22 @@ export class AllPayAuctionService implements IAuctionService {
}

private async approveToken(
writeContract: WriteContractMutate<Config, unknown>,
writeContract: WriteContractMutateAsync<Config, unknown>,
tokenAddress: Address,
spender: Address,
amountOrId: bigint,
isNFT: boolean
): Promise<void> {
): Promise<Hash> {
try {
if (isNFT) {
await writeContract({
return await writeContract({
address: tokenAddress,
abi: erc721Abi,
functionName: "approve",
args: [spender, amountOrId],
});
} else {
await writeContract({
return await writeContract({
address: tokenAddress,
abi: erc20Abi,
functionName: "approve",
Expand All @@ -83,15 +83,17 @@ export class AllPayAuctionService implements IAuctionService {
}
}

async createAuction(writeContract: WriteContractMutate<Config, unknown>, params: AllPayAuctionParams): Promise<void> {
async createAuction(writeContract: WriteContractMutateAsync<Config, unknown>, publicClient: UsePublicClientReturnType, params: AllPayAuctionParams): Promise<void> {
try {
await this.approveToken(
if (!publicClient) throw new Error("publicClient not available");
const approvalHash = await this.approveToken(
writeContract,
params.auctionedToken,
this.contractAddress,
(params.auctionType === BigInt(0) ? params.auctionedTokenIdOrAmount : parseEther(String(params.auctionedTokenIdOrAmount))),
params.auctionType === BigInt(0)
);
await publicClient.waitForTransactionReceipt({ hash: approvalHash });
await writeContract({
address: this.contractAddress,
abi: ALLPAY_ABI,
Expand All @@ -117,19 +119,22 @@ export class AllPayAuctionService implements IAuctionService {
}

async placeBid(
writeContract: WriteContractMutate<Config, unknown>,
writeContract: WriteContractMutateAsync<Config, unknown>,
publicClient: UsePublicClientReturnType,
auctionId: bigint,
biddingTokenAddress: Address,
bidAmount: bigint,
): Promise<void> {
try {
await this.approveToken(
if (!publicClient) throw new Error("publicClient not available");
const approvalHash = await this.approveToken(
writeContract,
biddingTokenAddress,
this.contractAddress,
bidAmount,
false // 0 = NFT, 1 = ERC20
);
await publicClient.waitForTransactionReceipt({ hash: approvalHash });
await writeContract({
address: this.contractAddress,
abi: ALLPAY_ABI,
Expand All @@ -142,7 +147,7 @@ export class AllPayAuctionService implements IAuctionService {
}
}

async withdraw(writeContract: WriteContractMutate<Config, unknown>, auctionId: bigint): Promise<void> {
async withdraw(writeContract: WriteContractMutateAsync<Config, unknown>, auctionId: bigint): Promise<void> {
try {
await writeContract({
address: this.contractAddress,
Expand All @@ -156,7 +161,7 @@ export class AllPayAuctionService implements IAuctionService {
}
}

async claim(writeContract: WriteContractMutate<Config, unknown>, auctionId: bigint): Promise<void> {
async claim(writeContract: WriteContractMutateAsync<Config, unknown>, auctionId: bigint): Promise<void> {
try {
await writeContract({
address: this.contractAddress,
Expand Down
31 changes: 18 additions & 13 deletions lib/services/english-auction-service.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Address, erc20Abi, erc721Abi, parseAbiItem } from "viem";
import { Address, erc20Abi, erc721Abi, Hash, parseAbiItem } from "viem";
import { Config, readContracts } from '@wagmi/core';
import { wagmi_config } from "@/config";
import { IAuctionService, EnglishAuctionParams, mappedData } from "../auction-service";
Expand All @@ -8,7 +8,7 @@ import { generateCode } from "../storage";
import { getTokenName } from "../auction-service";
import { AUCTION_CONTRACTS, ENGLISH_ABI } from "../contract-data";
import { UsePublicClientReturnType } from "wagmi";
import { WriteContractMutate } from "wagmi/query";
import { WriteContractMutateAsync } from "wagmi/query";
export class EnglishAuctionService implements IAuctionService {
contractAddress: Address;
constructor(chainId: number) {
Expand Down Expand Up @@ -108,22 +108,22 @@ export class EnglishAuctionService implements IAuctionService {
}

private async approveToken(
writeContract: WriteContractMutate<Config, unknown>,
writeContract: WriteContractMutateAsync<Config, unknown>,
tokenAddress: Address,
spender: Address,
amountOrId: bigint,
isNFT: boolean
): Promise<void> {
): Promise<Hash> {
try {
if (isNFT) {
await writeContract({
return await writeContract({
address: tokenAddress,
abi: erc721Abi,
functionName: "approve",
args: [spender, amountOrId],
});
} else {
await writeContract({
return await writeContract({
address: tokenAddress,
abi: erc20Abi,
functionName: "approve",
Expand All @@ -136,15 +136,17 @@ export class EnglishAuctionService implements IAuctionService {
}
}

async createAuction(writeContract: WriteContractMutate<Config, unknown>, params: EnglishAuctionParams): Promise<void> {
async createAuction(writeContract: WriteContractMutateAsync<Config, unknown>, publicClient: UsePublicClientReturnType, params: EnglishAuctionParams): Promise<void> {
try {
await this.approveToken(
if (!publicClient) throw new Error("publicClient not available");
const approvalHash = await this.approveToken(
writeContract,
params.auctionedToken,
this.contractAddress,
(params.auctionType === BigInt(0) ? params.auctionedTokenIdOrAmount : parseEther(String(params.auctionedTokenIdOrAmount))),
params.auctionType === BigInt(0) // 0 = NFT, 1 = ERC20
);
await publicClient.waitForTransactionReceipt({ hash: approvalHash });
await writeContract({
address: this.contractAddress,
abi: ENGLISH_ABI,
Expand All @@ -170,19 +172,22 @@ export class EnglishAuctionService implements IAuctionService {
}

async placeBid(
writeContract: WriteContractMutate<Config, unknown>,
writeContract: WriteContractMutateAsync<Config, unknown>,
publicClient: UsePublicClientReturnType,
auctionId: bigint,
biddingTokenAddress: Address,
bidAmount: bigint,
): Promise<void> {
try {
await this.approveToken(
if (!publicClient) throw new Error("publicClient not available");
const approvalHash = await this.approveToken(
writeContract,
biddingTokenAddress,
this.contractAddress,
bidAmount,
false // 0 = NFT, 1 = ERC20
)
);
await publicClient.waitForTransactionReceipt({ hash: approvalHash });
await writeContract({
address: this.contractAddress,
abi: ENGLISH_ABI,
Expand All @@ -195,7 +200,7 @@ export class EnglishAuctionService implements IAuctionService {
}
}

async withdraw(writeContract: WriteContractMutate<Config, unknown>, auctionId: bigint): Promise<void> {
async withdraw(writeContract: WriteContractMutateAsync<Config, unknown>, auctionId: bigint): Promise<void> {
try {
await writeContract({
address: this.contractAddress,
Expand All @@ -209,7 +214,7 @@ export class EnglishAuctionService implements IAuctionService {
}
}

async claim(writeContract: WriteContractMutate<Config, unknown>, auctionId: bigint): Promise<void> {
async claim(writeContract: WriteContractMutateAsync<Config, unknown>, auctionId: bigint): Promise<void> {
try {
await writeContract({
address: this.contractAddress,
Expand Down
Loading
Loading