UNPKG

@indigo-labs/indigo-sdk

Version:

Indigo SDK for interacting with Indigo endpoints via lucid-evolution

51 lines (46 loc) 1.52 kB
import { LucidEvolution, UTxO } from '@lucid-evolution/lucid'; import { createScriptAddress } from '../../src'; import { option as O, function as F } from 'fp-ts'; import { AssetClass, assetClassToUnit, assetClassValueOf, getRandomElement, matchSingle, } from '@3rd-eye-labs/cardano-offchain-common'; export async function findAllInterestCollectors( lucid: LucidEvolution, interestCollectorScriptHash: string, ): Promise<UTxO[]> { return lucid.utxosAt( createScriptAddress(lucid.config().network!, interestCollectorScriptHash), ); } export async function findAdminInterestCollectors( lucid: LucidEvolution, interestCollectorScriptHash: string, multisigUtxoNft: AssetClass, ): Promise<UTxO> { return matchSingle( await lucid.utxosAtWithUnit( createScriptAddress(lucid.config().network!, interestCollectorScriptHash), assetClassToUnit(multisigUtxoNft), ), (_) => new Error('Expected a single admin interest collector UTXO'), ); } export async function findRandomNonAdminInterestCollector( lucid: LucidEvolution, interestCollectorScriptHash: string, multisigUtxoNft: AssetClass, ): Promise<UTxO> { const allCollectors = ( await findAllInterestCollectors(lucid, interestCollectorScriptHash) ).filter((utxo) => !assetClassValueOf(utxo.assets, multisigUtxoNft)); return F.pipe( O.fromNullable(getRandomElement(allCollectors)), O.match(() => { throw new Error('Expected some non-admin interest collector UTXOs.'); }, F.identity), ); }