Skip to content

Commit

Permalink
fix: provider and signer initialization in contract hooks (#1925)
Browse files Browse the repository at this point in the history
  • Loading branch information
therealemjy authored Dec 8, 2023
1 parent 4e5c7fc commit e878864
Show file tree
Hide file tree
Showing 7 changed files with 53 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { useGetChainMetadata } from 'hooks/useGetChainMetadata';
import { getJumpRateModelContract, getJumpRateModelV2Contract } from 'packages/contracts';
import { useChainId, useProvider } from 'packages/wallet';
import { Asset, ChainId, VToken } from 'types';
import { callOrThrow } from 'utilities';

export type UseGetVTokenApySimulationsQueryKey = [
FunctionKey.GET_V_TOKEN_APY_SIMULATIONS,
Expand Down Expand Up @@ -60,12 +61,13 @@ const useGetVTokenApySimulations = (
return useQuery(
[FunctionKey.GET_V_TOKEN_APY_SIMULATIONS, { vTokenAddress: vToken.address, chainId }],
() =>
getVTokenApySimulations({
interestRateModelContract: interestRateModelContract!, // Checked through enabled option
asset: asset!, // Checked through enabled option
isIsolatedPoolMarket,
blocksPerDay,
}),
callOrThrow({ interestRateModelContract, asset }, params =>
getVTokenApySimulations({
...params,
isIsolatedPoolMarket,
blocksPerDay,
}),
),
{
...options,
enabled:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,23 @@
exports[`generateGetters > calls writeFile with the right arguments 1`] = `
[
{
"content": "/* Automatically generated file, do not update manually */
import type { Provider } from '@ethersproject/abstract-provider';
"content": "import type { Provider } from '@ethersproject/abstract-provider';
import { Contract, Signer } from 'ethers';
import abi from 'packages/contracts/generated/infos/abis/PoolLens.json';
import { PoolLens } from 'packages/contracts/generated/infos/contractTypes';
import { useMemo } from 'react';
import { ChainId } from 'types';
import abi from 'packages/contracts/generated/infos/abis/PoolLens.json';
import { PoolLens } from 'packages/contracts/generated/infos/contractTypes';
import { getUniqueContractAddress } from 'packages/contracts/utilities/getUniqueContractAddress';
import { useChainId, useProvider, useSigner } from 'packages/wallet';
import { ChainId } from 'types';
interface GetPoolLensContractAddressInput {
chainId: ChainId;
}
export const getPoolLensContractAddress = ({ chainId }: GetPoolLensContractAddressInput) =>
export const getPoolLensContractAddress = ({
chainId,
}: GetPoolLensContractAddressInput) =>
getUniqueContractAddress({ name: 'PoolLens', chainId });
export const useGetPoolLensContractAddress = () => {
Expand All @@ -38,7 +39,10 @@ interface GetPoolLensContractInput {
signerOrProvider: Signer | Provider;
}
export const getPoolLensContract = ({ chainId, signerOrProvider }: GetPoolLensContractInput) => {
export const getPoolLensContract = ({
chainId,
signerOrProvider,
}: GetPoolLensContractInput) => {
const address = getPoolLensContractAddress({ chainId });
return address ? (new Contract(address, abi, signerOrProvider) as PoolLens) : undefined;
};
Expand Down Expand Up @@ -78,22 +82,19 @@ exports[`generateGetters > calls writeFile with the right arguments 2`] = `
{
"content": "import type { Provider } from '@ethersproject/abstract-provider';
import { Contract, Signer } from 'ethers';
import abi from 'packages/contracts/generated/infos/abis/IsolatedPoolComptroller.json';
import { IsolatedPoolComptroller } from 'packages/contracts/generated/infos/contractTypes';
import { useMemo } from 'react';
import { ChainId } from 'types';
import abi from 'packages/contracts/generated/infos/abis/IsolatedPoolComptroller.json';
import { IsolatedPoolComptroller } from 'packages/contracts/generated/infos/contractTypes';
import { useProvider, useSigner } from 'packages/wallet';
import { ChainId } from 'types';
interface GetIsolatedPoolComptrollerContractInput {
address: string;
signerOrProvider: Signer | Provider;
}
export const getIsolatedPoolComptrollerContract = ({
signerOrProvider,
address,
}: GetIsolatedPoolComptrollerContractInput) =>
export const getIsolatedPoolComptrollerContract = ({ signerOrProvider, address }: GetIsolatedPoolComptrollerContractInput) =>
new Contract(address, abi, signerOrProvider) as IsolatedPoolComptroller;
interface UseGetIsolatedPoolComptrollerContractInput {
Expand Down Expand Up @@ -133,13 +134,13 @@ exports[`generateGetters > calls writeFile with the right arguments 3`] = `
{
"content": "import type { Provider } from '@ethersproject/abstract-provider';
import { Contract, Signer } from 'ethers';
import { useMemo } from 'react';
import abi from 'packages/contracts/generated/infos/abis/SwapRouter.json';
import addresses from 'packages/contracts/generated/infos/addresses';
import { SwapRouter } from 'packages/contracts/generated/infos/contractTypes';
import { useMemo } from 'react';
import { ChainId } from 'types';
import { useChainId, useProvider, useSigner } from 'packages/wallet';
import { ChainId } from 'types';
interface GetSwapRouterContractAddressInput {
comptrollerContractAddress: string;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,18 @@
import type { Provider } from '@ethersproject/abstract-provider';
import { Contract, Signer } from 'ethers';
import abi from 'packages/contracts/generated/infos/abis/{{contractName}}.json';
import { {{contractName}} } from 'packages/contracts/generated/infos/contractTypes';
import { useMemo } from 'react';
import { ChainId } from 'types';

import abi from 'packages/contracts/generated/infos/abis/{{contractName}}.json';
import { {{contractName}} } from 'packages/contracts/generated/infos/contractTypes';
import { useProvider, useSigner } from 'packages/wallet';
import { ChainId } from 'types';

interface Get{{contractName}}ContractInput {
address: string;
signerOrProvider: Signer | Provider;
}

export const get{{contractName}}Contract = ({
signerOrProvider,
address,
}: Get{{contractName}}ContractInput) =>
export const get{{contractName}}Contract = ({ signerOrProvider, address }: Get{{contractName}}ContractInput) =>
new Contract(address, abi, signerOrProvider) as {{contractName}};

interface UseGet{{contractName}}ContractInput {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import type { Provider } from '@ethersproject/abstract-provider';
import { Contract, Signer } from 'ethers';
import { useMemo } from 'react';

import abi from 'packages/contracts/generated/infos/abis/{{contractName}}.json';
import addresses from 'packages/contracts/generated/infos/addresses';
import { {{contractName}} } from 'packages/contracts/generated/infos/contractTypes';
import { useMemo } from 'react';
import { ChainId } from 'types';

import { useChainId, useProvider, useSigner } from 'packages/wallet';
import { ChainId } from 'types';

interface Get{{contractName}}ContractAddressInput {
comptrollerContractAddress: string;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
/* Automatically generated file, do not update manually */
import type { Provider } from '@ethersproject/abstract-provider';
import { Contract, Signer } from 'ethers';
import abi from 'packages/contracts/generated/infos/abis/{{contractName}}.json';
import { {{contractName}} } from 'packages/contracts/generated/infos/contractTypes';
import { useMemo } from 'react';
import { ChainId } from 'types';

import abi from 'packages/contracts/generated/infos/abis/{{contractName}}.json';
import { {{contractName}} } from 'packages/contracts/generated/infos/contractTypes';
import { getUniqueContractAddress } from 'packages/contracts/utilities/getUniqueContractAddress';
import { useChainId, useProvider, useSigner } from 'packages/wallet';
import { ChainId } from 'types';

interface Get{{contractName}}ContractAddressInput {
chainId: ChainId;
}

export const get{{contractName}}ContractAddress = ({ chainId }: Get{{contractName}}ContractAddressInput) =>
export const get{{contractName}}ContractAddress = ({
chainId,
}: Get{{contractName}}ContractAddressInput) =>
getUniqueContractAddress({ name: '{{contractName}}', chainId });

export const useGet{{contractName}}ContractAddress = () => {
Expand All @@ -33,7 +34,10 @@ interface Get{{contractName}}ContractInput {
signerOrProvider: Signer | Provider;
}

export const get{{contractName}}Contract = ({ chainId, signerOrProvider }: Get{{contractName}}ContractInput) => {
export const get{{contractName}}Contract = ({
chainId,
signerOrProvider,
}: Get{{contractName}}ContractInput) => {
const address = get{{contractName}}ContractAddress({ chainId });
return address ? (new Contract(address, abi, signerOrProvider) as {{contractName}}) : undefined;
};
Expand Down
6 changes: 5 additions & 1 deletion src/packages/wallet/hooks/useProvider/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,18 @@ import { usePublicClient } from 'wagmi';

import { ChainId } from 'types';

import { useChainId } from '../useChainId';
import { getProvider } from './getProvider';

export interface UseProviderInput {
chainId?: ChainId;
}

export const useProvider = (input?: UseProviderInput) => {
const publicClient = usePublicClient({ chainId: input?.chainId });
const { chainId: currentChainId } = useChainId();
const chainId = input?.chainId || currentChainId;
const publicClient = usePublicClient({ chainId });

const provider = useMemo(() => getProvider({ publicClient }), [publicClient]);

return { provider };
Expand Down
6 changes: 5 additions & 1 deletion src/packages/wallet/hooks/useSigner/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,18 @@ import { useWalletClient } from 'wagmi';

import { ChainId } from 'types';

import { useChainId } from '../useChainId';
import { getSigner } from './getSigner';

export interface UseSignerInput {
chainId?: ChainId;
}

export const useSigner = (input?: UseSignerInput) => {
const { data: walletClient } = useWalletClient({ chainId: input?.chainId });
const { chainId: currentChainId } = useChainId();
const chainId = input?.chainId || currentChainId;
const { data: walletClient } = useWalletClient({ chainId });

const signer = useMemo(
() => getSigner({ walletClient: walletClient || undefined }),
[walletClient],
Expand Down

0 comments on commit e878864

Please sign in to comment.