UNPKG

@indigo-labs/dexter

Version:

Customizable Typescript SDK for interacting with Cardano DEXs

59 lines (58 loc) 2.15 kB
import { C, fromHex, Lucid, toHex, Utils } from 'lucid-cardano'; import { encoder } from 'js-encoding-utils'; export const lucidUtils = new Utils(new Lucid()); export function tokensMatch(tokenA, tokenB) { const tokenAId = tokenA === 'lovelace' ? 'lovelace' : tokenA.identifier(); const tokenBId = tokenB === 'lovelace' ? 'lovelace' : tokenB.identifier(); return tokenAId === tokenBId; } export function correspondingReserves(liquidityPool, token) { return tokensMatch(token, liquidityPool.assetA) ? [liquidityPool.reserveA, liquidityPool.reserveB] : [liquidityPool.reserveB, liquidityPool.reserveA]; } export function appendSlash(value) { if (!value) return ''; if (value.endsWith('/')) return; return `${value}/`; } /** * Modified version from lucid */ export function datumJsonToCbor(json) { const convert = (json) => { if (!isNaN(json.int)) { return C.PlutusData.new_integer(C.BigInt.from_str(json.int.toString())); } else if (json.bytes || !isNaN(Number(json.bytes))) { return C.PlutusData.new_bytes(fromHex(json.bytes)); } else if (json.map) { const l = C.PlutusList.new(); json.forEach((v) => { l.add(convert(v)); }); return C.PlutusData.new_list(l); } else if (json.list) { const l = C.PlutusList.new(); json.list.forEach((v) => { l.add(convert(v)); }); return C.PlutusData.new_list(l); } else if (!isNaN(json.constructor)) { const l = C.PlutusList.new(); json.fields.forEach((v) => { l.add(convert(v)); }); return C.PlutusData.new_constr_plutus_data(C.ConstrPlutusData.new(C.BigNum.from_str(json.constructor.toString()), l)); } throw new Error("Unsupported type"); }; return toHex(convert(json).to_bytes()); } export const bytesToHex = (bytes) => encoder.arrayBufferToHexString(bytes); export const hexToBytes = (hex) => encoder.hexStringToArrayBuffer(hex);