@@ -538,14 +538,24 @@ export async function removeCommitments(flags: CCFlags) {
538538export async function collateralWithdraw (
539539 flags : CCFlags & {
540540 [ FINISH_COMMITMENT_FLAG_NAME ] ?: boolean ;
541+ force ?: boolean ;
541542 } ,
542543) {
544+ const isStatusAllowed : ( status : CapacityCommitmentStatusString ) => boolean =
545+ flags . force === true
546+ ? ( status ) => {
547+ return (
548+ status === "Completed" || status === "Failed" || status === "Active"
549+ ) ;
550+ }
551+ : ( status ) => {
552+ return status === "Completed" || status === "Failed" ;
553+ } ;
554+
543555 const [ invalidCommitments , commitments ] = splitErrorsAndResults (
544556 await getCommitmentsGroupedByStatus ( flags ) ,
545557 ( c ) => {
546- return c . status === "Completed" || c . status === "Failed"
547- ? { result : c }
548- : { error : c } ;
558+ return isStatusAllowed ( c . status ) ? { result : c } : { error : c } ;
549559 } ,
550560 ) ;
551561
@@ -570,52 +580,6 @@ export async function collateralWithdraw(
570580 } ) ) {
571581 const { ccId, name : peerName } = commitment ;
572582
573- // TODO: improve how we get this info
574- const [ unitIds , isExitedStatuses ] =
575- await contracts . diamond . getUnitExitStatuses ( ccId ) ;
576-
577- // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
578- const computeUnitInfos = ( await multicallRead (
579- unitIds . map ( ( unitId ) : MulticallReadItem => {
580- return {
581- target : contracts . deployment . diamond ,
582- callData : contracts . diamond . interface . encodeFunctionData (
583- "getComputeUnit" ,
584- [ unitId ] ,
585- ) ,
586- decode ( returnData ) {
587- return contracts . diamond . interface . decodeFunctionResult (
588- "getComputeUnit" ,
589- returnData ,
590- ) ;
591- } ,
592- } ;
593- } ) ,
594- ) ) as (
595- | Awaited < ReturnType < typeof contracts . diamond . getComputeUnit > >
596- | undefined
597- ) [ ] ;
598-
599- const units = unitIds . map ( ( unitId , i ) => {
600- return {
601- unitId,
602- unitInfo :
603- computeUnitInfos [ i ] ??
604- ( ( ) => {
605- throw new Error (
606- `Unreachable. Unit ${ unitId } not found after running getComputeUnit` ,
607- ) ;
608- } ) ( ) ,
609- isExited :
610- isExitedStatuses [ i ] ??
611- ( ( ) => {
612- throw new Error (
613- `Unreachable. No exit status returned from getUnitExitStatuses for unit ${ unitId } ` ,
614- ) ;
615- } ) ( ) ,
616- } ;
617- } ) ;
618-
619583 await sign ( {
620584 title : `withdraw collateral from: ${ ccId } ` ,
621585 method : contracts . diamond . withdrawCollateral ,
@@ -632,28 +596,9 @@ export async function collateralWithdraw(
632596 continue ;
633597 }
634598
635- const [ firstNotExitedUnit , ...restNotExitedUnits ] = units . filter (
636- ( { isExited } ) => {
637- return ! isExited ;
638- } ,
639- ) ;
640-
641599 await signBatch ( {
642- title : `${ firstNotExitedUnit === undefined ? "Finish" : "Remove compute units from capacity commitments and finish" } commitment ${ peerName === undefined ? ccId : `for ${ peerName } (${ ccId } )` } ${ ccId } ` ,
643- populatedTxs :
644- firstNotExitedUnit === undefined
645- ? [ populateTx ( contracts . diamond . finishCommitment , ccId ) ]
646- : [
647- populateTx ( contracts . diamond . removeCUFromCC , ccId , [
648- firstNotExitedUnit . unitId ,
649- ] ) ,
650- ...restNotExitedUnits . map ( ( { unitId } ) => {
651- return populateTx ( contracts . diamond . removeCUFromCC , ccId , [
652- unitId ,
653- ] ) ;
654- } ) ,
655- populateTx ( contracts . diamond . finishCommitment , ccId ) ,
656- ] ,
600+ title : `Finish commitment ${ peerName === undefined ? ccId : `for ${ peerName } (${ ccId } )` } ${ ccId } ` ,
601+ populatedTxs : [ populateTx ( contracts . diamond . finishCommitment , ccId ) ] ,
657602 } ) ;
658603 }
659604}
0 commit comments