Brord icon

Untitled

Brord | PRO | 10/12/18 07:37:28 PM UTC | 0 ⭐ | 487 👁️ | Never ⏰ | []
JavaScript |

2.93 KB

|

None

|

0 👍

/

0 👎

export const promoteTransaction = (bundleHash, accountName, powFn) => (dispatch, getState) => {
    dispatch(promoteTransactionRequest(bundleHash));
 
    const remotePoW = getRemotePoWFromState(getState());
 
    if (!remotePoW) {
        dispatch(
            generateAlert(
                'info',
                i18next.t('global:promotingTransaction'),
                i18next.t('global:deviceMayBecomeUnresponsive'),
            ),
        );
    }
 
    let accountState = {};
 
    try {
        accountState = await syncAccount()(selectedAccountStateFactory(accountName)(getState()));
        dispatch(syncAccountBeforeManualPromotion(accountState));
 
        const transaction = accountState.transfers[bundleHash];
 
        if (transaction.persistence) {
            throw new Error(Errors.TRANSACTION_ALREADY_CONFIRMED);
        }
 
        let isValid = await isStillAValidTransaction()(transaction, accountState.addresses);
        if (!isValid) {
            throw new Error(Errors.BUNDLE_NO_LONGER_VALID);
        }
 
        const tailTransactions = accountState.transfers[bundleHash].tailTransactions;
 
        let consistentTail = await findPromotableTail()(tailTransactions, 0);
        let hash = await dispatch(
            forceTransactionPromotion(
                accountName,
                consistentTail,
                accountState.transfers[bundleHash].tailTransactions,
                true,
                // If proof of work configuration is set to remote, pass proof of work function as null
                remotePoW ? null : powFn,
            ),
        );
 
        dispatch(
            generateAlert(
                'success',
                i18next.t('global:promoted'),
                i18next.t('global:promotedExplanation', { hash }),
            ),
        );
 
        return dispatch(promoteTransactionSuccess());
    } catch(err) {
        if (err.message === Errors.BUNDLE_NO_LONGER_VALID) {
            dispatch(generateAlert('error', i18next.t('global:promotionError'), i18next.t('global:noLongerValid')));
        } else if (err.message.includes(Errors.ATTACH_TO_TANGLE_UNAVAILABLE)) {
            dispatch(
                generateAlert(
                    'error',
                    i18next.t('global:attachToTangleUnavailable'),
                    i18next.t('global:attachToTangleUnavailableExplanationShort'),
                    10000,
                ),
            );
        } else if (err.message === Errors.TRANSACTION_ALREADY_CONFIRMED) {
            dispatch(
                generateAlert(
                    'success',
                    i18next.t('global:transactionAlreadyConfirmed'),
                    i18next.t('global:transactionAlreadyConfirmedExplanation'),
                ),
            );
        } else {
            dispatch(generatePromotionErrorAlert(err));
        }
 
        return dispatch(promoteTransactionError());
    }
};

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎