Skip to content

Commit

Permalink
Merge pull request #54 from lidofinance/develop
Browse files Browse the repository at this point in the history
Develop to main
  • Loading branch information
itaven authored Sep 18, 2023
2 parents 83bbf13 + 5052234 commit 99b0c27
Show file tree
Hide file tree
Showing 36 changed files with 1,009 additions and 275 deletions.
18 changes: 9 additions & 9 deletions .github/workflows/ci-preview-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,12 @@ jobs:
SHORT_NAME: ${{ steps.repo.outputs.short_name }}
BRANCH_HASH: ${{ steps.branch.outputs.hash }}

# tests:
# needs: deploy
# if: ${{ github.event.pull_request.draft == false }}
# uses: ./.github/workflows/tests.yml
# secrets: inherit
# with:
# stand_url: ${{ needs.deploy.outputs.stand_url }}
# stand_type: "${{ inputs.inventory || 'testnet' }}"
# on_preview_stand: true
tests:
needs: deploy
if: ${{ github.event.pull_request.draft == false }}
uses: ./.github/workflows/tests.yml
secrets: inherit
with:
stand_url: ${{ needs.deploy.outputs.stand_url }}
stand_type: "${{ inputs.inventory || 'testnet' }}"
on_preview_stand: true
695 changes: 674 additions & 21 deletions LICENSE

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
} from './use-default-values';
import { ClaimFormHelperState, useHelperState } from './use-helper-state';
import { useClaimData } from 'features/withdrawals/contexts/claim-data-context';
import { useTransactionModal } from 'features/withdrawals/contexts/transaction-modal-context';
import { useTransactionModal } from 'shared/transaction-modal';

type ClaimFormDataContextValueType = {
onSubmit: React.FormEventHandler<HTMLFormElement>;
Expand Down
2 changes: 1 addition & 1 deletion features/withdrawals/claim/claim.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { TransactionModalProvider } from 'features/withdrawals/contexts/transaction-modal-context';
import { TransactionModalProvider } from 'shared/transaction-modal/transaction-modal-context';
import { ClaimFaq } from 'features/withdrawals/withdrawals-faq/claim-faq';

import { ClaimForm } from './form';
Expand Down
9 changes: 4 additions & 5 deletions features/withdrawals/claim/tx-modal/tx-claim-modal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,8 @@ import {
TxStageSuccessMultisig,
TxStageSign,
TxStageFail,
TX_STAGE,
} from 'features/withdrawals/shared/tx-stage-modal';
import { useTransactionModal } from 'features/withdrawals/contexts/transaction-modal-context';
import { useTransactionModal, TX_STAGE } from 'shared/transaction-modal';
import {
trackMatomoEvent,
MATOMO_CLICK_EVENTS_TYPES,
Expand All @@ -20,16 +19,16 @@ export const TxClaimModal = () => {
const {
isModalOpen,
txStage,
requestAmount,
amount,
txHash,
errorText,
onRetry,
dispatchModalState,
} = useTransactionModal();

const amountAsString = useMemo(
() => (requestAmount ? formatBalance(requestAmount, 4) : ''),
[requestAmount],
() => (amount ? formatBalance(amount, 4) : ''),
[amount],
);

const successDescription = 'Claiming operation was successful';
Expand Down
9 changes: 4 additions & 5 deletions features/withdrawals/hooks/contract/useClaim.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { useCallback } from 'react';
import { BigNumber } from 'ethers';

import { TX_STAGE } from 'features/withdrawals/shared/tx-stage-modal';
import { useClaimData } from 'features/withdrawals/contexts/claim-data-context';
import { getErrorMessage, runWithTransactionLogger } from 'utils';

Expand All @@ -11,7 +10,7 @@ import invariant from 'tiny-invariant';
import { isContract } from 'utils/isContract';
import { useWeb3 } from 'reef-knot/web3-react';
import { useSDK } from '@lido-sdk/react';
import { useTransactionModal } from 'features/withdrawals/contexts/transaction-modal-context';
import { useTransactionModal, TX_OPERATION } from 'shared/transaction-modal';

export const useClaim = () => {
const { account } = useWeb3();
Expand All @@ -36,9 +35,9 @@ export const useClaim = () => {

dispatchModalState({
type: 'start',
flow: TX_STAGE.SIGN,
requestAmount: ethToClaim,
token: null,
operation: TX_OPERATION.CONTRACT,
amount: ethToClaim,
token: 'ETH',
});

const ids = sortedRequests.map((r) => r.id);
Expand Down
67 changes: 34 additions & 33 deletions features/withdrawals/hooks/contract/useRequest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,14 @@ import {
import { TOKENS, getWithdrawalQueueAddress } from '@lido-sdk/constants';
import { useAccount } from 'wagmi';

import { TX_STAGE } from 'features/withdrawals/shared/tx-stage-modal';
import {
GatherPermitSignatureResult,
useERC20PermitSignature,
} from 'shared/hooks';
import { useIsMultisig } from 'shared/hooks/useIsMultisig';
import { getErrorMessage, runWithTransactionLogger } from 'utils';
import { isContract } from 'utils/isContract';
import { useTransactionModal } from 'features/withdrawals/contexts/transaction-modal-context';
import { useTransactionModal, TX_OPERATION } from 'shared/transaction-modal';
import { useWithdrawals } from 'features/withdrawals/contexts/withdrawals-context';

import { useWithdrawalsContract } from './useWithdrawalsContract';
Expand All @@ -45,7 +44,7 @@ const useWithdrawalRequestMethods = () => {
invariant(signature, 'must have signature');
invariant(contractWeb3, 'must have contractWeb3');

dispatchModalState({ type: 'signing' });
dispatchModalState({ type: 'signing', operation: TX_OPERATION.CONTRACT });

const params = [
requests,
Expand All @@ -59,9 +58,7 @@ const useWithdrawalRequestMethods = () => {
},
] as const;

const feeData = await getFeeData(chainId);
const maxFeePerGas = feeData.maxFeePerGas ?? undefined;
const maxPriorityFeePerGas = feeData.maxPriorityFeePerGas ?? undefined;
const { maxFeePerGas, maxPriorityFeePerGas } = await getFeeData(chainId);
const gasLimit =
await contractWeb3.estimateGas.requestWithdrawalsWithPermit(...params, {
maxFeePerGas,
Expand Down Expand Up @@ -136,10 +133,10 @@ const useWithdrawalRequestMethods = () => {
const callback = () =>
contractWeb3.requestWithdrawalsWstETHWithPermit(...params, txOptions);

dispatchModalState({ type: 'signing' });
dispatchModalState({ type: 'signing', operation: TX_OPERATION.CONTRACT });

const transaction = await runWithTransactionLogger(
'Stake signing',
'Request signing',
callback,
);

Expand All @@ -158,7 +155,7 @@ const useWithdrawalRequestMethods = () => {
invariant(contractWeb3, 'must have contractWeb3');
invariant(providerWeb3, 'must have providerWeb3');

dispatchModalState({ type: 'signing' });
dispatchModalState({ type: 'signing', operation: TX_OPERATION.CONTRACT });
const isMultisig = await isContract(account, contractWeb3.provider);

const params = [requests, account] as const;
Expand All @@ -170,10 +167,9 @@ const useWithdrawalRequestMethods = () => {
);
return providerWeb3?.getSigner().sendUncheckedTransaction(tx);
} else {
const feeData = await getFeeData(chainId);
const maxFeePerGas = feeData.maxFeePerGas ?? undefined;
const maxPriorityFeePerGas =
feeData.maxPriorityFeePerGas ?? undefined;
const { maxFeePerGas, maxPriorityFeePerGas } = await getFeeData(
chainId,
);
const gasLimit = await contractWeb3.estimateGas.requestWithdrawals(
...params,
{
Expand Down Expand Up @@ -213,7 +209,7 @@ const useWithdrawalRequestMethods = () => {
invariant(providerWeb3, 'must have providerWeb3');
const isMultisig = await isContract(account, contractWeb3.provider);

dispatchModalState({ type: 'signing' });
dispatchModalState({ type: 'signing', operation: TX_OPERATION.CONTRACT });

const params = [requests, account] as const;
const callback = async () => {
Expand All @@ -225,10 +221,9 @@ const useWithdrawalRequestMethods = () => {
);
return providerWeb3?.getSigner().sendUncheckedTransaction(tx);
} else {
const feeData = await getFeeData(chainId);
const maxFeePerGas = feeData.maxFeePerGas ?? undefined;
const maxPriorityFeePerGas =
feeData.maxPriorityFeePerGas ?? undefined;
const { maxFeePerGas, maxPriorityFeePerGas } = await getFeeData(
chainId,
);
const gasLimit =
await contractWeb3.estimateGas.requestWithdrawalsWstETH(...params, {
maxFeePerGas,
Expand All @@ -243,7 +238,7 @@ const useWithdrawalRequestMethods = () => {
};

const transaction = await runWithTransactionLogger(
'Stake signing',
'Request signing',
callback,
);

Expand Down Expand Up @@ -293,7 +288,7 @@ export const useWithdrawalRequest = ({
const { connector } = useAccount();
const { account } = useWeb3();
const { isBunker } = useWithdrawals();
const { dispatchModalState } = useTransactionModal();
const { dispatchModalState, dispatchAsyncDialog } = useTransactionModal();
const getRequestMethod = useWithdrawalRequestMethods();
const [isMultisig, isMultisigLoading] = useIsMultisig();

Expand Down Expand Up @@ -345,33 +340,38 @@ export const useWithdrawalRequest = ({
);
invariant(amount, 'cannot submit empty amount');
if (isBunker) {
const bunkerDialogResult = await new Promise<boolean>((resolve) => {
dispatchModalState({
type: 'bunker',
onCloseBunker: () => resolve(false),
onOkBunker: () => resolve(true),
});
});
const { ok: bunkerDialogResult } = await dispatchAsyncDialog(
'bunker',
);
if (!bunkerDialogResult) return { success: false };
}
// get right method
const method = getRequestMethod(isApprovalFlow, token);
// start flow
dispatchModalState({
type: 'start',
flow: isApprovalFlow
operation: isApprovalFlow
? needsApprove
? TX_STAGE.APPROVE
: TX_STAGE.SIGN
: TX_STAGE.PERMIT,
requestAmount: amount,
? TX_OPERATION.APPROVE
: TX_OPERATION.CONTRACT
: TX_OPERATION.PERMIT,
amount,
token,
});

// each flow switches needed signing stages
if (isApprovalFlow) {
if (needsApprove) {
await approve();
await approve({
onTxSent: (tx) => {
if (!isMultisig)
dispatchModalState({
type: 'block',
txHash: typeof tx === 'string' ? tx : tx.hash,
operation: TX_OPERATION.APPROVE,
});
},
});
// multisig does not move to next tx
if (!isMultisig) await method({ requests });
} else {
Expand All @@ -395,6 +395,7 @@ export const useWithdrawalRequest = ({
},
[
approve,
dispatchAsyncDialog,
dispatchModalState,
gatherPermitSignature,
getRequestMethod,
Expand Down
1 change: 0 additions & 1 deletion features/withdrawals/hooks/useWithdrawTxPrice.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ export const useRequestTxPrice = ({
}: UseRequestTxPriceOptions) => {
const { chainId } = useSDK();
const { contractRpc } = useWithdrawalsContract();
// TODO add fallback for approval flow
const fallback =
token === 'STETH'
? isApprovalFlow
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
RequestFormValidationContextType,
ValidationResults,
} from './types';
import { useTransactionModal } from 'features/withdrawals/contexts/transaction-modal-context';
import { useTransactionModal } from 'shared/transaction-modal';

//
// data context
Expand Down
2 changes: 1 addition & 1 deletion features/withdrawals/request/request.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { RequestFaq } from '../withdrawals-faq/request-faq';
import { RequestForm } from './form';
import { TxRequestModal } from './tx-modal';
import { RequestWallet } from './wallet';
import { TransactionModalProvider } from '../contexts/transaction-modal-context';
import { TransactionModalProvider } from 'shared/transaction-modal';

export const Request = () => {
return (
Expand Down
Loading

0 comments on commit 99b0c27

Please sign in to comment.