From b4a8fdd0b2c41430fe1f493cddad841ed56501e2 Mon Sep 17 00:00:00 2001 From: jacksonfoley Date: Mon, 17 Oct 2022 17:23:17 -0600 Subject: [PATCH 1/6] wip --- .../components/EditThreshold/index.js | 11 ++--- packages/client/src/components/Safes.js | 2 +- .../client/src/flow/checkTreasuries.tx.js | 26 +++++++++-- .../client/src/hooks/useAddressAliases.js | 45 +++++++++++++++++++ packages/client/src/hooks/useTreasury.js | 17 +++---- .../src/reducers/addressAliasReducer.js | 32 +++++++++++++ .../client/src/reducers/treasuryReducer.js | 3 +- 7 files changed, 117 insertions(+), 19 deletions(-) create mode 100644 packages/client/src/hooks/useAddressAliases.js create mode 100644 packages/client/src/reducers/addressAliasReducer.js diff --git a/packages/client/src/components/SafeSettings/components/EditThreshold/index.js b/packages/client/src/components/SafeSettings/components/EditThreshold/index.js index 39e48c77..62f5adb6 100644 --- a/packages/client/src/components/SafeSettings/components/EditThreshold/index.js +++ b/packages/client/src/components/SafeSettings/components/EditThreshold/index.js @@ -12,7 +12,7 @@ const EditThreshold = ({ treasury, newOwner, ownerToBeRemoved }) => { const { openModal, closeModal } = useModalContext(); const history = useHistory(); const web3 = useContext(Web3Context); - const { setTreasury, proposeAddSigner, proposeRemoveSigner } = web3; + const { setAddressAlias, proposeAddSigner, proposeRemoveSigner } = web3; const { address, safeOwners, threshold } = treasury; const verifiedSafeOwners = safeOwners.filter((o) => o.verified); let allSafeOwners; @@ -36,15 +36,15 @@ const EditThreshold = ({ treasury, newOwner, ownerToBeRemoved }) => { const onChangeThreshold = (isIncrease) => { setNewThreshold((prevState) => - isIncrease ? prevState + 1 : prevState - 1 + (isIncrease ? prevState + 1 : prevState - 1) ); }; const onConfirmAddOwner = async () => { await proposeAddSigner(formatAddress(newOwner.address), newThreshold); - setTreasury(address, { - safeOwners: [...safeOwners, { ...newOwner, verified: false }], - }); + if (newOwner.name) { + setAddressAlias(newOwner.address, newOwner.name) + } closeModal(); history.push(`/safe/${address}`); }; @@ -110,3 +110,4 @@ const EditThreshold = ({ treasury, newOwner, ownerToBeRemoved }) => { }; export default EditThreshold; + \ No newline at end of file diff --git a/packages/client/src/components/Safes.js b/packages/client/src/components/Safes.js index 9abe025a..93cfe568 100644 --- a/packages/client/src/components/Safes.js +++ b/packages/client/src/components/Safes.js @@ -68,7 +68,7 @@ function Safes(props) { }} />
- {v.name} + {v.name || v.address}
diff --git a/packages/client/src/flow/checkTreasuries.tx.js b/packages/client/src/flow/checkTreasuries.tx.js index d0de2662..287c2cd4 100644 --- a/packages/client/src/flow/checkTreasuries.tx.js +++ b/packages/client/src/flow/checkTreasuries.tx.js @@ -1,14 +1,25 @@ export const GET_TREASURY = ` import DAOTreasuryV5 from 0xDAOTreasuryV5 + pub struct SafeOwner { + pub var address: Address + pub var verified: Bool + + init(address: Address){ + self.address = address + self.verified = true + } + } + pub struct TreasuryInfo { pub var uuid: UInt64 - pub var signers: {Address: Bool} + pub var safeOwners: [SafeOwner] pub var threshold: UInt - init(uuid: UInt64, signers: {Address: Bool}, threshold: UInt) { + + init(uuid: UInt64, safeOwners: [SafeOwner], threshold: UInt) { self.uuid = uuid - self.signers = signers + self.safeOwners = safeOwners self.threshold = threshold } } @@ -18,9 +29,16 @@ export const GET_TREASURY = ` .borrow<&DAOTreasuryV5.Treasury{DAOTreasuryV5.TreasuryPublic}>() ?? panic("A DAOTreasuryV5 doesn't exist here.") + let signers = treasury.borrowManagerPublic().getSigners() + let safeOwners: [SafeOwner] = [] + for addr in signers.keys { + let owner = SafeOwner(address: addr) + safeOwners.append(owner) + } + return TreasuryInfo( uuid: treasury.uuid, - signers: treasury.borrowManagerPublic().getSigners(), + safeOwners: safeOwners, threshold: treasury.borrowManagerPublic().getThreshold() ) } diff --git a/packages/client/src/hooks/useAddressAliases.js b/packages/client/src/hooks/useAddressAliases.js new file mode 100644 index 00000000..7594ffb2 --- /dev/null +++ b/packages/client/src/hooks/useAddressAliases.js @@ -0,0 +1,45 @@ +import { useEffect, useMemo, useReducer } from 'react'; +import addressAliasReducer, { + ADDRESS_ALIAS_INITIAL_STATE, +} from 'reducers/addressAliasReducer'; + +const storageKey = 'vessel-addresses'; + +export default function useAddressAliases(address) { + const [state, dispatch] = useReducer(addressAliasReducer, [], (initial) => ({ + ...initial, + ...ADDRESS_ALIAS_INITIAL_STATE, + contacts: JSON.parse(localStorage.getItem(storageKey) || '{}'), + })); + + const addressAliases = useMemo( + () => state.addressAliases ?? {}, + [state.addressAliases] + ); + + useEffect(() => { + localStorage.setItem(storageKey, JSON.stringify(addressAliases)); + }, [addressAliases]); + + const setAddressAlias = (addr, name) => { + dispatch({ + type: 'SET_ADDRESS_ALIAS', + payload: { + [addr]: name, + }, + }); + }; + + const removeAddressAlias = (addr) => { + dispatch({ + type: 'REMOVE_ADDRESS_ALIAS', + payload: addr, + }); + }; + + return { + contacts: state.contacts?.[address] ?? [], + setAddressAlias, + removeAddressAlias, + }; +} diff --git a/packages/client/src/hooks/useTreasury.js b/packages/client/src/hooks/useTreasury.js index 40885372..7df14be6 100644 --- a/packages/client/src/hooks/useTreasury.js +++ b/packages/client/src/hooks/useTreasury.js @@ -254,6 +254,7 @@ export default function useTreasury(treasuryAddr) { })); const refreshTreasury = async () => { + console.log('REFRESH TREASURY'); const treasuryData = await getTreasury(treasuryAddr); if (!treasuryData?.uuid) { dispatch({ type: 'SET_LOADING', payload: false }); @@ -337,6 +338,14 @@ export default function useTreasury(treasuryAddr) { localStorage.setItem(storageKey, JSON.stringify(state.treasuries)); }, [state.treasuries]); + const setTreasury = (_treasuryAddr, treasuryData) => { + dispatch({ + type: 'SET_TREASURY', + payload: { + [_treasuryAddr]: treasuryData, + }, + }); + }; const createTreasury = async (treasuryData) => { const { safeOwners, threshold } = treasuryData; const signerAddresses = safeOwners.map((is) => formatAddress(is.address)); @@ -349,14 +358,6 @@ export default function useTreasury(treasuryAddr) { setTreasury(creatorAddr, treasuryData); return res; }; - const setTreasury = (treasuryAddr, treasuryData) => { - dispatch({ - type: 'SET_TREASURY', - payload: { - [treasuryAddr]: treasuryData, - }, - }); - }; const proposeTransfer = async (recipientAddr, amount, coinType) => { const res = await doProposeTransfer( diff --git a/packages/client/src/reducers/addressAliasReducer.js b/packages/client/src/reducers/addressAliasReducer.js new file mode 100644 index 00000000..54dd3a27 --- /dev/null +++ b/packages/client/src/reducers/addressAliasReducer.js @@ -0,0 +1,32 @@ +/* + * addressAliases is a dicitonary of address[name] + */ +export const ADDRESS_ALIAS_INITIAL_STATE = { + addressAliases: {}, +}; + +const addressAliasReducer = (state, action) => { + switch (action.type) { + case 'SET_ADDRESS_ALIAS': { + return { + ...state, + addressAliases: { + ...state.addressAliases, + ...action.payload, + }, + }; + } + case 'REMOVE_ADDRESS_ALIAS': { + const aliases = state.addressAliases; + delete aliases[action.payload]; + return { + ...state, + addressAliases: aliases, + }; + } + default: + throw new Error(); + } +}; + +export default addressAliasReducer; diff --git a/packages/client/src/reducers/treasuryReducer.js b/packages/client/src/reducers/treasuryReducer.js index fc94a1be..2e4ba9b7 100644 --- a/packages/client/src/reducers/treasuryReducer.js +++ b/packages/client/src/reducers/treasuryReducer.js @@ -22,7 +22,8 @@ const treasuryReducer = (state, action) => { treasuries: { ...state.treasuries, [address]: { - ...state.treasuries[address], + // Only pull out the name from local storage. + name: state.treasuries[address]?.name, ...action.payload[address], }, }, From 74972e47cc702a291fb2a46c187f2a7d963f6022 Mon Sep 17 00:00:00 2001 From: jacksonfoley Date: Tue, 25 Oct 2022 15:10:09 -0600 Subject: [PATCH 2/6] only use localstorage for treasury aliases, address aliases, and contacts. fix '1 of1' issue. --- .../Actions/components/SignerThresholdView.js | 2 +- .../Actions/components/ThresholdView.js | 2 +- .../EditThreshold/EditThresholdForm.js | 2 +- .../components/Owners/AddSafeOwner.js | 32 ++++++++++----- .../SafeSettings/components/Owners/index.js | 11 +++-- .../SafeDetailsSetting/EditSafeName.js | 3 +- .../components/SafeDetailsSetting/index.js | 13 +++--- .../components/SignatureThreshold.js | 1 + .../src/components/SafeSettings/index.js | 8 +++- packages/client/src/components/Safes.js | 8 ++-- .../src/components/SignatureRequirements.js | 2 +- packages/client/src/contexts/Web3.js | 9 +++- packages/client/src/hooks/index.js | 1 + .../client/src/hooks/useAddressAliases.js | 31 ++++++++++++-- packages/client/src/hooks/useNFTs.js | 9 +--- packages/client/src/hooks/useTreasury.js | 15 +++---- packages/client/src/hooks/useVaults.js | 8 +--- .../src/modals/Transaction/BannerInfo.js | 2 +- .../client/src/modals/Transaction/Details.js | 2 +- packages/client/src/pages/LoadSafe.js | 41 ++++++++++++++----- .../src/reducers/addressAliasReducer.js | 10 +++++ 21 files changed, 145 insertions(+), 67 deletions(-) diff --git a/packages/client/src/components/Actions/components/SignerThresholdView.js b/packages/client/src/components/Actions/components/SignerThresholdView.js index a9102dde..6fadc422 100644 --- a/packages/client/src/components/Actions/components/SignerThresholdView.js +++ b/packages/client/src/components/Actions/components/SignerThresholdView.js @@ -38,7 +38,7 @@ const SignerThresholdView = ({ actionView, safeData, isAdd }) => { Signature Threshold
- {newThreshold} of{safeOwners.length} owner(s) + {newThreshold} of {safeOwners.length} owner(s)
diff --git a/packages/client/src/components/Actions/components/ThresholdView.js b/packages/client/src/components/Actions/components/ThresholdView.js index 1063d8cf..db4a9e7a 100644 --- a/packages/client/src/components/Actions/components/ThresholdView.js +++ b/packages/client/src/components/Actions/components/ThresholdView.js @@ -8,7 +8,7 @@ const ThresholdView = ({ actionView, safeData }) => {
Signature Threshold
- {newThreshold} of{safeOwners?.length} owners + {newThreshold} of {safeOwners?.length} owners
diff --git a/packages/client/src/components/SafeSettings/components/EditThreshold/EditThresholdForm.js b/packages/client/src/components/SafeSettings/components/EditThreshold/EditThresholdForm.js index 8d968c88..26b1d26c 100644 --- a/packages/client/src/components/SafeSettings/components/EditThreshold/EditThresholdForm.js +++ b/packages/client/src/components/SafeSettings/components/EditThreshold/EditThresholdForm.js @@ -42,7 +42,7 @@ const EditThresholdForm = ({
- {newThreshold} of{Math.max(safeOwners.length, 1)} owner(s) + {newThreshold} of {Math.max(safeOwners.length, 1)} owner(s)
{ +const AddSafeOwner = ({ + treasury, + safeOwners, + addressAliases, + setAddressAlias, +}) => { const web3 = useContext(Web3Context); const { openModal, closeModal } = useModalContext(); const { isAddressValid } = useAddressValidation(web3.injectedProvider); @@ -22,6 +27,13 @@ const AddSafeOwner = ({ treasury, safeOwners }) => { addressValid ? 'has-text-weight-bold' : 'disabled' }`; + const isAddressExisting = (_safeOwners, newAddress) => { + const addr = formatAddress(newAddress); + return ( + _safeOwners.filter((obj) => obj.address === addr && obj.verified) + .length !== 0 + ); + }; const onAddressChange = async (newAddress) => { setAddress(newAddress); const isValid = @@ -29,17 +41,17 @@ const AddSafeOwner = ({ treasury, safeOwners }) => { (await isAddressValid(newAddress)) && !isAddressExisting(safeOwners, newAddress); setAddressValid(isValid); - }; - - const isAddressExisting = (safeOwners, newAddress) => { - const address = formatAddress(newAddress); - return ( - safeOwners.filter((obj) => obj.address === address && obj.verified) - .length !== 0 - ); + if (addressAliases[newAddress]) { + setName(addressAliases[newAddress]); + } }; const onNextClick = () => { + // Set Address Alias + if (name) { + setAddressAlias(address, name); + } + // Open Edit Threshold Modal openModal( , { headerTitle: 'Set A New Threshold' } diff --git a/packages/client/src/components/SafeSettings/components/Owners/index.js b/packages/client/src/components/SafeSettings/components/Owners/index.js index 6299ba44..815db18b 100644 --- a/packages/client/src/components/SafeSettings/components/Owners/index.js +++ b/packages/client/src/components/SafeSettings/components/Owners/index.js @@ -5,7 +5,7 @@ import Svg from 'library/Svg'; import AddSafeOwner from './AddSafeOwner'; import RemoveSafeOwner from './RemoveSafeOwner'; -const Owners = ({ treasury }) => { +const Owners = ({ treasury, addressAliases, setAddressAlias }) => { const modalContext = useModalContext(); const { safeOwners } = treasury; const verifiedSafeOwners = safeOwners.filter((o) => o.verified); @@ -13,7 +13,12 @@ const Owners = ({ treasury }) => { const openAddOwnerModal = () => { modalContext.openModal( - , + , { headerTitle: 'Add Owner', } @@ -51,7 +56,7 @@ const Owners = ({ treasury }) => { verifiedSafeOwners.map((so, idx) => (
- {so.name ?? `Signer #${idx + 1}`} + {addressAliases[so.address] ?? `Signer #${idx + 1}`}
{so.address}
diff --git a/packages/client/src/components/SafeSettings/components/SafeDetailsSetting/EditSafeName.js b/packages/client/src/components/SafeSettings/components/SafeDetailsSetting/EditSafeName.js index 1968ede5..ed4181f0 100644 --- a/packages/client/src/components/SafeSettings/components/SafeDetailsSetting/EditSafeName.js +++ b/packages/client/src/components/SafeSettings/components/SafeDetailsSetting/EditSafeName.js @@ -1,7 +1,8 @@ import { useState } from 'react'; const EditSafeName = ({ name, onCancel, onSubmit }) => { - const [currSafeName, setCurrSafeName] = useState(name); + const [currSafeName, setCurrSafeName] = useState(name ?? ''); + const isNameValid = currSafeName.trim().length > 0; const onSubmitClick = () => { diff --git a/packages/client/src/components/SafeSettings/components/SafeDetailsSetting/index.js b/packages/client/src/components/SafeSettings/components/SafeDetailsSetting/index.js index f62452de..41919b33 100644 --- a/packages/client/src/components/SafeSettings/components/SafeDetailsSetting/index.js +++ b/packages/client/src/components/SafeSettings/components/SafeDetailsSetting/index.js @@ -1,12 +1,18 @@ import React from 'react'; import { useModalContext } from 'contexts'; -import { useClipboard } from 'hooks'; +import { useClipboard, useAddressAliases } from 'hooks'; import EditSafeName from './EditSafeName'; const SafeDetailsSetting = ({ treasury, setTreasury }) => { const modalContext = useModalContext(); const { name, address } = treasury; const safeAddressClipboard = useClipboard(); + const { setTreasuryAlias } = useAddressAliases(); + + const onEditNameSubmit = (newName) => { + setTreasuryAlias(address, newName); + modalContext.closeModal(); + }; const openEditNameModal = () => { modalContext.openModal( { /> ); }; - const onEditNameSubmit = (newName) => { - setTreasury(address, { name: newName }); - modalContext.closeModal(); - }; + return (
diff --git a/packages/client/src/components/SafeSettings/components/SignatureThreshold.js b/packages/client/src/components/SafeSettings/components/SignatureThreshold.js index 28688b78..19f44ece 100644 --- a/packages/client/src/components/SafeSettings/components/SignatureThreshold.js +++ b/packages/client/src/components/SafeSettings/components/SignatureThreshold.js @@ -3,6 +3,7 @@ import EditThreshold from './EditThreshold'; import SignatureBar from './SignatureBar'; const SignatureThreshold = ({ treasury }) => { + console.log("treasury!", treasury); const { openModal, closeModal, isOpen } = useModalContext(); const { threshold, safeOwners } = treasury; const verifiedSafeOwners = safeOwners.filter((o) => o.verified); diff --git a/packages/client/src/components/SafeSettings/index.js b/packages/client/src/components/SafeSettings/index.js index c1ec070b..ab75699f 100644 --- a/packages/client/src/components/SafeSettings/index.js +++ b/packages/client/src/components/SafeSettings/index.js @@ -25,6 +25,8 @@ const SafeSettings = () => { addCollection, removeVault, removeCollection, + addressAliases, + setAddressAlias } = web3; useEffect(() => { (() => { @@ -38,7 +40,11 @@ const SafeSettings = () => { <> - +

@@ -24,7 +24,7 @@ function Safes(props) { return (

diff --git a/packages/client/src/components/SignatureRequirements.js b/packages/client/src/components/SignatureRequirements.js index b40a66d8..cddc50b6 100644 --- a/packages/client/src/components/SignatureRequirements.js +++ b/packages/client/src/components/SignatureRequirements.js @@ -54,7 +54,7 @@ function SignatureRequirements({
- {signersAmount} of{Math.max(safeOwners.length, 1)} owner(s) + {signersAmount} of {Math.max(safeOwners.length, 1)} owner(s)
({ ...initial, ...ADDRESS_ALIAS_INITIAL_STATE, - contacts: JSON.parse(localStorage.getItem(storageKey) || '{}'), + addressAliases: JSON.parse(localStorage.getItem(storageKey) || '{}'), + treasuryAliases: JSON.parse( + localStorage.getItem(treasuryStorageKey) || '{}' + ), })); const addressAliases = useMemo( @@ -17,11 +21,30 @@ export default function useAddressAliases(address) { [state.addressAliases] ); + const treasuryAliases = useMemo( + () => state.treasuryAliases ?? {}, + [state.treasuryAliases] + ); + useEffect(() => { localStorage.setItem(storageKey, JSON.stringify(addressAliases)); }, [addressAliases]); + useEffect(() => { + localStorage.setItem(treasuryStorageKey, JSON.stringify(treasuryAliases)); + }, [treasuryAliases]); + + const setTreasuryAlias = (addr, name) => { + dispatch({ + type: 'SET_TREASURY_ALIAS', + payload: { + [addr]: name, + }, + }); + }; + const setAddressAlias = (addr, name) => { + console.log('set address alias!', addr, name); dispatch({ type: 'SET_ADDRESS_ALIAS', payload: { @@ -38,8 +61,10 @@ export default function useAddressAliases(address) { }; return { - contacts: state.contacts?.[address] ?? [], + addressAliases: JSON.parse(localStorage.getItem(storageKey)) ?? {}, + treasuryAliases: JSON.parse(localStorage.getItem(treasuryStorageKey)) ?? {}, setAddressAlias, removeAddressAlias, + setTreasuryAlias, }; } diff --git a/packages/client/src/hooks/useNFTs.js b/packages/client/src/hooks/useNFTs.js index f7a68770..7bca6def 100644 --- a/packages/client/src/hooks/useNFTs.js +++ b/packages/client/src/hooks/useNFTs.js @@ -1,4 +1,4 @@ -import { useEffect, useReducer } from 'react'; +import { useReducer } from 'react'; import { createSignature } from '../contexts/Web3'; import { REGULAR_LIMIT, SIGNED_LIMIT } from 'constants/constants'; import { formatAddress, parseIdentifier, removeAddressPrefix } from 'utils'; @@ -15,8 +15,6 @@ import { } from '../flow'; import nftReducer, { NFT_INITIAL_STATE } from '../reducers/nftReducer'; -const storageKey = 'vessel-collections'; - const doSendNFTToTreasury = async (treasuryAddr, tokenId) => await mutate({ cadence: SEND_NFT_TO_TREASURY, @@ -92,13 +90,8 @@ export default function useNFTs(treasuryAddr) { const [state, dispatch] = useReducer(nftReducer, [], (initial) => ({ ...initial, ...NFT_INITIAL_STATE, - NFTs: JSON.parse(localStorage.getItem(storageKey) || '{}'), })); - useEffect(() => { - localStorage.setItem(storageKey, JSON.stringify(state.NFTs)); - }, [state.NFTs]); - const checkCollection = async (treasuryAddr, identifier) => { let result = []; try { diff --git a/packages/client/src/hooks/useTreasury.js b/packages/client/src/hooks/useTreasury.js index 7df14be6..644b6ac4 100644 --- a/packages/client/src/hooks/useTreasury.js +++ b/packages/client/src/hooks/useTreasury.js @@ -34,8 +34,6 @@ import treasuryReducer, { TREASURY_INITIAL_STATE, } from '../reducers/treasuryReducer'; -const storageKey = 'vessel-treasuries'; - const doQuery = async (cadence, address) => { const queryResp = await query({ cadence, @@ -246,11 +244,11 @@ const getAllVaultBalance = async (address) => { } return allBalance; }; -export default function useTreasury(treasuryAddr) { +export default function useTreasury(treasuryAddr, treasuryAliases) { const [state, dispatch] = useReducer(treasuryReducer, [], (initial) => ({ ...initial, ...TREASURY_INITIAL_STATE, - treasuries: JSON.parse(localStorage.getItem(storageKey)) || {}, + treasuries: {}, })); const refreshTreasury = async () => { @@ -261,6 +259,8 @@ export default function useTreasury(treasuryAddr) { return; } + treasuryData.name = treasuryAliases[treasuryAddr] || ''; + dispatch({ type: 'SET_TREASURY', payload: { @@ -334,9 +334,10 @@ export default function useTreasury(treasuryAddr) { // eslint-disable-next-line }, [state.loadingTreasuries, treasuryAddr]); - useEffect(() => { - localStorage.setItem(storageKey, JSON.stringify(state.treasuries)); - }, [state.treasuries]); + // useEffect(() => { + // console.log(state.treasuries); + // localStorage.setItem(storageKey, JSON.stringify(state.treasuries)); + // }, [state.treasuries]); const setTreasury = (_treasuryAddr, treasuryData) => { dispatch({ diff --git a/packages/client/src/hooks/useVaults.js b/packages/client/src/hooks/useVaults.js index 9965ad43..cca7c10c 100644 --- a/packages/client/src/hooks/useVaults.js +++ b/packages/client/src/hooks/useVaults.js @@ -1,4 +1,4 @@ -import { useEffect, useReducer } from 'react'; +import { useReducer } from 'react'; import { createSignature } from 'contexts/Web3'; import { SIGNED_LIMIT } from 'constants/constants'; import { COIN_TYPE_TO_META } from 'constants/maps'; @@ -7,8 +7,6 @@ import { config, mutate, query, tx } from '@onflow/fcl'; import { ADD_VAULT, GET_TREASURY_IDENTIFIERS, REMOVE_VAULT } from '../flow'; import vaultReducer, { VAULT_INITIAL_STATE } from '../reducers/vaultReducer'; -const storageKey = 'vessel-vaults'; - const doAddVault = async (treasuryAddr, contractName, contractAddress) => { const intent = `A.${removeAddressPrefix( contractAddress @@ -51,12 +49,8 @@ export default function useVaults(treasuryAddr) { const [state, dispatch] = useReducer(vaultReducer, [], (initial) => ({ ...initial, ...VAULT_INITIAL_STATE, - vaults: JSON.parse(localStorage.getItem(storageKey) || '{}'), })); - useEffect(() => { - localStorage.setItem(storageKey, JSON.stringify(state.vaults)); - }, [state.vaults]); const getTreasuryVaults = async (treasuryAddr) => { const identifiers = await query({ diff --git a/packages/client/src/modals/Transaction/BannerInfo.js b/packages/client/src/modals/Transaction/BannerInfo.js index 15e84e4a..51536549 100644 --- a/packages/client/src/modals/Transaction/BannerInfo.js +++ b/packages/client/src/modals/Transaction/BannerInfo.js @@ -96,7 +96,7 @@ const BannerInfo = ({ {actionType === ACTION_TYPES.UPDATE_THRESHOLD && ( - {signers.length} of{newThreshold} owners + {signers.length} of {newThreshold} owners )} diff --git a/packages/client/src/modals/Transaction/Details.js b/packages/client/src/modals/Transaction/Details.js index 57acab1c..33ae4051 100644 --- a/packages/client/src/modals/Transaction/Details.js +++ b/packages/client/src/modals/Transaction/Details.js @@ -96,7 +96,7 @@ const TransactionDetails = ({ onClose, safeData = {}, transaction = {} }) => {
Signature Threshold
- {Object.keys(signers).length} of{threshold} owners + {Object.keys(signers).length} of {threshold} owners
)} diff --git a/packages/client/src/pages/LoadSafe.js b/packages/client/src/pages/LoadSafe.js index ca0a201b..c1ec361e 100644 --- a/packages/client/src/pages/LoadSafe.js +++ b/packages/client/src/pages/LoadSafe.js @@ -60,7 +60,15 @@ function LoadSafe({ web3 }) { const [threshold, setThreshold] = useState(0); const [safeOwners, setSafeOwners] = useState([]); const [safeOwnersValidByAddress, setSafeOwnersValidByAddress] = useState({}); - const { injectedProvider, getTreasury, setTreasury, address } = web3; + const { + injectedProvider, + getTreasury, + setTreasury, + address, + setAddressAlias, + setTreasuryAlias, + addressAliases, + } = web3; const { isAddressValid } = useAddressValidation(injectedProvider); if (!address) { return ; @@ -83,14 +91,13 @@ function LoadSafe({ web3 }) { const maybeValid = isAddr(e.target.value); if (maybeValid) { const treasury = await getTreasury(e.target.value); - const newSafeOwners = Object.keys(treasury?.signers ?? {}).map( - (signerAddr) => ({ - name: '', - address: signerAddr, - verified: true, - }) - ); + console.log('treasury', treasury); + const newSafeOwners = (treasury?.safeOwners ?? []).map((owner) => ({ + name: addressAliases[owner.address], + address: owner.address, + })); + console.log('newSafeOwners', newSafeOwners); setSafeOwners(newSafeOwners); checkSafeOwnerAddressesValidity(newSafeOwners); @@ -102,12 +109,26 @@ function LoadSafe({ web3 }) { }; const onOwnerNameChange = (value, idx) => { + // console.log('onOwnerNameChange') const newOwners = safeOwners.slice(0); newOwners[idx].name = value; - setSafeOwners([...newOwners]); + // setSafeOwners([...newOwners]); }; const onSetTreasury = () => { + // Set Address Aliases + console.log('onSetTreasury', safeOwners); + safeOwners.forEach((so) => { + if (so.name) { + console.log('set address alias', so.name, so.address); + setAddressAlias(so.address, so.name); + } + }); + + // Set Treasury Alias + setTreasuryAlias(safeAddress, safeName); + + // Set Treasury setTreasury(safeAddress, { name: safeName, type: 'Social', @@ -241,7 +262,7 @@ function LoadSafe({ web3 }) {
- {threshold} of{safeOwners.length} owner(s) + {threshold} of {safeOwners.length} owner(s)
diff --git a/packages/client/src/reducers/addressAliasReducer.js b/packages/client/src/reducers/addressAliasReducer.js index 54dd3a27..ae0acd41 100644 --- a/packages/client/src/reducers/addressAliasReducer.js +++ b/packages/client/src/reducers/addressAliasReducer.js @@ -8,6 +8,7 @@ export const ADDRESS_ALIAS_INITIAL_STATE = { const addressAliasReducer = (state, action) => { switch (action.type) { case 'SET_ADDRESS_ALIAS': { + console.log('SET_ADDRESS_ALIAS TRIGGERED') return { ...state, addressAliases: { @@ -24,6 +25,15 @@ const addressAliasReducer = (state, action) => { addressAliases: aliases, }; } + case 'SET_TREASURY_ALIAS': { + return { + ...state, + treasuryAliases: { + ...state.treasuryAliases, + ...action.payload, + }, + }; + } default: throw new Error(); } From 9321043d05b37b0355aec447bcd04476eef3acab Mon Sep 17 00:00:00 2001 From: jacksonfoley Date: Tue, 25 Oct 2022 16:41:10 -0600 Subject: [PATCH 3/6] remove console.logs, commented code, etc --- .../SafeSettings/components/Owners/AddSafeOwner.js | 2 +- .../SafeSettings/components/SignatureThreshold.js | 1 - packages/client/src/hooks/useTreasury.js | 6 ------ packages/client/src/pages/LoadSafe.js | 10 ---------- packages/client/src/reducers/addressAliasReducer.js | 1 - packages/client/src/reducers/treasuryReducer.js | 2 -- 6 files changed, 1 insertion(+), 21 deletions(-) diff --git a/packages/client/src/components/SafeSettings/components/Owners/AddSafeOwner.js b/packages/client/src/components/SafeSettings/components/Owners/AddSafeOwner.js index f00819d5..3f0b9480 100644 --- a/packages/client/src/components/SafeSettings/components/Owners/AddSafeOwner.js +++ b/packages/client/src/components/SafeSettings/components/Owners/AddSafeOwner.js @@ -1,7 +1,7 @@ import React, { useContext, useState } from 'react'; import { useModalContext } from 'contexts'; import { Web3Context } from 'contexts/Web3'; -import { useAddressAliases, useAddressValidation } from 'hooks'; +import { useAddressValidation } from 'hooks'; import { formatAddress, isAddr } from 'utils'; import Svg from 'library/Svg'; import EditThreshold from '../EditThreshold'; diff --git a/packages/client/src/components/SafeSettings/components/SignatureThreshold.js b/packages/client/src/components/SafeSettings/components/SignatureThreshold.js index 19f44ece..28688b78 100644 --- a/packages/client/src/components/SafeSettings/components/SignatureThreshold.js +++ b/packages/client/src/components/SafeSettings/components/SignatureThreshold.js @@ -3,7 +3,6 @@ import EditThreshold from './EditThreshold'; import SignatureBar from './SignatureBar'; const SignatureThreshold = ({ treasury }) => { - console.log("treasury!", treasury); const { openModal, closeModal, isOpen } = useModalContext(); const { threshold, safeOwners } = treasury; const verifiedSafeOwners = safeOwners.filter((o) => o.verified); diff --git a/packages/client/src/hooks/useTreasury.js b/packages/client/src/hooks/useTreasury.js index 644b6ac4..02b6c1ee 100644 --- a/packages/client/src/hooks/useTreasury.js +++ b/packages/client/src/hooks/useTreasury.js @@ -252,7 +252,6 @@ export default function useTreasury(treasuryAddr, treasuryAliases) { })); const refreshTreasury = async () => { - console.log('REFRESH TREASURY'); const treasuryData = await getTreasury(treasuryAddr); if (!treasuryData?.uuid) { dispatch({ type: 'SET_LOADING', payload: false }); @@ -334,11 +333,6 @@ export default function useTreasury(treasuryAddr, treasuryAliases) { // eslint-disable-next-line }, [state.loadingTreasuries, treasuryAddr]); - // useEffect(() => { - // console.log(state.treasuries); - // localStorage.setItem(storageKey, JSON.stringify(state.treasuries)); - // }, [state.treasuries]); - const setTreasury = (_treasuryAddr, treasuryData) => { dispatch({ type: 'SET_TREASURY', diff --git a/packages/client/src/pages/LoadSafe.js b/packages/client/src/pages/LoadSafe.js index c1ec361e..cc6ffbe0 100644 --- a/packages/client/src/pages/LoadSafe.js +++ b/packages/client/src/pages/LoadSafe.js @@ -91,13 +91,11 @@ function LoadSafe({ web3 }) { const maybeValid = isAddr(e.target.value); if (maybeValid) { const treasury = await getTreasury(e.target.value); - console.log('treasury', treasury); const newSafeOwners = (treasury?.safeOwners ?? []).map((owner) => ({ name: addressAliases[owner.address], address: owner.address, })); - console.log('newSafeOwners', newSafeOwners); setSafeOwners(newSafeOwners); checkSafeOwnerAddressesValidity(newSafeOwners); @@ -108,19 +106,11 @@ function LoadSafe({ web3 }) { } }; - const onOwnerNameChange = (value, idx) => { - // console.log('onOwnerNameChange') - const newOwners = safeOwners.slice(0); - newOwners[idx].name = value; - // setSafeOwners([...newOwners]); - }; const onSetTreasury = () => { // Set Address Aliases - console.log('onSetTreasury', safeOwners); safeOwners.forEach((so) => { if (so.name) { - console.log('set address alias', so.name, so.address); setAddressAlias(so.address, so.name); } }); diff --git a/packages/client/src/reducers/addressAliasReducer.js b/packages/client/src/reducers/addressAliasReducer.js index ae0acd41..ecff48e2 100644 --- a/packages/client/src/reducers/addressAliasReducer.js +++ b/packages/client/src/reducers/addressAliasReducer.js @@ -8,7 +8,6 @@ export const ADDRESS_ALIAS_INITIAL_STATE = { const addressAliasReducer = (state, action) => { switch (action.type) { case 'SET_ADDRESS_ALIAS': { - console.log('SET_ADDRESS_ALIAS TRIGGERED') return { ...state, addressAliases: { diff --git a/packages/client/src/reducers/treasuryReducer.js b/packages/client/src/reducers/treasuryReducer.js index 2e4ba9b7..36a1d4ad 100644 --- a/packages/client/src/reducers/treasuryReducer.js +++ b/packages/client/src/reducers/treasuryReducer.js @@ -22,8 +22,6 @@ const treasuryReducer = (state, action) => { treasuries: { ...state.treasuries, [address]: { - // Only pull out the name from local storage. - name: state.treasuries[address]?.name, ...action.payload[address], }, }, From 81f4ce1fbaa30d9421cc75af537e052328e80175 Mon Sep 17 00:00:00 2001 From: jacksonfoley Date: Tue, 25 Oct 2022 17:36:25 -0600 Subject: [PATCH 4/6] fix errors --- packages/client/src/hooks/useTreasury.js | 15 --------------- packages/client/src/pages/LoadSafe.js | 4 ++++ packages/client/src/pages/Safe.js | 6 +++--- 3 files changed, 7 insertions(+), 18 deletions(-) diff --git a/packages/client/src/hooks/useTreasury.js b/packages/client/src/hooks/useTreasury.js index 02b6c1ee..0111691a 100644 --- a/packages/client/src/hooks/useTreasury.js +++ b/packages/client/src/hooks/useTreasury.js @@ -304,20 +304,6 @@ export default function useTreasury(treasuryAddr, treasuryAliases) { }); }; - const updateOwnerList = async (treasuryAddr) => { - const { signers } = await getTreasury(treasuryAddr); - const { safeOwners } = state.treasuries[treasuryAddr]; - const updatedSafeOwners = syncSafeOwnersWithSigners(signers, safeOwners); - dispatch({ - type: 'SET_TREASURY', - payload: { - [treasuryAddr]: { - safeOwners: updatedSafeOwners, - }, - }, - }); - }; - useEffect(() => { if (!treasuryAddr) { if (state.loadingTreasuries) { @@ -406,7 +392,6 @@ export default function useTreasury(treasuryAddr, treasuryAliases) { const res = await doExecuteAction(treasuryAddr, actionUUID); const result = await tx(res).onceSealed(); await refreshTreasury(); - await updateOwnerList(treasuryAddr); return result.events; }; diff --git a/packages/client/src/pages/LoadSafe.js b/packages/client/src/pages/LoadSafe.js index cc6ffbe0..6a9500d5 100644 --- a/packages/client/src/pages/LoadSafe.js +++ b/packages/client/src/pages/LoadSafe.js @@ -106,6 +106,10 @@ function LoadSafe({ web3 }) { } }; + const onOwnerNameChange = (value, idx) => { + const newOwners = safeOwners.slice(0); + newOwners[idx].name = value; + }; const onSetTreasury = () => { // Set Address Aliases diff --git a/packages/client/src/pages/Safe.js b/packages/client/src/pages/Safe.js index b58cbd8e..d7aa72ee 100644 --- a/packages/client/src/pages/Safe.js +++ b/packages/client/src/pages/Safe.js @@ -117,9 +117,9 @@ function Safe({ web3 }) { }; const onExecuteAction = async ({ uuid }) => { - const events = await executeAction(uuid).catch((error) => - showErrorModal(error) - ); + const events = await executeAction(uuid).catch((error) => { + showErrorModal(error); + }); if (events) { const action = events.find((e) => e.type.endsWith('ActionExecuted')); showTransactionSuccessModal(action); From 2ca0aadf9d9fab63da42a5f10c0db7ddfa970a97 Mon Sep 17 00:00:00 2001 From: Jackson Foley Date: Wed, 26 Oct 2022 10:41:12 -0600 Subject: [PATCH 5/6] Update packages/client/src/pages/Safe.js Co-authored-by: Manny404 --- packages/client/src/pages/Safe.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/client/src/pages/Safe.js b/packages/client/src/pages/Safe.js index d7aa72ee..678e8ceb 100644 --- a/packages/client/src/pages/Safe.js +++ b/packages/client/src/pages/Safe.js @@ -117,9 +117,7 @@ function Safe({ web3 }) { }; const onExecuteAction = async ({ uuid }) => { - const events = await executeAction(uuid).catch((error) => { - showErrorModal(error); - }); + const events = await executeAction(uuid).catch(showErrorModal); if (events) { const action = events.find((e) => e.type.endsWith('ActionExecuted')); showTransactionSuccessModal(action); From a9b327e0151630bce4cbe4fc9f3a2a64df0d172d Mon Sep 17 00:00:00 2001 From: Jackson Foley Date: Wed, 26 Oct 2022 10:41:19 -0600 Subject: [PATCH 6/6] Update packages/client/src/contexts/Web3.js Co-authored-by: Manny404 --- packages/client/src/contexts/Web3.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client/src/contexts/Web3.js b/packages/client/src/contexts/Web3.js index ba28760f..de83eeac 100644 --- a/packages/client/src/contexts/Web3.js +++ b/packages/client/src/contexts/Web3.js @@ -1,6 +1,6 @@ import React, { useEffect, useState } from 'react'; import { useRouteMatch } from 'react-router-dom'; -import { useFclUserBalance, useNFTs, useTreasury, useVaults, useAddressAliases } from '../hooks'; +import { useFclUserBalance, useNFTs, useTreasury, useVaults, useAddressAliases } from 'hooks'; import { CURRENT_USER_SESSION_KEY } from 'constants/constants'; import * as fcl from '@onflow/fcl'; import { Buffer } from 'buffer';