Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: canceled transfers shown in transfer log #166

Merged
merged 2 commits into from
Apr 25, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .github/workflows/push_frontend_images.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ jobs:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}


deploy_testnet:
if: github.event.base_ref == 'refs/heads/master'
needs: [push-frontend-image]
Expand Down
36 changes: 19 additions & 17 deletions src/hooks/useTransferToL1.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ export const useTransferToL1 = () => {
l2hash
});
} catch (ex) {
logger.error(ex.message, {ex});
logger.error(ex.message, ex);
trackError(ex);
handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, ex));
}
Expand All @@ -110,7 +110,7 @@ export const useCompleteTransferToL1 = () => {
const progressOptions = useTransferProgress();
const getL1Token = useL1Token();
const getL1TokenBridgeContract = useL1TokenBridgeContract();
const addWithdrawalListener = useWithdrawalListener();
const {addListener, removeListener} = useWithdrawalListener();
const [trackInitiated, trackSuccess, trackError, trackReject] = useCompleteTransferToL1Tracking();

return useCallback(
Expand All @@ -136,7 +136,9 @@ export const useCompleteTransferToL1 = () => {
};

const onTransactionHash = (error, transactionHash) => {
if (!error) {
if (error) {
onError(error);
} else {
logger.log('Tx signed', {transactionHash});
handleProgress(
progressOptions.withdraw(
Expand All @@ -145,26 +147,27 @@ export const useCompleteTransferToL1 = () => {
stepOf(TransferStep.WITHDRAW, CompleteTransferToL1Steps)
)
);
} else {
trackReject(error);
logger.error(error.message);
handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error));
}
};

const onWithdrawal = (error, event) => {
if (!error) {
if (error) {
onError(error);
} else {
const {transactionHash: l1hash} = event;
logger.log('Done', l1hash);
trackSuccess(l1hash);
handleData({...transfer, l1hash});
} else {
trackError(error);
logger.error(error.message);
handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error));
}
};

const onError = error => {
removeListener();
trackError(error);
logger.error(error?.message, error);
handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error));
};

try {
logger.log('CompleteTransferToL1 called');
handleProgress(
Expand All @@ -173,13 +176,11 @@ export const useCompleteTransferToL1 = () => {
stepOf(TransferStep.CONFIRM_TX, CompleteTransferToL1Steps)
)
);
addWithdrawalListener(onWithdrawal);
addListener(onWithdrawal);
logger.log('Calling withdraw');
await sendWithdrawal();
} catch (ex) {
trackError(ex);
logger.error(ex.message, {ex});
handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, ex));
onError(ex);
}
},
[
Expand All @@ -192,7 +193,8 @@ export const useCompleteTransferToL1 = () => {
handleProgress,
logger,
progressOptions,
addWithdrawalListener
addListener,
removeListener
]
);
};
34 changes: 18 additions & 16 deletions src/hooks/useTransferToL2.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export const useTransferToL2 = () => {
const getTokenContract = useTokenContract();
const getTokenBridgeContract = useTokenBridgeContract();
const progressOptions = useTransferProgress();
const addDepositListener = useDepositListener();
const {addListener, removeListener} = useDepositListener();
const getDepositMessageToL2Event = useDepositMessageToL2Event();
const maxTotalBalance = useMaxTotalBalance();

Expand Down Expand Up @@ -81,20 +81,20 @@ export const useTransferToL2 = () => {
};

const onTransactionHash = (error, transactionHash) => {
if (!error) {
if (error) {
onError(error);
} else {
logger.log('Tx signed', {transactionHash});
handleProgress(
progressOptions.deposit(amount, symbol, stepOf(TransferStep.DEPOSIT, TransferToL2Steps))
);
} else {
trackReject(error);
logger.error(error.message);
handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error));
}
};

const onDeposit = async (error, event) => {
if (!error) {
if (error) {
onError(error);
} else {
const l2MessageEvent = await getDepositMessageToL2Event(event);
if (l2MessageEvent) {
handleData({
Expand All @@ -107,10 +107,6 @@ export const useTransferToL2 = () => {
...extractTransactionsHashFromEvent(l2MessageEvent)
});
}
} else {
trackError(error);
logger.error(error.message);
handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error));
}
};

Expand Down Expand Up @@ -144,6 +140,13 @@ export const useTransferToL2 = () => {
return maxTotalBalance < tokenBridgeBalance + Number(amount);
};

const onError = error => {
removeListener();
trackError(error);
logger.error(error?.message, error);
handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, error));
};

try {
logger.log('TransferToL2 called');
if (await isMaxBalanceExceeded()) {
Expand All @@ -170,18 +173,17 @@ export const useTransferToL2 = () => {
stepOf(TransferStep.CONFIRM_TX, TransferToL2Steps)
)
);
addDepositListener(onDeposit);
addListener(onDeposit);
logger.log('Calling deposit');
await sendDeposit();
} catch (ex) {
trackError(ex);
logger.error(ex.message, {ex});
handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, ex));
onError(ex);
}
},
[
selectedToken,
addDepositListener,
addListener,
removeListener,
l1ChainId,
l2ChainId,
l1Account,
Expand Down
15 changes: 8 additions & 7 deletions src/providers/EventManagerProvider/EventManagerProvider.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ export const EventManagerProvider = ({children}) => {
listeners[eventName].push(callback);
};

const removeListeners = eventName => {
logger.log(`Remove listeners for event ${eventName}.`);
listeners[eventName] = [];
};

const getPastEvents = (contract, eventName, options = {}) => {
logger.log(`Getting ${eventName} past events.`);
return contract.getPastEvents(eventName, {
Expand All @@ -42,12 +47,7 @@ export const EventManagerProvider = ({children}) => {
const emitListeners = (eventName, error, event) => {
logger.log(`Event ${eventName} emitted to listeners.`, event);
listeners[eventName]?.forEach(listener => listener(error, event));
cleanListeners(eventName);
};

const cleanListeners = eventName => {
logger.log(`Clean listeners for event ${eventName}.`);
listeners[eventName] = [];
removeListeners(eventName);
};

const onWithdrawal = (error, event) => {
Expand Down Expand Up @@ -111,7 +111,8 @@ export const EventManagerProvider = ({children}) => {

const value = {
addListener,
getPastEvents
getPastEvents,
removeListeners
};

return <EventManagerContext.Provider value={value}>{children}</EventManagerContext.Provider>;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@ import {createContext} from 'react';

export const EventManagerContext = createContext({
addListener: (eventName, callback) => ({eventName, callback}),
removeListeners: eventName => eventName,
getPastEvents: async (contract, eventName, options) => ({contract, eventName, options})
});
27 changes: 19 additions & 8 deletions src/providers/EventManagerProvider/event-manager-hooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,31 @@ import {EventName} from '../../enums';
import {useStarknetContract} from '../../hooks';
import {EventManagerContext} from './event-manager-context';

export const useEventListener = () => {
return useContext(EventManagerContext);
export const useEventListener = eventName => {
const {addListener, removeListeners} = useContext(EventManagerContext);

const _addListener = useCallback(
callback => addListener(eventName, callback),
[addListener]
);

const _removeListeners = useCallback(
() => removeListeners(eventName),
[removeListeners]
);

return {
addListener: _addListener,
removeListener: _removeListeners
};
};

export const useDepositListener = () => {
const {addListener} = useContext(EventManagerContext);

return useCallback(callback => addListener(EventName.L1.LOG_DEPOSIT, callback), [addListener]);
return useEventListener(EventName.L1.LOG_DEPOSIT);
};

export const useWithdrawalListener = () => {
const {addListener} = useContext(EventManagerContext);

return useCallback(callback => addListener(EventName.L1.LOG_WITHDRAWAL, callback), [addListener]);
return useEventListener(EventName.L1.LOG_WITHDRAWAL);
};

export const useDepositMessageToL2Event = () => {
Expand Down