mirror of
https://github.com/0xShay/ticketchain.git
synced 2026-01-11 13:13:25 +00:00
add transfer ticket functionality
This commit is contained in:
36
lib/transferTicket.ts
Normal file
36
lib/transferTicket.ts
Normal file
@@ -0,0 +1,36 @@
|
||||
import { ethers } from 'ethers';
|
||||
import { getContract } from './ethers';
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
ethereumProvider?: ethers.providers.ExternalProvider & {
|
||||
isMetaMask?: boolean;
|
||||
request?: (method: string, params?: unknown[]) => Promise<unknown>;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export const transferTicket = async (
|
||||
ticketId: number,
|
||||
receiverAddress: string
|
||||
): Promise<string> => {
|
||||
try {
|
||||
if (typeof window.ethereumProvider === 'undefined') {
|
||||
throw new Error('Please install MetaMask or another Ethereum wallet');
|
||||
}
|
||||
await window.ethereumProvider.request?.({ method: 'eth_requestAccounts' });
|
||||
const provider = new ethers.providers.Web3Provider(window.ethereumProvider);
|
||||
const signer = provider.getSigner();
|
||||
const contract = getContract().connect(signer);
|
||||
if (!ethers.utils.isAddress(receiverAddress)) {
|
||||
throw new Error('Invalid receiver address');
|
||||
}
|
||||
|
||||
const tx = await contract.transferTicket(ticketId, receiverAddress);
|
||||
const receipt = await tx.wait();
|
||||
return receipt.transactionHash;
|
||||
} catch (error) {
|
||||
console.error('Error transferring ticket:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user