mirror of
https://github.com/0xShay/ticketchain.git
synced 2026-01-11 21:23:24 +00:00
added transferTicket.tsx component
This commit is contained in:
0
components/sc/centsToFlare.tsx
Normal file
0
components/sc/centsToFlare.tsx
Normal file
@@ -17,6 +17,7 @@ const TransferTicket = () => {
|
|||||||
const [isWalletConnected, setIsWalletConnected] = useState<boolean>(false);
|
const [isWalletConnected, setIsWalletConnected] = useState<boolean>(false);
|
||||||
const [walletAddress, setWalletAddress] = useState<string | null>(null);
|
const [walletAddress, setWalletAddress] = useState<string | null>(null);
|
||||||
const [errorMessage, setErrorMessage] = useState<string | null>(null);
|
const [errorMessage, setErrorMessage] = useState<string | null>(null);
|
||||||
|
const [isApprovedTransfer, setIsApprovedTransfer] = useState<boolean>(false);
|
||||||
|
|
||||||
// Connect Wallet
|
// Connect Wallet
|
||||||
const handleConnectWallet = async () => {
|
const handleConnectWallet = async () => {
|
||||||
@@ -40,11 +41,9 @@ const TransferTicket = () => {
|
|||||||
|
|
||||||
// Handle transferring the ticket
|
// Handle transferring the ticket
|
||||||
const handleTransferTicket = async () => {
|
const handleTransferTicket = async () => {
|
||||||
if (ticketId !== null) {
|
if (!ticketId) {
|
||||||
if (ticketId < 0) {
|
alert('Please enter a valid Ticket ID.');
|
||||||
alert('Please enter a valid Ticket ID.');
|
return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (!ethers.utils.isAddress(recipientAddress)) {
|
if (!ethers.utils.isAddress(recipientAddress)) {
|
||||||
alert('Please enter a valid recipient address.');
|
alert('Please enter a valid recipient address.');
|
||||||
@@ -57,10 +56,16 @@ const TransferTicket = () => {
|
|||||||
const signer = provider.getSigner();
|
const signer = provider.getSigner();
|
||||||
const contract = getContract().connect(signer);
|
const contract = getContract().connect(signer);
|
||||||
|
|
||||||
// Call `transferTicket` function
|
let tx;
|
||||||
const tx = await contract.transferTicket(ticketId, recipientAddress);
|
if (isApprovedTransfer) {
|
||||||
const receipt = await tx.wait();
|
// Transfer using `transferTicketFrom` for approved users
|
||||||
|
tx = await contract.transferTicketFrom(ticketId, recipientAddress);
|
||||||
|
} else {
|
||||||
|
// Direct transfer by the owner using `transferTicket`
|
||||||
|
tx = await contract.transferTicket(ticketId, recipientAddress);
|
||||||
|
}
|
||||||
|
|
||||||
|
const receipt = await tx.wait();
|
||||||
setTransactionHash(receipt.transactionHash);
|
setTransactionHash(receipt.transactionHash);
|
||||||
console.log(
|
console.log(
|
||||||
'Ticket transferred successfully, transaction hash:',
|
'Ticket transferred successfully, transaction hash:',
|
||||||
@@ -75,6 +80,40 @@ const TransferTicket = () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Handle ticket approval for transfer
|
||||||
|
const handleApproveTransfer = async () => {
|
||||||
|
if (ticketId !== null) {
|
||||||
|
if (ticketId < 0) {
|
||||||
|
alert('Please enter a valid Ticket ID.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ethers.utils.isAddress(recipientAddress)) {
|
||||||
|
alert('Please enter a valid recipient address.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Get the provider and signer
|
||||||
|
const provider = new ethers.providers.Web3Provider(window.ethereum);
|
||||||
|
const signer = provider.getSigner();
|
||||||
|
const contract = getContract().connect(signer);
|
||||||
|
|
||||||
|
// Approve recipient to transfer the ticket
|
||||||
|
const tx = await contract.approveTicket(ticketId, recipientAddress, true);
|
||||||
|
const receipt = await tx.wait();
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
'Ticket transfer approved, transaction hash:',
|
||||||
|
receipt.transactionHash
|
||||||
|
);
|
||||||
|
alert(`Approved ${recipientAddress} to transfer ticket ID ${ticketId}`);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error approving transfer:', error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="p-4">
|
<div className="p-4">
|
||||||
<h2>Transfer Ticket</h2>
|
<h2>Transfer Ticket</h2>
|
||||||
@@ -103,13 +142,34 @@ const TransferTicket = () => {
|
|||||||
className="border p-2 mb-2"
|
className="border p-2 mb-2"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
{/* Toggle for approved transfer */}
|
||||||
|
<label className="flex items-center space-x-2 mb-4">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
checked={isApprovedTransfer}
|
||||||
|
onChange={() => setIsApprovedTransfer(!isApprovedTransfer)}
|
||||||
|
/>
|
||||||
|
<span>Use Approved Transfer</span>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
{/* Transfer Ticket Button */}
|
||||||
<button
|
<button
|
||||||
onClick={handleTransferTicket}
|
onClick={handleTransferTicket}
|
||||||
className="bg-purple-500 text-white px-4 py-2 rounded"
|
className="bg-purple-500 text-white px-4 py-2 rounded mr-2"
|
||||||
>
|
>
|
||||||
Transfer Ticket
|
Transfer Ticket
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
{/* Approve Transfer Button */}
|
||||||
|
{!isApprovedTransfer && (
|
||||||
|
<button
|
||||||
|
onClick={handleApproveTransfer}
|
||||||
|
className="bg-green-500 text-white px-4 py-2 rounded"
|
||||||
|
>
|
||||||
|
Approve Transfer
|
||||||
|
</button>
|
||||||
|
)}
|
||||||
|
|
||||||
{errorMessage && <p className="text-red-500 mt-2">{errorMessage}</p>}
|
{errorMessage && <p className="text-red-500 mt-2">{errorMessage}</p>}
|
||||||
{transactionHash && (
|
{transactionHash && (
|
||||||
<p className="mt-4">
|
<p className="mt-4">
|
||||||
|
|||||||
@@ -159,9 +159,10 @@ contract EventManager {
|
|||||||
require(found, "Ticket not found in sender's inventory");
|
require(found, "Ticket not found in sender's inventory");
|
||||||
|
|
||||||
// Remove ticket from holder's array
|
// Remove ticket from holder's array
|
||||||
for (; i < userTickets[prevHolder].length; i++) {
|
for (; i < userTickets[prevHolder].length-1; i++) {
|
||||||
userTickets[prevHolder][i] = userTickets[prevHolder][i+1];
|
userTickets[prevHolder][i] = userTickets[prevHolder][i+1];
|
||||||
}
|
}
|
||||||
|
userTickets[prevHolder].pop();
|
||||||
|
|
||||||
// Add ticket to _to's array
|
// Add ticket to _to's array
|
||||||
userTickets[_to].push(_ticketId);
|
userTickets[_to].push(_ticketId);
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { ethers } from 'ethers';
|
|||||||
|
|
||||||
const FLARE_TESTNET_RPC_URL = 'https://coston2.enosys.global/ext/C/rpc';
|
const FLARE_TESTNET_RPC_URL = 'https://coston2.enosys.global/ext/C/rpc';
|
||||||
|
|
||||||
const CONTRACT_ADDRESS = '0xA171873976afaf4b1442c959C2e03b7d52656340';
|
const CONTRACT_ADDRESS = '0xa12B3168e8FC621493c9db2dc1Db31e75cCA00bb';
|
||||||
|
|
||||||
export function getFlareProvider() {
|
export function getFlareProvider() {
|
||||||
const flareRpcUrl = FLARE_TESTNET_RPC_URL;
|
const flareRpcUrl = FLARE_TESTNET_RPC_URL;
|
||||||
|
|||||||
Reference in New Issue
Block a user