@huuduynvc/permit2-sdk 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +12 -0
- package/dist/allowanceTransfer.d.ts +36 -0
- package/dist/constants.d.ts +13 -0
- package/dist/domain.d.ts +7 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +8 -0
- package/dist/permit2-sdk.cjs.development.js +1566 -0
- package/dist/permit2-sdk.cjs.development.js.map +1 -0
- package/dist/permit2-sdk.cjs.production.min.js +2 -0
- package/dist/permit2-sdk.cjs.production.min.js.map +1 -0
- package/dist/permit2-sdk.esm.js +1546 -0
- package/dist/permit2-sdk.esm.js.map +1 -0
- package/dist/providers/AllowanceProvider.d.ts +17 -0
- package/dist/providers/index.d.ts +1 -0
- package/dist/signatureTransfer.d.ts +41 -0
- package/package.json +40 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"permit2-sdk.esm.js","sources":["../src/constants.ts","../src/domain.ts","../src/allowanceTransfer.ts","../src/signatureTransfer.ts","../src/providers/AllowanceProvider.ts"],"sourcesContent":["import { BigNumber } from '@ethersproject/bignumber'\n\n// @deprecated please use permit2Address(chainId: number)\nexport const PERMIT2_ADDRESS = '0x000000000022D473030F116dDEE9F6B43aC78BA3'\n\nexport function permit2Address(chainId?: number): string {\n switch (chainId) {\n case 324:\n return '0x0000000000225e31D15943971F47aD3022F714Fa'\n default:\n return PERMIT2_ADDRESS\n }\n}\n\nexport const MaxUint48 = BigNumber.from('0xffffffffffff')\nexport const MaxUint160 = BigNumber.from('0xffffffffffffffffffffffffffffffffffffffff')\nexport const MaxUint256 = BigNumber.from('0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff')\n\n// alias max types for their usages\n// allowance transfer types\nexport const MaxAllowanceTransferAmount = MaxUint160\nexport const MaxAllowanceExpiration = MaxUint48\nexport const MaxOrderedNonce = MaxUint48\n\n// signature transfer types\nexport const MaxSignatureTransferAmount = MaxUint256\nexport const MaxUnorderedNonce = MaxUint256\nexport const MaxSigDeadline = MaxUint256\n\nexport const InstantExpiration: BigNumber = BigNumber.from(0)\n","import { TypedDataDomain, TypedDataField } from '@ethersproject/abstract-signer'\n\nconst PERMIT2_DOMAIN_NAME = 'Permit2'\n\nexport function permit2Domain(permit2Address: string, chainId: number): TypedDataDomain {\n return {\n name: PERMIT2_DOMAIN_NAME,\n chainId,\n verifyingContract: permit2Address,\n }\n}\n\nexport type PermitData = {\n domain: TypedDataDomain\n types: Record<string, TypedDataField[]>\n values: any\n}\n","import invariant from 'tiny-invariant'\nimport { TypedDataDomain, TypedDataField } from '@ethersproject/abstract-signer'\nimport { BigNumberish } from '@ethersproject/bignumber'\nimport { _TypedDataEncoder } from '@ethersproject/hash'\nimport { MaxSigDeadline, MaxOrderedNonce, MaxAllowanceTransferAmount, MaxAllowanceExpiration } from './constants'\nimport { permit2Domain } from './domain'\n\nexport interface PermitDetails {\n token: string\n amount: BigNumberish\n expiration: BigNumberish\n nonce: BigNumberish\n}\n\nexport interface PermitSingle {\n details: PermitDetails\n spender: string\n sigDeadline: BigNumberish\n}\n\nexport interface PermitBatch {\n details: PermitDetails[]\n spender: string\n sigDeadline: BigNumberish\n}\n\nexport type PermitSingleData = {\n domain: TypedDataDomain\n types: Record<string, TypedDataField[]>\n values: PermitSingle\n}\n\nexport type PermitBatchData = {\n domain: TypedDataDomain\n types: Record<string, TypedDataField[]>\n values: PermitBatch\n}\n\nconst PERMIT_DETAILS = [\n { name: 'token', type: 'address' },\n { name: 'amount', type: 'uint160' },\n { name: 'expiration', type: 'uint48' },\n { name: 'nonce', type: 'uint48' },\n]\n\nconst PERMIT_TYPES = {\n PermitSingle: [\n { name: 'details', type: 'PermitDetails' },\n { name: 'spender', type: 'address' },\n { name: 'sigDeadline', type: 'uint256' },\n ],\n PermitDetails: PERMIT_DETAILS,\n}\n\nconst PERMIT_BATCH_TYPES = {\n PermitBatch: [\n { name: 'details', type: 'PermitDetails[]' },\n { name: 'spender', type: 'address' },\n { name: 'sigDeadline', type: 'uint256' },\n ],\n PermitDetails: PERMIT_DETAILS,\n}\n\nfunction isPermit(permit: PermitSingle | PermitBatch): permit is PermitSingle {\n return !Array.isArray(permit.details)\n}\n\nexport abstract class AllowanceTransfer {\n /**\n * Cannot be constructed.\n */\n private constructor() {}\n\n // return the data to be sent in a eth_signTypedData RPC call\n // for signing the given permit data\n public static getPermitData(\n permit: PermitSingle | PermitBatch,\n permit2Address: string,\n chainId: number\n ): PermitSingleData | PermitBatchData {\n invariant(MaxSigDeadline.gte(permit.sigDeadline), 'SIG_DEADLINE_OUT_OF_RANGE')\n\n const domain = permit2Domain(permit2Address, chainId)\n if (isPermit(permit)) {\n validatePermitDetails(permit.details)\n return {\n domain,\n types: PERMIT_TYPES,\n values: permit,\n }\n } else {\n permit.details.forEach(validatePermitDetails)\n return {\n domain,\n types: PERMIT_BATCH_TYPES,\n values: permit,\n }\n }\n }\n\n public static hash(permit: PermitSingle | PermitBatch, permit2Address: string, chainId: number): string {\n const { domain, types, values } = AllowanceTransfer.getPermitData(permit, permit2Address, chainId)\n return _TypedDataEncoder.hash(domain, types, values)\n }\n}\n\nfunction validatePermitDetails(details: PermitDetails) {\n invariant(MaxOrderedNonce.gte(details.nonce), 'NONCE_OUT_OF_RANGE')\n invariant(MaxAllowanceTransferAmount.gte(details.amount), 'AMOUNT_OUT_OF_RANGE')\n invariant(MaxAllowanceExpiration.gte(details.expiration), 'EXPIRATION_OUT_OF_RANGE')\n}\n","import invariant from 'tiny-invariant'\nimport { TypedDataDomain, TypedDataField } from '@ethersproject/abstract-signer'\nimport { BigNumberish } from '@ethersproject/bignumber'\nimport { _TypedDataEncoder } from '@ethersproject/hash'\nimport { permit2Domain } from './domain'\nimport { MaxSigDeadline, MaxUnorderedNonce, MaxSignatureTransferAmount } from './constants'\n\nexport interface Witness {\n witness: any\n witnessTypeName: string\n witnessType: Record<string, TypedDataField[]>\n}\n\nexport interface TokenPermissions {\n token: string\n amount: BigNumberish\n}\n\nexport interface PermitTransferFrom {\n permitted: TokenPermissions\n spender: string\n nonce: BigNumberish\n deadline: BigNumberish\n}\n\nexport interface PermitBatchTransferFrom {\n permitted: TokenPermissions[]\n spender: string\n nonce: BigNumberish\n deadline: BigNumberish\n}\n\nexport type PermitTransferFromData = {\n domain: TypedDataDomain\n types: Record<string, TypedDataField[]>\n values: PermitTransferFrom\n}\n\nexport type PermitBatchTransferFromData = {\n domain: TypedDataDomain\n types: Record<string, TypedDataField[]>\n values: PermitBatchTransferFrom\n}\n\nconst TOKEN_PERMISSIONS = [\n { name: 'token', type: 'address' },\n { name: 'amount', type: 'uint256' },\n]\n\nconst PERMIT_TRANSFER_FROM_TYPES = {\n PermitTransferFrom: [\n { name: 'permitted', type: 'TokenPermissions' },\n { name: 'spender', type: 'address' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n TokenPermissions: TOKEN_PERMISSIONS,\n}\n\nconst PERMIT_BATCH_TRANSFER_FROM_TYPES = {\n PermitBatchTransferFrom: [\n { name: 'permitted', type: 'TokenPermissions[]' },\n { name: 'spender', type: 'address' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n TokenPermissions: TOKEN_PERMISSIONS,\n}\n\nfunction permitTransferFromWithWitnessType(witness: Witness): Record<string, TypedDataField[]> {\n return {\n PermitWitnessTransferFrom: [\n { name: 'permitted', type: 'TokenPermissions' },\n { name: 'spender', type: 'address' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n { name: 'witness', type: witness.witnessTypeName },\n ],\n TokenPermissions: TOKEN_PERMISSIONS,\n ...witness.witnessType,\n }\n}\n\nfunction permitBatchTransferFromWithWitnessType(witness: Witness): Record<string, TypedDataField[]> {\n return {\n PermitBatchWitnessTransferFrom: [\n { name: 'permitted', type: 'TokenPermissions[]' },\n { name: 'spender', type: 'address' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n { name: 'witness', type: witness.witnessTypeName },\n ],\n TokenPermissions: TOKEN_PERMISSIONS,\n ...witness.witnessType,\n }\n}\n\nfunction isPermitTransferFrom(permit: PermitTransferFrom | PermitBatchTransferFrom): permit is PermitTransferFrom {\n return !Array.isArray(permit.permitted)\n}\n\nexport abstract class SignatureTransfer {\n /**\n * Cannot be constructed.\n */\n private constructor() {}\n\n // return the data to be sent in a eth_signTypedData RPC call\n // for signing the given permit data\n public static getPermitData(\n permit: PermitTransferFrom | PermitBatchTransferFrom,\n permit2Address: string,\n chainId: number,\n witness?: Witness\n ): PermitTransferFromData | PermitBatchTransferFromData {\n invariant(MaxSigDeadline.gte(permit.deadline), 'SIG_DEADLINE_OUT_OF_RANGE')\n invariant(MaxUnorderedNonce.gte(permit.nonce), 'NONCE_OUT_OF_RANGE')\n\n const domain = permit2Domain(permit2Address, chainId)\n if (isPermitTransferFrom(permit)) {\n validateTokenPermissions(permit.permitted)\n const types = witness ? permitTransferFromWithWitnessType(witness) : PERMIT_TRANSFER_FROM_TYPES\n const values = witness ? Object.assign(permit, { witness: witness.witness }) : permit\n return {\n domain,\n types,\n values,\n }\n } else {\n permit.permitted.forEach(validateTokenPermissions)\n const types = witness ? permitBatchTransferFromWithWitnessType(witness) : PERMIT_BATCH_TRANSFER_FROM_TYPES\n const values = witness ? Object.assign(permit, { witness: witness.witness }) : permit\n return {\n domain,\n types,\n values,\n }\n }\n }\n\n public static hash(\n permit: PermitTransferFrom | PermitBatchTransferFrom,\n permit2Address: string,\n chainId: number,\n witness?: Witness\n ): string {\n const { domain, types, values } = SignatureTransfer.getPermitData(permit, permit2Address, chainId, witness)\n return _TypedDataEncoder.hash(domain, types, values)\n }\n}\n\nfunction validateTokenPermissions(permissions: TokenPermissions) {\n invariant(MaxSignatureTransferAmount.gte(permissions.amount), 'AMOUNT_OUT_OF_RANGE')\n}\n","import { BigNumber } from '@ethersproject/bignumber'\nimport { Provider } from '@ethersproject/providers'\nimport Permit2Abi from '../../abis/Permit2.json'\nimport { Contract } from '@ethersproject/contracts'\n\nexport interface AllowanceData {\n amount: BigNumber\n nonce: number\n expiration: number\n}\n\nexport class AllowanceProvider {\n private permit2: Contract\n\n constructor(private provider: Provider, private permit2Address: string) {\n this.permit2 = new Contract(this.permit2Address, Permit2Abi, this.provider)\n }\n\n async getAllowanceData(token: string, owner: string, spender: string): Promise<AllowanceData> {\n return await this.permit2.allowance(owner, token, spender)\n }\n\n async getAllowance(token: string, owner: string, spender: string): Promise<BigNumber> {\n return (await this.getAllowanceData(token, owner, spender)).amount\n }\n\n async getNonce(token: string, owner: string, spender: string): Promise<number> {\n return (await this.getAllowanceData(token, owner, spender)).nonce\n }\n\n async getExpiration(token: string, owner: string, spender: string): Promise<number> {\n return (await this.getAllowanceData(token, owner, spender)).expiration\n }\n}\n"],"names":["PERMIT2_ADDRESS","permit2Address","chainId","MaxUint48","BigNumber","from","MaxUint160","MaxUint256","MaxAllowanceTransferAmount","MaxAllowanceExpiration","MaxOrderedNonce","MaxSignatureTransferAmount","MaxUnorderedNonce","MaxSigDeadline","InstantExpiration","PERMIT2_DOMAIN_NAME","permit2Domain","name","verifyingContract","PERMIT_DETAILS","type","PERMIT_TYPES","PermitSingle","PermitDetails","PERMIT_BATCH_TYPES","PermitBatch","isPermit","permit","Array","isArray","details","AllowanceTransfer","getPermitData","gte","sigDeadline","process","env","NODE_ENV","invariant","domain","validatePermitDetails","types","values","forEach","hash","_AllowanceTransfer$ge","_TypedDataEncoder","nonce","amount","expiration","TOKEN_PERMISSIONS","PERMIT_TRANSFER_FROM_TYPES","PermitTransferFrom","TokenPermissions","PERMIT_BATCH_TRANSFER_FROM_TYPES","PermitBatchTransferFrom","permitTransferFromWithWitnessType","witness","_extends","PermitWitnessTransferFrom","witnessTypeName","witnessType","permitBatchTransferFromWithWitnessType","PermitBatchWitnessTransferFrom","isPermitTransferFrom","permitted","SignatureTransfer","deadline","validateTokenPermissions","Object","assign","_SignatureTransfer$ge","permissions","AllowanceProvider","provider","permit2","Contract","Permit2Abi","_proto","prototype","getAllowanceData","_getAllowanceData","_asyncToGenerator","_regeneratorRuntime","mark","_callee","token","owner","spender","wrap","_callee$","_context","prev","next","allowance","abrupt","sent","stop","_x","_x2","_x3","apply","arguments","getAllowance","_getAllowance","_callee2","_callee2$","_context2","_x4","_x5","_x6","getNonce","_getNonce","_callee3","_callee3$","_context3","_x7","_x8","_x9","getExpiration","_getExpiration","_callee4","_callee4$","_context4","_x10","_x11","_x12"],"mappings":"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"}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import { BigNumber } from '@ethersproject/bignumber';
|
2
|
+
import { Provider } from '@ethersproject/providers';
|
3
|
+
export interface AllowanceData {
|
4
|
+
amount: BigNumber;
|
5
|
+
nonce: number;
|
6
|
+
expiration: number;
|
7
|
+
}
|
8
|
+
export declare class AllowanceProvider {
|
9
|
+
private provider;
|
10
|
+
private permit2Address;
|
11
|
+
private permit2;
|
12
|
+
constructor(provider: Provider, permit2Address: string);
|
13
|
+
getAllowanceData(token: string, owner: string, spender: string): Promise<AllowanceData>;
|
14
|
+
getAllowance(token: string, owner: string, spender: string): Promise<BigNumber>;
|
15
|
+
getNonce(token: string, owner: string, spender: string): Promise<number>;
|
16
|
+
getExpiration(token: string, owner: string, spender: string): Promise<number>;
|
17
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './AllowanceProvider';
|
@@ -0,0 +1,41 @@
|
|
1
|
+
import { TypedDataDomain, TypedDataField } from '@ethersproject/abstract-signer';
|
2
|
+
import { BigNumberish } from '@ethersproject/bignumber';
|
3
|
+
export interface Witness {
|
4
|
+
witness: any;
|
5
|
+
witnessTypeName: string;
|
6
|
+
witnessType: Record<string, TypedDataField[]>;
|
7
|
+
}
|
8
|
+
export interface TokenPermissions {
|
9
|
+
token: string;
|
10
|
+
amount: BigNumberish;
|
11
|
+
}
|
12
|
+
export interface PermitTransferFrom {
|
13
|
+
permitted: TokenPermissions;
|
14
|
+
spender: string;
|
15
|
+
nonce: BigNumberish;
|
16
|
+
deadline: BigNumberish;
|
17
|
+
}
|
18
|
+
export interface PermitBatchTransferFrom {
|
19
|
+
permitted: TokenPermissions[];
|
20
|
+
spender: string;
|
21
|
+
nonce: BigNumberish;
|
22
|
+
deadline: BigNumberish;
|
23
|
+
}
|
24
|
+
export declare type PermitTransferFromData = {
|
25
|
+
domain: TypedDataDomain;
|
26
|
+
types: Record<string, TypedDataField[]>;
|
27
|
+
values: PermitTransferFrom;
|
28
|
+
};
|
29
|
+
export declare type PermitBatchTransferFromData = {
|
30
|
+
domain: TypedDataDomain;
|
31
|
+
types: Record<string, TypedDataField[]>;
|
32
|
+
values: PermitBatchTransferFrom;
|
33
|
+
};
|
34
|
+
export declare abstract class SignatureTransfer {
|
35
|
+
/**
|
36
|
+
* Cannot be constructed.
|
37
|
+
*/
|
38
|
+
private constructor();
|
39
|
+
static getPermitData(permit: PermitTransferFrom | PermitBatchTransferFrom, permit2Address: string, chainId: number, witness?: Witness): PermitTransferFromData | PermitBatchTransferFromData;
|
40
|
+
static hash(permit: PermitTransferFrom | PermitBatchTransferFrom, permit2Address: string, chainId: number, witness?: Witness): string;
|
41
|
+
}
|
package/package.json
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
{
|
2
|
+
"name": "@huuduynvc/permit2-sdk",
|
3
|
+
"description": "An sdk for interacting with permit2.",
|
4
|
+
"version": "1.3.1",
|
5
|
+
"repository": "https://github.com/matthew-dex/permit2-sdk.git",
|
6
|
+
"keywords": [
|
7
|
+
"uniswap",
|
8
|
+
"ethereum"
|
9
|
+
],
|
10
|
+
"license": "MIT",
|
11
|
+
"main": "dist/index.js",
|
12
|
+
"typings": "dist/index.d.ts",
|
13
|
+
"files": [
|
14
|
+
"dist"
|
15
|
+
],
|
16
|
+
"scripts": {
|
17
|
+
"build": "tsdx build",
|
18
|
+
"interop": "yarn node writeInterop.js",
|
19
|
+
"lint": "prettier --check src/",
|
20
|
+
"start": "tsdx watch",
|
21
|
+
"test": "tsdx test --testPathIgnorePatterns=/permit2/"
|
22
|
+
},
|
23
|
+
"dependencies": {
|
24
|
+
"ethers": "^5.7.0",
|
25
|
+
"tiny-invariant": "^1.1.0"
|
26
|
+
},
|
27
|
+
"devDependencies": {
|
28
|
+
"@types/jest": "^24.0.25",
|
29
|
+
"prettier": "^2.4.1",
|
30
|
+
"tsdx": "^0.14.1"
|
31
|
+
},
|
32
|
+
"prettier": {
|
33
|
+
"printWidth": 120,
|
34
|
+
"semi": false,
|
35
|
+
"singleQuote": true
|
36
|
+
},
|
37
|
+
"publishConfig": {
|
38
|
+
"access": "public"
|
39
|
+
}
|
40
|
+
}
|