UNPKG

@indigo-labs/indigo-sdk

Version:

Indigo SDK for interacting with Indigo endpoints via lucid-evolution

233 lines (220 loc) 6.15 kB
import { fromText, LucidEvolution, ScriptHash, toHex, toText, } from '@lucid-evolution/lucid'; import { createScriptAddress } from '../../src/utils/lucid-utils'; import { fromSystemParamsAsset, matchSingle, SystemParams } from '../../src'; import { option as O, array as A, function as F } from 'fp-ts'; import { AssetClass, assetClassToUnit, isSameAssetClass, } from '@3rd-eye-labs/cardano-offchain-common'; import { CollateralAssetOutput, IAssetOutput, parseCollateralAssetDatum, parseIAssetDatum, } from '../../src/contracts/iasset/types'; import { LucidContext } from '../test-helpers'; // TODO: replace with the new variant defined below export async function findIAsset( lucid: LucidEvolution, iassetScriptHash: ScriptHash, iassetNft: AssetClass, // Ascii encoded iassetName: string, ): Promise<IAssetOutput> { const iassetUtxos = await lucid.utxosAtWithUnit( createScriptAddress(lucid.config().network!, iassetScriptHash), assetClassToUnit(iassetNft), ); return matchSingle( F.pipe( iassetUtxos.map((utxo) => F.pipe( O.fromNullable(utxo.datum), O.flatMap(parseIAssetDatum), O.flatMap((datum) => { if (toHex(datum.assetName) === fromText(iassetName)) { return O.some({ utxo, datum: datum }); } else { return O.none; } }), ), ), A.compact, ), (res) => new Error('Expected a single IAsset UTXO.: ' + JSON.stringify(res)), ); } export async function findIAssetNew( context: LucidContext, sysParams: SystemParams, // Ascii encoded iassetName: string, ): Promise<IAssetOutput> { const iassetUtxos = await context.lucid.utxosAtWithUnit( createScriptAddress( context.lucid.config().network!, sysParams.validatorHashes.iassetHash, ), assetClassToUnit( fromSystemParamsAsset(sysParams.cdpParams.iAssetAuthToken), ), ); return matchSingle( F.pipe( iassetUtxos.map((utxo) => F.pipe( O.fromNullable(utxo.datum), O.flatMap(parseIAssetDatum), O.flatMap((datum) => { if (toHex(datum.assetName) === fromText(iassetName)) { return O.some({ utxo, datum: datum }); } else { return O.none; } }), ), ), A.compact, ), (res) => new Error('Expected a single IAsset UTXO.: ' + JSON.stringify(res)), ); } export async function findAllIAssets( lucid: LucidEvolution, iassetScriptHash: ScriptHash, iassetNft: AssetClass, ): Promise<IAssetOutput[]> { const iassetUtxos = await lucid.utxosAtWithUnit( createScriptAddress(lucid.config().network!, iassetScriptHash), assetClassToUnit(iassetNft), ); return F.pipe( iassetUtxos.map((utxo) => F.pipe( O.fromNullable(utxo.datum), O.flatMap(parseIAssetDatum), O.map((datum) => ({ utxo, datum: datum })), ), ), A.compact, ); } // TODO: replace by the new variant defined below export async function findCollateralAsset( lucid: LucidEvolution, sysParams: SystemParams, collateralAssetNft: AssetClass, // Ascii encoded iassetName: string, collateralAsset: AssetClass, ): Promise<CollateralAssetOutput> { const collateralAssetUtxos = await lucid.utxosAtWithUnit( createScriptAddress( lucid.config().network!, sysParams.validatorHashes.iassetHash, ), assetClassToUnit(collateralAssetNft), ); return matchSingle( F.pipe( collateralAssetUtxos.map((utxo) => F.pipe( O.fromNullable(utxo.datum), O.flatMap(parseCollateralAssetDatum), O.flatMap((datum) => { if ( isSameAssetClass(datum.collateralAsset, collateralAsset) && fromText(iassetName) === toHex(datum.iasset) ) { return O.some({ utxo, datum: datum }); } else { return O.none; } }), ), ), A.compact, ), (res) => new Error( 'Expected a single Collateral Asset UTXO.: ' + JSON.stringify(res), ), ); } export async function findCollateralAssetNew( context: LucidContext, sysParams: SystemParams, // Ascii encoded iassetName: string, collateralAsset: AssetClass, ): Promise<CollateralAssetOutput> { const collateralAssetUtxos = await context.lucid.utxosAtWithUnit( createScriptAddress( context.lucid.config().network!, sysParams.validatorHashes.iassetHash, ), assetClassToUnit( fromSystemParamsAsset(sysParams.cdpParams.collateralAssetAuthToken), ), ); return matchSingle( F.pipe( collateralAssetUtxos.map((utxo) => F.pipe( O.fromNullable(utxo.datum), O.flatMap(parseCollateralAssetDatum), O.flatMap((datum) => { if ( isSameAssetClass(datum.collateralAsset, collateralAsset) && fromText(iassetName) === toHex(datum.iasset) ) { return O.some({ utxo, datum: datum }); } else { return O.none; } }), ), ), A.compact, ), (res) => new Error( 'Expected a single Collateral Asset UTXO.: ' + JSON.stringify(res), ), ); } export async function findAllCollateralAssetsOfIAsset( lucid: LucidEvolution, iassetScriptHash: ScriptHash, collateralAssetNft: AssetClass, iasset: Uint8Array<ArrayBufferLike>, ): Promise<CollateralAssetOutput[]> { const collateralUtxos = await lucid.utxosAtWithUnit( createScriptAddress(lucid.config().network!, iassetScriptHash), assetClassToUnit(collateralAssetNft), ); return F.pipe( collateralUtxos.map((utxo) => F.pipe( O.fromNullable(utxo.datum), O.flatMap(parseCollateralAssetDatum), O.filter( (collateralAsset) => toText(toHex(collateralAsset.iasset)) === toText(toHex(iasset)), ), O.map((datum) => ({ utxo, datum: datum })), ), ), A.compact, ); }