UNPKG

@tempus-labs/utils

Version:

Tempus utility helpers

46 lines 1.73 kB
"use strict"; 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