I'm doing an exercise from Alchemy where I need to sign a transaction before sending it to the server. And then validate the transaction on the server side. I'm using a script to which I input a private key and message to generate the signature use here:
Note I need to convert the signMessage to String, otherwise I get a TypeError: Do not know how to serialize a BigInt:
async function transfer(evt) {
evt.preventDefault();
const signMessage = {
r: 36691152806955910003274360488470766136656266395316605280087404244279825225745n,
s: 25775843654993118241418850103739194190473898130155752009759534141754021856163n,
recovery: 0,
};
try {
const {
data: { balance },
} = await server.post(`send`, {
signature: signMessage.toString(),
});
} catch (ex) {
console.log(ex);
alert(ex.response.data.message);
}
}
Then I'm using this code on the server side, but it doesn't work. I cannot convert the String back to BigInt due to err SyntaxError: Cannot convert [object Object] to a BigIn:
app.post("/send", (req, res) => {
// TODO: get a signature from the client-side app
// recover the public address from the signature
const { signature } = req.body;
// Convert the strings back to BigInt and Buffer
const signatureBigInt = BigInt(signature);
console.log({ signatureBigInt });
res.send("testing");
});
I've tried different things and convertion types but I think I'm missing something or I'm fundamentally wrong about what I'm doing.
From mdn doc:
Looks like only
BigInt, string, number, and booleantypes can be converted.Instead of stringifying the complete object, you should be stringifying the value of object key that you want to pass