UNPKG

biconomy-hyphen

Version:

Hyphen SDK to enable instant and seamless cross-chain deposits & withdrawals

69 lines (68 loc) 2.93 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getSignatureParameters = exports.getMetaTxnCompatibleTokenData = exports.getERC20ApproveDataToSign = void 0; const ethers_1 = require("ethers"); const { config } = require('../config'); const getERC20ApproveDataToSign = (data) => __awaiter(void 0, void 0, void 0, function* () { const contract = data.contract; const contractInterface = new ethers_1.ethers.utils.Interface(JSON.stringify(data.abi)); const userAddress = data.userAddress; const nonce = yield (contract.getNonce ? contract.getNonce(userAddress) : contract.nonces(userAddress)); const functionSignature = contractInterface.encodeFunctionData("approve", [data.spender, data.amount]); const message = { nonce: parseInt(nonce, 10), from: userAddress, functionSignature }; const domainData = { name: data.name, version: data.version, verifyingContract: data.address, salt: data.salt }; const dataToSign = JSON.stringify({ types: { EIP712Domain: data.domainType, MetaTransaction: data.metaTransactionType }, domain: domainData, primaryType: "MetaTransaction", message }); return dataToSign; }); exports.getERC20ApproveDataToSign = getERC20ApproveDataToSign; const getMetaTxnCompatibleTokenData = (adddress, chainId) => { let data; if (adddress && chainId !== undefined) { data = config.metaTxnCompatibleTokenData[chainId][adddress.toLowerCase()]; } return data; }; exports.getMetaTxnCompatibleTokenData = getMetaTxnCompatibleTokenData; const getSignatureParameters = (signature) => { if (!ethers_1.ethers.utils.isHexString(signature)) { throw new Error('Given value "'.concat(signature, '" is not a valid hex string.')); } const r = signature.slice(0, 66); const s = "0x".concat(signature.slice(66, 130)); const vString = "0x".concat(signature.slice(130, 132)); let v = ethers_1.ethers.BigNumber.from(vString).toNumber(); if (![27, 28].includes(v)) v += 27; return { r, s, v }; }; exports.getSignatureParameters = getSignatureParameters;