function serializeFormData(formElement) { const formData = new FormData(formElement); const formJSON = {}; formData.forEach((value, key) => { // Handle multiple values for the same key (e.g., checkboxes) if (formJSON.hasOwnProperty(key)) { formJSON[key] = [].concat(formJSON[key], value); } else { formJSON[key] = value; } }); return JSON.stringify(formJSON); }; // Function to sign the serialized form data with Web3 async function web3Sign(serializedData) { if (!window.ethereum) { alert('MetaMask not detected. Please install MetaMask first.'); return; } try { const provider = new ethers.providers.Web3Provider(window.ethereum); await provider.send("eth_requestAccounts", []); const signer = provider.getSigner(); const address = await signer.getAddress(); const signature = await signer.signMessage(serializedData); return { address, signature }; } catch (error) { console.error('Error signing data with Web3:', error); return null; } }