UNPKG

@uniswap/universal-router

Version:

Smart contracts for Universal Router

59 lines (56 loc) 1.55 kB
import { BigNumberish, constants, Signature } from 'ethers' import { splitSignature } from 'ethers/lib/utils' import { INonfungiblePositionManager } from '../../../typechain' import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers' export default async function getPermitNFTSignature( wallet: SignerWithAddress, positionManager: INonfungiblePositionManager, spender: string, tokenId: BigNumberish, deadline: BigNumberish = constants.MaxUint256, permitConfig?: { nonce?: BigNumberish; name?: string; chainId?: number; version?: string } ): Promise<Signature> { const [nonce, name, version, chainId] = await Promise.all([ permitConfig?.nonce ?? positionManager.positions(tokenId).then((p) => p.nonce), permitConfig?.name ?? positionManager.name(), permitConfig?.version ?? '1', permitConfig?.chainId ?? wallet.getChainId(), ]) return splitSignature( await wallet._signTypedData( { name, version, chainId, verifyingContract: positionManager.address, }, { Permit: [ { name: 'spender', type: 'address', }, { name: 'tokenId', type: 'uint256', }, { name: 'nonce', type: 'uint256', }, { name: 'deadline', type: 'uint256', }, ], }, { owner: wallet.address, spender, tokenId, nonce, deadline, } ) ) }