@indigo-labs/indigo-sdk
Version:
Indigo SDK for interacting with Indigo endpoints via lucid-evolution
51 lines (46 loc) • 1.52 kB
text/typescript
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),
);
}