import { toHex } from "viem";
const AUSD = "0xa9012a055bd4e0eDfF8Ce09f960291C09D5322dC";
async function signTransfer(account, { to, value, validBefore }) {
const message = {
from: account.address,
to,
value,
validAfter: 0n,
validBefore,
nonce: toHex(crypto.getRandomValues(new Uint8Array(32))), // random, once
};
const signature = await account.signTypedData({
domain: { name: "Agora Dollar", version: "1", chainId: 10143, verifyingContract: AUSD },
types: {
TransferWithAuthorization: [
{ name: "from", type: "address" },
{ name: "to", type: "address" },
{ name: "value", type: "uint256" },
{ name: "validAfter", type: "uint256" },
{ name: "validBefore", type: "uint256" },
{ name: "nonce", type: "bytes32" },
],
},
primaryType: "TransferWithAuthorization",
message,
});
// the API takes every bigint as a string
return {
...message,
value: String(message.value),
validAfter: "0",
validBefore: String(message.validBefore),
signature,
};
}