Skip to content

Commit

Permalink
Merge branch 'develop' into feature/#2533-example-proposal-templates
Browse files Browse the repository at this point in the history
  • Loading branch information
adamgall committed Jan 22, 2025
2 parents 6e825ca + 395661a commit c91c9ce
Show file tree
Hide file tree
Showing 68 changed files with 310 additions and 326 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { useEffect, useState } from 'react';
import { getContract } from 'viem';
import { usePublicClient } from 'wagmi';
import LidoWithdrawalQueueAbi from '../../../assets/abi/LidoWithdrawalQueueAbi';
import useLidoStaking from '../../../hooks/stake/lido/useLidoStaking';
import useNetworkPublicClient from '../../../hooks/useNetworkPublicClient';
import { useCanUserCreateProposal } from '../../../hooks/utils/useCanUserSubmitProposal';
import { useFractal } from '../../../providers/App/AppProvider';
import { useNetworkConfigStore } from '../../../providers/NetworkConfig/useNetworkConfigStore';
Expand All @@ -17,7 +17,7 @@ export default function useTreasuryLidoInteractions() {
const { handleUnstake, handleClaimUnstakedETH } = useLidoStaking();
const { canUserCreateProposal } = useCanUserCreateProposal();
const { staking } = useNetworkConfigStore();
const publicClient = usePublicClient();
const publicClient = useNetworkPublicClient();

// --- Lido Stake button setup ---
const showStakeButton =
Expand Down Expand Up @@ -48,7 +48,7 @@ export default function useTreasuryLidoInteractions() {

useEffect(() => {
const getLidoClaimableStatus = async () => {
if (!staking.lido?.withdrawalQueueContractAddress || !lidoWithdrawalNFT || !publicClient) {
if (!staking.lido?.withdrawalQueueContractAddress || !lidoWithdrawalNFT) {
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ export default function AzoriusNFTDetail({

useEffect(() => {
const loadNFTDetails = async () => {
if (hasAddressError || !publicClient) {
if (hasAddressError) {
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,6 @@ export function AzoriusTokenDetails(props: ICreationStepProps) {

useStepRedirect({ values });
const updateImportFields = useCallback(async () => {
if (!publicClient) {
return;
}
const importAddress = values.erc20Token.tokenImportAddress;
const importError = errors?.erc20Token?.tokenImportAddress;
if (importAddress && !importError && isAddress(importAddress)) {
Expand Down
10 changes: 6 additions & 4 deletions src/components/DaoDashboard/ERC20Claim.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ import { abis } from '@fractal-framework/fractal-contracts';
import { useCallback, useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { getContract } from 'viem';
import { useAccount, usePublicClient, useWalletClient } from 'wagmi';
import { useAccount } from 'wagmi';
import { Alert as AlertIcon } from '../../assets/theme/custom/icons/Alert';
import useNetworkPublicClient from '../../hooks/useNetworkPublicClient';
import { useNetworkWalletClient } from '../../hooks/useNetworkWalletClient';
import { useTransaction } from '../../hooks/utils/useTransaction';
import { useFractal } from '../../providers/App/AppProvider';
import { AzoriusGovernance } from '../../types';
Expand All @@ -19,11 +21,11 @@ export function ERCO20Claim() {
const { t } = useTranslation(['dashboard', 'transaction']);
const [contractCall, pending] = useTransaction();
const azoriusGovernance = governance as AzoriusGovernance;
const publicClient = usePublicClient();
const { data: walletClient } = useWalletClient();
const publicClient = useNetworkPublicClient();
const { data: walletClient } = useNetworkWalletClient();

const loadClaim = useCallback(async () => {
if (!tokenClaimContractAddress || !type || !account || !publicClient) {
if (!tokenClaimContractAddress || !type || !account) {
return;
}
const tokenClaimContract = getContract({
Expand Down
13 changes: 6 additions & 7 deletions src/components/DaoDashboard/Info/InfoGovernance.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ import { Bank } from '@phosphor-icons/react';
import { useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { getContract } from 'viem';
import { usePublicClient } from 'wagmi';

import useNetworkPublicClient from '../../../hooks/useNetworkPublicClient';
import { useTimeHelpers } from '../../../hooks/utils/useTimeHelpers';
import { useFractal } from '../../../providers/App/AppProvider';
import { useDaoInfoStore } from '../../../store/daoInfo/useDaoInfoStore';
Expand All @@ -19,7 +20,7 @@ export function InfoGovernance({ showTitle = true }: { showTitle?: boolean }) {
guardContracts: { freezeGuardType, freezeGuardContractAddress },
} = useFractal();
const { safe } = useDaoInfoStore();
const publicClient = usePublicClient();
const publicClient = useNetworkPublicClient();
const { getTimeDuration } = useTimeHelpers();
const [timelockPeriod, setTimelockPeriod] = useState<string>();
const [executionPeriod, setExecutionPeriod] = useState<string>();
Expand All @@ -28,11 +29,9 @@ export function InfoGovernance({ showTitle = true }: { showTitle?: boolean }) {

useEffect(() => {
const setTimelockInfo = async () => {
const formatBlocks = async (blocks: number): Promise<string | undefined> => {
if (publicClient) {
return getTimeDuration(await blocksToSeconds(blocks, publicClient));
}
};
const formatBlocks = async (blocks: number): Promise<string | undefined> =>
getTimeDuration(await blocksToSeconds(blocks, publicClient));

if (freezeGuardType == FreezeGuardType.MULTISIG) {
if (freezeGuardContractAddress && publicClient) {
const freezeGuardContract = getContract({
Expand Down
14 changes: 3 additions & 11 deletions src/components/DaoHierarchy/DaoHierarchyNode.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ import { useCallback, useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { Link as RouterLink } from 'react-router-dom';
import { Address, getContract, zeroAddress } from 'viem';
import { usePublicClient } from 'wagmi';
import { DAOQueryDocument } from '../../../.graphclient';
import { SENTINEL_ADDRESS } from '../../constants/common';
import { DAO_ROUTES } from '../../constants/routes';
import { useDecentModules } from '../../hooks/DAO/loaders/useDecentModules';
import useNetworkPublicClient from '../../hooks/useNetworkPublicClient';
import { CacheKeys } from '../../hooks/utils/cache/cacheDefaults';
import { setValue, getValue } from '../../hooks/utils/cache/useLocalStorage';
import { useAddressContractType } from '../../hooks/utils/useAddressContractType';
Expand Down Expand Up @@ -44,7 +44,7 @@ export function DaoHierarchyNode({
const [hierarchyNode, setHierarchyNode] = useState<DaoHierarchyInfo>();
const [hasErrorLoading, setErrorLoading] = useState<boolean>(false);
const { addressPrefix, subgraph, chain } = useNetworkConfigStore();
const publicClient = usePublicClient();
const publicClient = useNetworkPublicClient();

const { getAddressContractType } = useAddressContractType();
const lookupModules = useDecentModules();
Expand All @@ -59,10 +59,6 @@ export function DaoHierarchyNode({

const getVotingStrategies = useCallback(
async (azoriusModule: DecentModule) => {
if (!publicClient) {
throw new Error('Public Client is not set!');
}

const azoriusContract = getContract({
abi: abis.Azorius,
address: azoriusModule.moduleAddress,
Expand Down Expand Up @@ -98,10 +94,6 @@ export function DaoHierarchyNode({
throw new Error('No voting strategies found');
}

if (!publicClient) {
throw new Error('Public Client is not set!');
}

let governanceTypes: DaoHierarchyStrategyType[] = [];

await Promise.all(
Expand All @@ -125,7 +117,7 @@ export function DaoHierarchyNode({
);
return governanceTypes.filter((value, index, self) => self.indexOf(value) === index);
},
[getVotingStrategies, publicClient],
[getVotingStrategies],
);

const loadDao = useCallback(
Expand Down
6 changes: 3 additions & 3 deletions src/components/ProposalBuilder/ProposalStream.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import { CaretDown, CaretRight, MinusCircle, Plus } from '@phosphor-icons/react'
import { useEffect, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { erc20Abi, formatUnits, getContract, isAddress } from 'viem';
import { usePublicClient } from 'wagmi';
import useNetworkPublicClient from '../../hooks/useNetworkPublicClient';
import { useDaoInfoStore } from '../../store/daoInfo/useDaoInfoStore';
import { Stream } from '../../types/proposalBuilder';
import { scrollToBottom } from '../../utils/ui';
Expand All @@ -37,7 +37,7 @@ export function ProposalStream({
index: number;
pendingTransaction: boolean;
}) {
const publicClient = usePublicClient();
const publicClient = useNetworkPublicClient();
const [tokenDecimals, setTokenDecimals] = useState(0);
const [rawTokenBalance, setRawTokenBalnace] = useState(0n);
const [tokenBalanceFormatted, setTokenBalanceFormatted] = useState('');
Expand All @@ -49,7 +49,7 @@ export function ProposalStream({

useEffect(() => {
const fetchFormattedTokenBalance = async () => {
if (publicClient && safeAddress && stream.tokenAddress && isAddress(stream.tokenAddress)) {
if (safeAddress && stream.tokenAddress && isAddress(stream.tokenAddress)) {
const tokenContract = getContract({
abi: erc20Abi,
client: publicClient,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@ import { abis } from '@fractal-framework/fractal-contracts';
import { useEffect, useRef, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { getAddress, getContract, isHex, zeroAddress } from 'viem';
import { useAccount, useWalletClient } from 'wagmi';
import { useAccount } from 'wagmi';
import GnosisSafeL2Abi from '../../../assets/abi/GnosisSafeL2';
import { Check } from '../../../assets/theme/custom/icons/Check';
import { BACKGROUND_SEMI_TRANSPARENT } from '../../../constants/common';
import { buildSafeTransaction, buildSignatureBytes, EIP712_SAFE_TX_TYPE } from '../../../helpers';
import { logError } from '../../../helpers/errorLogging';
import { useSafeMultisigProposals } from '../../../hooks/DAO/loaders/governance/useSafeMultisigProposals';
import { useNetworkWalletClient } from '../../../hooks/useNetworkWalletClient';
import { useAsyncRequest } from '../../../hooks/utils/useAsyncRequest';
import { useTransaction } from '../../../hooks/utils/useTransaction';
import { useFractal } from '../../../providers/App/AppProvider';
Expand Down Expand Up @@ -48,7 +49,7 @@ export function TxActions({ proposal }: { proposal: MultisigProposal }) {
const [asyncRequest, asyncRequestPending] = useAsyncRequest();
const [contractCall, contractCallPending] = useTransaction();
const { loadSafeMultisigProposals } = useSafeMultisigProposals();
const { data: walletClient } = useWalletClient();
const { data: walletClient } = useNetworkWalletClient();

const isOwner = safe?.owners?.includes(userAccount.address ?? zeroAddress);

Expand Down
9 changes: 5 additions & 4 deletions src/components/Proposals/ProposalSummary.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@ import { formatInTimeZone } from 'date-fns-tz';
import { useCallback, useEffect, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { erc721Abi, getContract } from 'viem';
import { useAccount, usePublicClient } from 'wagmi';
import { useAccount } from 'wagmi';
import { TOOLTIP_MAXW } from '../../constants/common';
import useNetworkPublicClient from '../../hooks/useNetworkPublicClient';
import useBlockTimestamp from '../../hooks/utils/useBlockTimestamp';
import { useFractal } from '../../providers/App/AppProvider';
import { AzoriusGovernance, AzoriusProposal, GovernanceType } from '../../types';
Expand Down Expand Up @@ -58,10 +59,10 @@ export function AzoriusProposalSummary({ proposal }: { proposal: AzoriusProposal

const toggleShowVotingPower = () => setShowVotingPower(prevState => !prevState);

const publicClient = usePublicClient();
const publicClient = useNetworkPublicClient();

const getErc721VotingWeight = useCallback(async () => {
if (!address || !azoriusGovernance.erc721Tokens || !publicClient) {
if (!address || !azoriusGovernance.erc721Tokens) {
return 0n;
}
const userVotingWeight = (
Expand All @@ -88,7 +89,7 @@ export function AzoriusProposalSummary({ proposal }: { proposal: AzoriusProposal

useEffect(() => {
async function loadProposalVotingWeight() {
if (address && publicClient) {
if (address) {
if (isERC20) {
const strategyContract = getContract({
abi: abis.LinearERC20Voting,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,10 @@ import {
useState,
} from 'react';
import { erc721Abi, getContract, Hex, toHex } from 'viem';
import { useAccount, usePublicClient } from 'wagmi';
import { useAccount } from 'wagmi';
import useSnapshotProposal from '../../../../hooks/DAO/loaders/snapshot/useSnapshotProposal';
import useUserERC721VotingTokens from '../../../../hooks/DAO/proposal/useUserERC721VotingTokens';
import useNetworkPublicClient from '../../../../hooks/useNetworkPublicClient';
import { useFractal } from '../../../../providers/App/AppProvider';
import { useDaoInfoStore } from '../../../../store/daoInfo/useDaoInfoStore';
import {
Expand Down Expand Up @@ -63,7 +64,7 @@ export function VoteContextProvider({
const { loadVotingWeight } = useSnapshotProposal(proposal as SnapshotProposal);
const { remainingTokenIds } = useUserERC721VotingTokens(null, proposal.proposalId, true);
const { snapshotProposal } = useSnapshotProposal(proposal);
const publicClient = usePublicClient();
const publicClient = useNetworkPublicClient();

const getHasVoted = useCallback(() => {
setHasVotedLoading(true);
Expand Down Expand Up @@ -97,7 +98,7 @@ export function VoteContextProvider({
const erc721VotingWeight = useCallback(async () => {
const account = userAccount.address;
const azoriusGovernance = governance as AzoriusGovernance;
if (!account || !azoriusGovernance.erc721Tokens || !publicClient) {
if (!account || !azoriusGovernance.erc721Tokens) {
return 0n;
}
const userVotingWeight = (
Expand All @@ -120,7 +121,7 @@ export function VoteContextProvider({
async (remainingTokenIdsLength: number) => {
setCanVoteLoading(true);
let newCanVote = false;
if (userAccount.address && publicClient) {
if (userAccount.address) {
if (snapshotProposal) {
const votingWeightData = await loadVotingWeight();
newCanVote = votingWeightData.votingWeight >= 1;
Expand Down
13 changes: 4 additions & 9 deletions src/components/Roles/RolePaymentDetails.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@ import { TouchEvent, useCallback, useEffect, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { useNavigate } from 'react-router-dom';
import { Address, getAddress, Hex } from 'viem';
import { useAccount, usePublicClient } from 'wagmi';
import { useAccount } from 'wagmi';
import { DETAILS_BOX_SHADOW } from '../../constants/common';
import { DAO_ROUTES } from '../../constants/routes';
import useNetworkPublicClient from '../../hooks/useNetworkPublicClient';
import { useNetworkConfigStore } from '../../providers/NetworkConfig/useNetworkConfigStore';
import { useDaoInfoStore } from '../../store/daoInfo/useDaoInfoStore';
import { useRolesStore } from '../../store/roles/useRolesStore';
Expand Down Expand Up @@ -145,7 +146,7 @@ export function RolePaymentDetails({
const { addressPrefix } = useNetworkConfigStore();
const { refreshWithdrawableAmount } = useRolesStore();
const navigate = useNavigate();
const publicClient = usePublicClient();
const publicClient = useNetworkPublicClient();
const canWithdraw = useMemo(() => {
if (
connectedAccount &&
Expand All @@ -162,13 +163,7 @@ export function RolePaymentDetails({
}, [payment.endDate, roleTerms]);

const [modalType, props] = useMemo(() => {
if (
!payment.streamId ||
!payment.contractAddress ||
!roleHatWearerAddress ||
!publicClient ||
!roleHatId
) {
if (!payment.streamId || !payment.contractAddress || !roleHatWearerAddress || !roleHatId) {
return [ModalType.NONE] as const;
}
let recipient = roleHatWearerAddress;
Expand Down
4 changes: 2 additions & 2 deletions src/components/Roles/RoleTerm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import { format } from 'date-fns';
import { useCallback, useMemo } from 'react';
import { useTranslation } from 'react-i18next';
import { Address, getContract, Hex } from 'viem';
import { useWalletClient } from 'wagmi';
import { DETAILS_BOX_SHADOW } from '../../constants/common';
import { useDateTimeDisplay } from '../../helpers/dateTime';
import { useNetworkWalletClient } from '../../hooks/useNetworkWalletClient';
import useAvatar from '../../hooks/utils/useAvatar';
import { useCopyText } from '../../hooks/utils/useCopyText';
import { useGetAccountName } from '../../hooks/utils/useGetAccountName';
Expand Down Expand Up @@ -280,7 +280,7 @@ export default function RoleTerm({
}) {
const [contractCall, contractCallPending] = useTransaction();
const { hatsTree, getHat, updateCurrentTermStatus } = useRolesStore();
const { data: walletClient } = useWalletClient();
const { data: walletClient } = useNetworkWalletClient();
const { t } = useTranslation(['roles']);
const {
contracts: { hatsProtocol },
Expand Down
7 changes: 2 additions & 5 deletions src/components/Roles/forms/RoleFormTerms.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ import { useEffect, useMemo } from 'react';
import { useTranslation } from 'react-i18next';
import { toast } from 'sonner';
import { getAddress, Hex } from 'viem';
import { usePublicClient } from 'wagmi';
import { DETAILS_BOX_SHADOW } from '../../../constants/common';
import useNetworkPublicClient from '../../../hooks/useNetworkPublicClient';
import { useRolesStore } from '../../../store/roles/useRolesStore';
import { RoleFormTermStatus, RoleFormValues } from '../../../types/roles';
import { DatePicker } from '../../ui/forms/DatePicker';
Expand Down Expand Up @@ -95,15 +95,12 @@ function RoleTermCreate({
}) {
const { t } = useTranslation('roles');
const { values, errors, setFieldValue } = useFormikContext<RoleFormValues>();
const publicClient = usePublicClient();
const publicClient = useNetworkPublicClient();

const handleAddTerm = async () => {
if (!values.newRoleTerm?.nominee || !values.newRoleTerm?.termEndDate) {
throw new Error('Nominee and Term End Date are required');
}
if (!publicClient) {
throw new Error('Public client is not available');
}
let nomineeAddress = values.newRoleTerm.nominee;
if (!values.newRoleTerm.nominee.startsWith('0x') && !getAddress(values.newRoleTerm.nominee)) {
const ens = await publicClient.getEnsAddress({
Expand Down
6 changes: 3 additions & 3 deletions src/components/SafeSettings/Signers/modals/AddSignerModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import { Field, FieldAttributes, Formik } from 'formik';
import { useCallback, useRef } from 'react';
import { useTranslation } from 'react-i18next';
import { Address, getAddress } from 'viem';
import { usePublicClient } from 'wagmi';
import * as Yup from 'yup';
import { useValidationAddress } from '../../../../hooks/schemas/common/useValidationAddress';
import useNetworkPublicClient from '../../../../hooks/useNetworkPublicClient';
import { useDaoInfoStore } from '../../../../store/daoInfo/useDaoInfoStore';
import { validateENSName } from '../../../../utils/url';
import SupportTooltip from '../../../ui/badges/SupportTooltip';
Expand All @@ -31,7 +31,7 @@ function AddSignerModal({
}

const { t } = useTranslation(['modals', 'common']);
const publicClient = usePublicClient();
const publicClient = useNetworkPublicClient();
const { addressValidationTest, newSignerValidationTest } = useValidationAddress();
const tooltipContainer = useRef<HTMLDivElement>(null);

Expand All @@ -41,7 +41,7 @@ function AddSignerModal({
async (values: { address: string; threshold: number; nonce: number }) => {
const { address, nonce, threshold } = values;
let validAddress = address;
if (validateENSName(validAddress) && publicClient) {
if (validateENSName(validAddress)) {
const maybeEnsAddress = await publicClient.getEnsAddress({ name: address });
if (maybeEnsAddress) {
validAddress = maybeEnsAddress;
Expand Down
Loading

0 comments on commit c91c9ce

Please sign in to comment.