UNPKG

@quantara/sdk

Version:

JavaScript/TypeScript SDK for interacting with Quantara Protocol on Neura Testnet

52 lines (51 loc) 2.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.setUiFeeReceiverIsExpress = exports.isValidTwapUiFeeReceiver = exports.decodeTwapUiFeeReceiver = exports.createTwapUiFeeReceiver = exports.generateTwapId = void 0; const viem_1 = require("viem"); const VERSION = "01"; const PREFIX = "0xff0000"; /** * Ui fee receiver structure: * 0-3 (4) bytes (0-7 chars) - PREFIX * 4-15 (12) bytes (8-32 chars) - 12 bytes buffer * 16 (1) byte (33-34 chars) - isExpress flag * 17 (1) byte (35-36 chars) - numberOfParts (hex encoded) * 18-19 (2) bytes (37-40 chars) - twapId * 20 (1) byte (41-42 chars) - VERSION * * Total: 0x + 20 bytes (41 hex characters) */ function generateTwapId() { return Math.floor(Math.random() * 256 * 256) .toString(16) .padStart(4, "0"); } exports.generateTwapId = generateTwapId; function createTwapUiFeeReceiver({ numberOfParts }) { const twapId = generateTwapId(); const numberOfPartsInHex = numberOfParts.toString(16).padStart(2, "0"); const buffer = "00".repeat(12); const isExpressHex = "00"; return `${PREFIX}${buffer}${isExpressHex}${numberOfPartsInHex}${twapId}${VERSION}`; } exports.createTwapUiFeeReceiver = createTwapUiFeeReceiver; function decodeTwapUiFeeReceiver(address) { const byteString = address.slice(2); const twapId = byteString.slice(34, 38); const isExpress = byteString.slice(30, 32) === "01"; if (!isValidTwapUiFeeReceiver(address) || twapId === "0000") { return; } const numberOfParts = parseInt(byteString.slice(32, 34), 16); return { twapId, numberOfParts, isExpress }; } exports.decodeTwapUiFeeReceiver = decodeTwapUiFeeReceiver; function isValidTwapUiFeeReceiver(address) { return (0, viem_1.isAddress)(address) && address.toLowerCase().startsWith(PREFIX.toLowerCase()); } exports.isValidTwapUiFeeReceiver = isValidTwapUiFeeReceiver; function setUiFeeReceiverIsExpress(uiFeeReceiver, isExpress) { const isExpressInHex = isExpress ? "01" : "00"; return `${uiFeeReceiver.slice(0, 16 * 2)}${isExpressInHex}${uiFeeReceiver.slice(17 * 2)}`; } exports.setUiFeeReceiverIsExpress = setUiFeeReceiverIsExpress;