@tempus-labs/utils
Version:
Tempus utility helpers
46 lines • 1.73 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.constructPermit = void 0;
const ContractBase_1 = require("../utils/ContractBase");
const utils_1 = require("ethers/lib/utils");
const permitTypes = {
Permit: [
{ name: "owner", type: "address" },
{ name: "spender", type: "address" },
{ name: "value", type: "uint256" },
{ name: "nonce", type: "uint256" },
{ name: "deadline", type: "uint256" }
]
};
async function getPermitStruct(token, owner, spender, value, deadline) {
return {
owner: (0, ContractBase_1.addressOf)(owner),
spender: (0, ContractBase_1.addressOf)(spender),
value: token.toBigNum(value),
nonce: await token.contract.nonces((0, ContractBase_1.addressOf)(owner)),
deadline: deadline
};
}
async function getDomain(token, chainId) {
return {
name: await token.name(),
version: '1',
chainId: chainId,
verifyingContract: token.address
};
}
async function constructPermit(token, user, spender, value, deadline) {
const deadlineInt = parseInt((deadline.getTime() / 1000).toFixed(0));
const permitData = await getPermitStruct(token, user, spender, value, deadlineInt);
const signature = (0, utils_1.splitSignature)(await user._signTypedData(await getDomain(token, await user.getChainId()), permitTypes, permitData));
return {
token: token.address,
value: permitData.value,
deadline: permitData.deadline,
v: signature.v,
r: signature.r,
s: signature.s
};
}
exports.constructPermit = constructPermit;
//# sourceMappingURL=PermitUtils.js.map