biconomy-hyphen
Version:
Hyphen SDK to enable instant and seamless cross-chain deposits & withdrawals
69 lines (68 loc) • 2.93 kB
JavaScript
;
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;