async fn try_apply_fragment(
    fragment: Fragment,
    ledger: ApplyBlockLedger,
    soft_deadline_future: Shared<Receiver<()>>,
    hard_deadline_future: Shared<Receiver<()>>,
    space_left: u32
) -> Result<NewLedgerState, ApplyFragmentError>