- {signersAmount} of{Math.max(safeOwners.length, 1)} owner(s)
+ {signersAmount} of {Math.max(safeOwners.length, 1)} owner(s)
()
?? 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/index.js b/packages/client/src/hooks/index.js
index e3bbe32..2f63a32 100644
--- a/packages/client/src/hooks/index.js
+++ b/packages/client/src/hooks/index.js
@@ -9,3 +9,4 @@ export { default as useFlowFees } from './useFlowFees';
export { default as useErrorMessage } from './useErrorMessage';
export { default as useAccount } from './useAccount';
export { default as useContacts } from './useContacts';
+export { default as useAddressAliases } from './useAddressAliases';
diff --git a/packages/client/src/hooks/useAddressAliases.js b/packages/client/src/hooks/useAddressAliases.js
new file mode 100644
index 0000000..e43e609
--- /dev/null
+++ b/packages/client/src/hooks/useAddressAliases.js
@@ -0,0 +1,70 @@
+import { useEffect, useMemo, useReducer } from 'react';
+import addressAliasReducer, {
+ ADDRESS_ALIAS_INITIAL_STATE,
+} from 'reducers/addressAliasReducer';
+
+const storageKey = 'vessel-addresses';
+const treasuryStorageKey = 'vessel-treasuries';
+
+export default function useAddressAliases() {
+ const [state, dispatch] = useReducer(addressAliasReducer, [], (initial) => ({
+ ...initial,
+ ...ADDRESS_ALIAS_INITIAL_STATE,
+ addressAliases: JSON.parse(localStorage.getItem(storageKey) || '{}'),
+ treasuryAliases: JSON.parse(
+ localStorage.getItem(treasuryStorageKey) || '{}'
+ ),
+ }));
+
+ const addressAliases = useMemo(
+ () => state.addressAliases ?? {},
+ [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: {
+ [addr]: name,
+ },
+ });
+ };
+
+ const removeAddressAlias = (addr) => {
+ dispatch({
+ type: 'REMOVE_ADDRESS_ALIAS',
+ payload: addr,
+ });
+ };
+
+ return {
+ 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 f7a6877..7bca6de 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 4088537..0111691 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 () => {
@@ -260,6 +258,8 @@ export default function useTreasury(treasuryAddr) {
return;
}
+ treasuryData.name = treasuryAliases[treasuryAddr] || '';
+
dispatch({
type: 'SET_TREASURY',
payload: {
@@ -304,20 +304,6 @@ export default function useTreasury(treasuryAddr) {
});
};
- 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) {
@@ -333,10 +319,14 @@ export default function useTreasury(treasuryAddr) {
// eslint-disable-next-line
}, [state.loadingTreasuries, treasuryAddr]);
- useEffect(() => {
- 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 +339,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(
@@ -410,7 +392,6 @@ export default function useTreasury(treasuryAddr) {
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/hooks/useVaults.js b/packages/client/src/hooks/useVaults.js
index 9965ad4..cca7c10 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 15e84e4..5153654 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 57acab1..33ae405 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 ca0a201..6a9500d 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,13 +91,10 @@ 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,
- })
- );
+ const newSafeOwners = (treasury?.safeOwners ?? []).map((owner) => ({
+ name: addressAliases[owner.address],
+ address: owner.address,
+ }));
setSafeOwners(newSafeOwners);
checkSafeOwnerAddressesValidity(newSafeOwners);
@@ -104,10 +109,20 @@ function LoadSafe({ web3 }) {
const onOwnerNameChange = (value, idx) => {
const newOwners = safeOwners.slice(0);
newOwners[idx].name = value;
- setSafeOwners([...newOwners]);
};
const onSetTreasury = () => {
+ // Set Address Aliases
+ safeOwners.forEach((so) => {
+ if (so.name) {
+ setAddressAlias(so.address, so.name);
+ }
+ });
+
+ // Set Treasury Alias
+ setTreasuryAlias(safeAddress, safeName);
+
+ // Set Treasury
setTreasury(safeAddress, {
name: safeName,
type: 'Social',
@@ -241,7 +256,7 @@ function LoadSafe({ web3 }) {
- {threshold} of{safeOwners.length} owner(s)
+ {threshold} of {safeOwners.length} owner(s)