38 lines
1.1 KiB
JavaScript
38 lines
1.1 KiB
JavaScript
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;
|
|
}
|
|
}
|
|
|