@indigo-labs/indigo-sdk
Version:
Indigo SDK for interacting with Indigo endpoints via lucid-evolution
45 lines (39 loc) • 1.29 kB
text/typescript
import { option as O, function as F } from 'fp-ts';
import { TSchema, Data } from '@evolution-sdk/evolution';
import {
ProposalContentSchema,
TreasuryWithdrawalSchema,
} from '../gov/types-new';
import { DEFAULT_SCHEMA_OPTIONS } from '../../types/evolution-schema-options';
const ExecuteDatumSchema = TSchema.Struct({
id: TSchema.Integer,
content: ProposalContentSchema,
passedTime: TSchema.Integer,
votingEndTime: TSchema.Integer,
protocolVersion: TSchema.Integer,
/// Value proposed to be withdrawn from the treasury as part of the proposal.
treasuryWithdrawal: TSchema.NullOr(TreasuryWithdrawalSchema),
});
export type ExecuteDatum = typeof ExecuteDatumSchema.Type;
export function serialiseExecuteDatum(d: ExecuteDatum): string {
return Data.withSchema(ExecuteDatumSchema).toCBORHex(d);
}
export function parseExecuteDatum(datum: string): O.Option<ExecuteDatum> {
try {
return O.some(
Data.withSchema(ExecuteDatumSchema, DEFAULT_SCHEMA_OPTIONS).fromCBORHex(
datum,
),
);
} catch (_) {
return O.none;
}
}
export function parseExecuteDatumOrThrow(datum: string): ExecuteDatum {
return F.pipe(
parseExecuteDatum(datum),
O.match(() => {
throw new Error('Expected an Execute datum.');
}, F.identity),
);
}