export interface ProofItem { property : Property ; witness : { } ; } export type Proof = ProofItem [ ] ; export interface Property { decider : Decider ; input : { } ; witness ? : any ; } export type PropertyFactory = ( input : any ) => Property ; export type WitnessFactory = ( input : any ) => any ; export interface ImplicationProofItem { implication : Property ; implicationWitness : any ; } export interface Decision { outcome : boolean ; justification : ImplicationProofItem [ ] ; } /**
 * Defines the Decider interface that implementations capable of making decisions
 * on the provided input according to the logic of the specific implementation.
 *
 * For example: A PreimageExistsDecider would be able to make decisions on whether
 * or not a hash preimage has been stored in its database.
 */ export interface Decider { param input param noCache returns throws decide ( input , noCache ? ) : Promise < Decision > ; }