@catalabs/catalyst-sdk
Version:
Catalyst AMM SDK
91 lines • 3.56 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SignatureTransfer = void 0;
const ethers_1 = require("ethers");
const tiny_invariant_1 = __importDefault(require("tiny-invariant"));
const constants_1 = require("../constants");
const utils_1 = require("../utils");
function permitTransferFromWithWitnessType(witness) {
return {
PermitWitnessTransferFrom: [
{ name: 'permitted', type: 'TokenPermissions' },
{ name: 'spender', type: 'address' },
{ name: 'nonce', type: 'uint256' },
{ name: 'deadline', type: 'uint256' },
{ name: 'witness', type: witness.witnessTypeName },
],
TokenPermissions: constants_1.TOKEN_PERMISSIONS,
...witness.witnessType,
};
}
function permitBatchTransferFromWithWitnessType(witness) {
return {
PermitBatchWitnessTransferFrom: [
{ name: 'permitted', type: 'TokenPermissions[]' },
{ name: 'spender', type: 'address' },
{ name: 'nonce', type: 'uint256' },
{ name: 'deadline', type: 'uint256' },
{ name: 'witness', type: witness.witnessTypeName },
],
TokenPermissions: constants_1.TOKEN_PERMISSIONS,
...witness.witnessType,
};
}
function isPermitTransferFrom(permit) {
return !Array.isArray(permit.permitted);
}
class SignatureTransfer {
constructor() { }
static getPermitData({ permit, permit2Address, chainId, witness, }) {
(0, tiny_invariant_1.default)(constants_1.MaxSigDeadline >= permit.deadline, 'SIG_DEADLINE_OUT_OF_RANGE');
(0, tiny_invariant_1.default)(constants_1.MaxUnorderedNonce >= permit.nonce, 'NONCE_OUT_OF_RANGE');
const domain = (0, utils_1.getPermit2Domain)(permit2Address, chainId);
if (isPermitTransferFrom(permit)) {
validateTokenPermissions(permit.permitted);
const types = witness
? permitTransferFromWithWitnessType(witness)
: constants_1.PERMIT_TRANSFER_FROM_TYPES;
const values = witness
?
Object.assign(permit, { witness: witness.witness })
: permit;
return {
domain,
types,
values,
};
}
else {
permit.permitted.forEach(validateTokenPermissions);
const types = witness
? permitBatchTransferFromWithWitnessType(witness)
: constants_1.PERMIT_BATCH_TRANSFER_FROM_TYPES;
const values = witness
?
Object.assign(permit, { witness: witness.witness })
: permit;
return {
domain,
types,
values,
};
}
}
static hash(permit, permit2Address, chainId, witness) {
const { domain, types, values } = SignatureTransfer.getPermitData({
permit,
permit2Address,
chainId,
witness,
});
return ethers_1.TypedDataEncoder.hash(domain, types, values);
}
}
exports.SignatureTransfer = SignatureTransfer;
function validateTokenPermissions(permissions) {
(0, tiny_invariant_1.default)(constants_1.MaxSignatureTransferAmount >= permissions.amount, 'AMOUNT_OUT_OF_RANGE');
}
//# sourceMappingURL=SignatureTransfer.lib.js.map