From 18912546d3be8c9f103c473e21855f74a341769b Mon Sep 17 00:00:00 2001 From: atticusofsparta Date: Fri, 13 Dec 2024 17:34:03 -0600 Subject: [PATCH 1/5] fix(ant cu url): add ANT cu url on all ant usage --- .../cards/NavMenuCard/NavMenuCard.tsx | 2 +- .../tables/UndernamesSubtable.tsx | 3 +- .../data-display/tables/UndernamesTable.tsx | 3 +- src/components/devtools/NetworkSettings.tsx | 182 ++++++-- .../forms/DomainSettings/DomainSettings.tsx | 11 +- .../NameTokenSelector/NameTokenSelector.tsx | 14 +- .../layout/Breadcrumbs/Breadcrumbs.tsx | 8 +- .../UpgradeUndernames/UpgradeUndernames.tsx | 10 +- .../PrimaryNameModal/PrimaryNameModal.tsx | 4 +- .../EditUndernameModal/EditUndernameModal.tsx | 9 +- .../ReturnNameModal/ReturnNameModal.tsx | 4 +- .../UpgradeAntModal/UpgradeAntModal.tsx | 3 +- src/components/pages/Manage/Manage.tsx | 3 +- src/components/pages/Register/Register.tsx | 18 +- .../pages/Settings/NetworkSettings.tsx | 56 ++- .../pages/Transaction/TransactionReview.tsx | 15 +- src/hooks/useANT/useANT.tsx | 8 +- src/hooks/useDomainInfo.tsx | 13 +- src/hooks/useUndernames/useUndernames.tsx | 424 ------------------ src/state/actions/dispatchANTInteraction.ts | 13 +- src/state/actions/dispatchANTUpdate.ts | 10 +- src/state/actions/dispatchArIOInteraction.ts | 4 +- src/state/actions/dispatchArNSUpdate.ts | 5 +- src/state/contexts/ArNSState.tsx | 4 +- src/state/contexts/GlobalState.tsx | 19 +- src/state/contexts/TransactionState.tsx | 4 +- src/state/reducers/GlobalReducer.ts | 18 +- src/utils/constants.ts | 20 +- src/utils/network.ts | 6 +- 29 files changed, 338 insertions(+), 555 deletions(-) delete mode 100644 src/hooks/useUndernames/useUndernames.tsx diff --git a/src/components/cards/NavMenuCard/NavMenuCard.tsx b/src/components/cards/NavMenuCard/NavMenuCard.tsx index cded33137..c5d6ce75d 100644 --- a/src/components/cards/NavMenuCard/NavMenuCard.tsx +++ b/src/components/cards/NavMenuCard/NavMenuCard.tsx @@ -75,7 +75,7 @@ function NavMenuCard() { buildIOBalanceQuery({ address: walletAddress.toString(), arioContract, - meta: [arioProcessId, aoNetwork.CU_URL], + meta: [arioProcessId, aoNetwork.ARIO.CU_URL], }), ); const arBalance = await queryClient.fetchQuery( diff --git a/src/components/data-display/tables/UndernamesSubtable.tsx b/src/components/data-display/tables/UndernamesSubtable.tsx index 19f576b0f..1088c6371 100644 --- a/src/components/data-display/tables/UndernamesSubtable.tsx +++ b/src/components/data-display/tables/UndernamesSubtable.tsx @@ -52,7 +52,7 @@ const UndernamesSubtable = ({ handlers?: AoANTHandler[]; antId: string; }) => { - const [{ gateway, arioProcessId }] = useGlobalState(); + const [{ gateway, arioProcessId, antAoClient }] = useGlobalState(); const [{ wallet, walletAddress }] = useWalletState(); const [, dispatchTransactionState] = useTransactionState(); const [, dispatchModalState] = useModalState(); @@ -285,6 +285,7 @@ const UndernamesSubtable = ({ signer: wallet.contractSigner!, owner: walletAddress.toString(), dispatch: dispatchTransactionState, + ao: antAoClient, }).then(() => { eventEmitter.emit('success', { message: ( diff --git a/src/components/data-display/tables/UndernamesTable.tsx b/src/components/data-display/tables/UndernamesTable.tsx index 60af60fc7..4fd9beef4 100644 --- a/src/components/data-display/tables/UndernamesTable.tsx +++ b/src/components/data-display/tables/UndernamesTable.tsx @@ -95,7 +95,7 @@ const UndernamesTable = ({ refresh?: () => void; }) => { const [searchParams, setSearchParams] = useSearchParams(); - const [{ gateway, arioProcessId }] = useGlobalState(); + const [{ gateway, arioProcessId, antAoClient }] = useGlobalState(); const [{ wallet, walletAddress }] = useWalletState(); const [, dispatchTransactionState] = useTransactionState(); const [, dispatchModalState] = useModalState(); @@ -143,6 +143,7 @@ const UndernamesTable = ({ signer: wallet?.contractSigner, owner: walletAddress?.toString(), dispatch: dispatchTransactionState, + ao: antAoClient, }); eventEmitter.emit('success', { name: 'Manage Undernames', diff --git a/src/components/devtools/NetworkSettings.tsx b/src/components/devtools/NetworkSettings.tsx index c53b3b881..1559a3459 100644 --- a/src/components/devtools/NetworkSettings.tsx +++ b/src/components/devtools/NetworkSettings.tsx @@ -28,12 +28,23 @@ function NetworkSettings() { const [{ wallet }] = useWalletState(); const [newGateway, setNewGateway] = useState(gateway); const [validGateway, setValidGateway] = useState(true); - const [newCuUrl, setNewCuUrl] = useState(NETWORK_DEFAULTS.AO.CU_URL); - const [validCuUrl, setValidCuUrl] = useState(true); - const [newMuUrl, setNewMuUrl] = useState(NETWORK_DEFAULTS.AO.MU_URL); + + const [newARIOCuUrl, setNewARIOCuUrl] = useState( + NETWORK_DEFAULTS.AO.ARIO.CU_URL, + ); + const [validARIOCuUrl, setValidARIOCuUrl] = useState(true); + + const [newANTCuUrl, setNewANTCuUrl] = useState( + NETWORK_DEFAULTS.AO.ANT.CU_URL, + ); + const [validANTCuUrl, setValidANTCuUrl] = useState(true); + + const [newMuUrl, setNewMuUrl] = useState( + NETWORK_DEFAULTS.AO.ARIO.MU_URL, + ); const [validMuUrl, setValidMuUrl] = useState(true); const [newSuAddress, setNewSuAddress] = useState( - NETWORK_DEFAULTS.AO.SCHEDULER, + NETWORK_DEFAULTS.AO.ARIO.SCHEDULER, ); const [validSuAddress, setValidSuAddress] = useState(true); const [showGatewayModal, setShowGatewayModal] = useState(false); @@ -44,16 +55,16 @@ function NetworkSettings() { setValidGateway(true); updateGateway(NETWORK_DEFAULTS.ARWEAVE.HOST); // ao network - setNewCuUrl(NETWORK_DEFAULTS.AO.CU_URL); - setValidCuUrl(true); - setNewMuUrl(NETWORK_DEFAULTS.AO.MU_URL); + setNewARIOCuUrl(NETWORK_DEFAULTS.AO.ARIO.CU_URL); + setValidARIOCuUrl(true); + setNewMuUrl(NETWORK_DEFAULTS.AO.ARIO.MU_URL); setValidMuUrl(true); - setNewSuAddress(NETWORK_DEFAULTS.AO.SCHEDULER); + setNewSuAddress(NETWORK_DEFAULTS.AO.ARIO.SCHEDULER); setValidSuAddress(true); - updateAoNetwork({ - CU_URL: NETWORK_DEFAULTS.AO.CU_URL, - MU_URL: NETWORK_DEFAULTS.AO.MU_URL, - SCHEDULER: NETWORK_DEFAULTS.AO.SCHEDULER, + updateARIOAoNetwork({ + CU_URL: NETWORK_DEFAULTS.AO.ARIO.CU_URL, + MU_URL: NETWORK_DEFAULTS.AO.ARIO.MU_URL, + SCHEDULER: NETWORK_DEFAULTS.AO.ARIO.SCHEDULER, }); } @@ -63,13 +74,13 @@ function NetworkSettings() { }, [gateway]); useEffect(() => { - setNewCuUrl(aoNetwork.CU_URL); - setValidCuUrl(true); - setNewMuUrl(aoNetwork.MU_URL); + setNewARIOCuUrl(aoNetwork.ARIO.CU_URL); + setValidARIOCuUrl(true); + setNewMuUrl(aoNetwork.ARIO.MU_URL); setValidMuUrl(true); - setNewSuAddress(aoNetwork.SCHEDULER); + setNewSuAddress(aoNetwork.ARIO.SCHEDULER); setValidSuAddress(true); - }, [aoNetwork]); + }, [aoNetwork.ARIO]); async function updateGateway(gate: string) { try { @@ -93,7 +104,7 @@ function NetworkSettings() { } } - function updateAoNetwork(config: { + function updateARIOAoNetwork(config: { CU_URL?: string; MU_URL?: string; SCHEDULER?: string; @@ -101,8 +112,7 @@ function NetworkSettings() { try { const newConfig = { ...aoNetwork, - ...config, - GATEWAY_URL: gateway, + ...{ ARIO: { ...aoNetwork.ARIO, ...config, GATEWAY_URL: gateway } }, }; dispatchGlobalState({ type: 'setAONetwork', @@ -111,11 +121,11 @@ function NetworkSettings() { const ao = connect({ GATEWAY_URL: 'https://' + gateway, - CU_URL: newConfig.CU_URL, - MU_URL: newConfig.MU_URL, + CU_URL: newConfig.ARIO.CU_URL, + MU_URL: newConfig.ARIO.MU_URL, }); dispatchGlobalState({ - type: 'setAoClient', + type: 'setARIOAoClient', payload: ao, }); dispatchArIOContract({ @@ -133,6 +143,30 @@ function NetworkSettings() { } } + function updateANTAoNetwork(config: { CU_URL?: string }) { + try { + const newConfig = { + ...aoNetwork, + ...{ ANT: { ...aoNetwork.ANT, ...config } }, + }; + dispatchGlobalState({ + type: 'setAONetwork', + payload: newConfig, + }); + + const ao = connect({ + GATEWAY_URL: 'https://' + gateway, + CU_URL: newConfig.ANT.CU_URL, + }); + dispatchGlobalState({ + type: 'setANTAoClient', + payload: ao, + }); + } catch (error) { + eventEmitter.emit('error', error); + } + } + return (
@@ -208,42 +242,90 @@ function NetworkSettings() { } /> - CU URL:{' '} - {aoNetwork.CU_URL} + ARIO CU URL:{' '} + {aoNetwork.ARIO.CU_URL} { - setValidCuUrl(isValidURL(e.target.value.trim())); - setNewCuUrl(e.target.value.trim()); + setValidARIOCuUrl(isValidURL(e.target.value.trim())); + setNewARIOCuUrl(e.target.value.trim()); }} - onClear={() => setNewCuUrl('')} + onClear={() => setNewARIOCuUrl('')} onPressEnter={(e) => - updateAoNetwork({ + updateARIOAoNetwork({ CU_URL: e.currentTarget.value.trim(), }) } variant="outlined" - status={validCuUrl ? '' : 'error'} + status={validARIOCuUrl ? '' : 'error'} addonAfter={
+
+ } + /> + + ANT CU URL:{' '} + {aoNetwork.ANT.CU_URL} + + { + setValidANTCuUrl(isValidURL(e.target.value.trim())); + setNewANTCuUrl(e.target.value.trim()); + }} + onClear={() => setNewANTCuUrl('')} + onPressEnter={(e) => + updateANTAoNetwork({ + CU_URL: e.currentTarget.value.trim(), + }) + } + variant="outlined" + status={validANTCuUrl ? '' : 'error'} + addonAfter={ +
+ + - ), - dataIndex: 'name', - key: 'name', - align: 'left', - width: '18%', - className: 'grey manage-assets-table-header', - ellipsis: true, - onHeaderCell: () => { - return { - onClick: () => { - rows.sort((a: UndernameMetadata, b: UndernameMetadata) => - // by default we sort by name - !sortAscending - ? a.name.localeCompare(b.name) - : b.name.localeCompare(a.name), - ); - // forces update of rows - setRows([...rows]); - setSortOrder(!sortAscending); - }, - }; - }, - render: (val: string, row: UndernameMetadata) => ( - - {val} - - ), - }, - { - title: ( - - ), - dataIndex: 'targetID', - key: 'targetID', - align: 'left', - width: '18%', - className: 'grey manage-assets-table-header', - render: (val: string) => - val === 'N/A' || !isArweaveTransactionID(val) ? ( - val - ) : ( - - ), - onHeaderCell: () => { - return { - onClick: () => { - rows.sort((a: any, b: any) => - sortAscending - ? a.targetID.localeCompare(b.targetID) - : b.targetID.localeCompare(a.targetID), - ); - // forces update of rows - setRows([...rows]); - setSortOrder(!sortAscending); - }, - }; - }, - }, - { - title: ( - - ), - dataIndex: 'ttlSeconds', - key: 'ttlSeconds', - align: 'left', - width: '18%', - className: 'grey manage-assets-table-header', - render: (val: string) => val, - onHeaderCell: () => { - return { - onClick: () => { - rows.sort((a: any, b: any) => - sortAscending - ? a.ttlSeconds - b.ttlSeconds - : b.ttlSeconds - a.ttlSeconds, - ); - // forces update of rows - setRows([...rows]); - setSortOrder(!sortAscending); - }, - }; - }, - }, - { - title: ( -
- - {searchOpen ? ( - - setSearchText(e)} - catchInvalidInput={true} - showValidationIcon={false} - placeholder={'Search for a name'} - maxCharLength={61} - wrapperCustomStyle={{ - position: 'relative', - boxSizing: 'border-box', - }} - inputCustomStyle={{ - width: '100%', - minWidth: '100px', - overflow: 'hidden', - fontSize: '13px', - outline: 'none', - color: 'white', - alignContent: 'center', - borderBottom: 'none', - boxSizing: 'border-box', - background: 'transparent', - borderRadius: 'var(--corner-radius)', - border: 'none', - paddingRight: '10px', - }} - customPattern={ARNS_NAME_REGEX_PARTIAL} - validationPredicates={{}} - /> - - - ) : ( - <> - )} -
- ), - className: 'manage-assets-table-header', - render: (value, row) => ( -
- {isAuthorized && ( - <> - - - - - - - - - )} -
- ), - align: 'right', - width: '10%', - key: 'action', - dataIndex: 'action', - }, - ]; - return newColumns; - } - - async function fetchUndernameRows( - id?: ArweaveTransactionID, - name?: string, - ): Promise { - let processId: ArweaveTransactionID | undefined = undefined; - if (id) { - processId = id; - } else if (name) { - const arnsRecord = domains[name]; - if (arnsRecord) - processId = new ArweaveTransactionID(arnsRecord.processId); - } - - if (!processId) { - setIsLoading(false); - return; - } - setIsLoading(true); - const domain = Object.keys(domains).find( - (d) => domains[d].processId === processId?.toString(), - ); - const state = await ANT.init({ - processId: processId.toString(), - }).getState(); - - const rows = Object.entries(state.Records) - .map(([name, record]) => - name === '@' - ? undefined - : { - domain, - name, - targetID: record.transactionId, - ttlSeconds: record.ttlSeconds, - status: 0, - key: name, - }, - ) - .filter((row) => row !== undefined) - .sort((a, b) => a!.status - b!.status); - setRows(rows as UndernameMetadata[]); - const authorized = walletAddress - ? state.Controllers.includes(walletAddress.toString()) || - state.Owner === walletAddress.toString() - : false; - setIsAuthorized(authorized); - setIsLoading(false); - } - - return { - isLoading, - columns, - rows: filteredResults.length ? filteredResults : rows, - sortField, - sortAscending, - selectedRow, - action, - setAction: (action: UNDERNAME_TABLE_ACTIONS | undefined) => - setAction(action), - refresh: () => fetchUndernameRows(id, name), - }; -} diff --git a/src/state/actions/dispatchANTInteraction.ts b/src/state/actions/dispatchANTInteraction.ts index ca4b5a662..936771a7c 100644 --- a/src/state/actions/dispatchANTInteraction.ts +++ b/src/state/actions/dispatchANTInteraction.ts @@ -1,4 +1,11 @@ -import { ANT, ARIO, AoMessageResult, ContractSigner } from '@ar.io/sdk/web'; +import { + ANT, + AOProcess, + ARIO, + AoClient, + AoMessageResult, + ContractSigner, +} from '@ar.io/sdk/web'; import { TransactionAction } from '@src/state/reducers/TransactionReducer'; import { ANT_INTERACTION_TYPES, ContractInteraction } from '@src/types'; import { lowerCaseDomain } from '@src/utils'; @@ -13,6 +20,7 @@ export default async function dispatchANTInteraction({ signer, owner, dispatch, + ao, }: { payload: Record; workflowName: ANT_INTERACTION_TYPES; @@ -20,6 +28,7 @@ export default async function dispatchANTInteraction({ owner: string; processId: string; dispatch: Dispatch; + ao: AoClient; }): Promise { let result: AoMessageResult | undefined = undefined; const aoCongestedTimeout = setTimeout( @@ -29,7 +38,7 @@ export default async function dispatchANTInteraction({ 1000 * 10, ); const antProcess = ANT.init({ - processId: processId, + process: new AOProcess({ processId, ao }), signer, }); const dispatchSigningMessage = (message?: string) => { diff --git a/src/state/actions/dispatchANTUpdate.ts b/src/state/actions/dispatchANTUpdate.ts index 88c6bfdae..704589948 100644 --- a/src/state/actions/dispatchANTUpdate.ts +++ b/src/state/actions/dispatchANTUpdate.ts @@ -1,4 +1,4 @@ -import { ANT } from '@ar.io/sdk'; +import { ANT, AOProcess, AoClient } from '@ar.io/sdk'; import { AoAddress } from '@src/types'; import eventEmitter from '@src/utils/events'; import { buildAntStateQuery } from '@src/utils/network'; @@ -12,23 +12,27 @@ export async function dispatchANTUpdate({ processId, walletAddress, dispatch, + ao, }: { queryClient: QueryClient; processId: string; walletAddress: AoAddress; dispatch: Dispatch; + ao: AoClient; }) { try { dispatch({ type: 'setLoading', payload: true, }); - const antStateQuery = buildAntStateQuery({ processId }); + const antStateQuery = buildAntStateQuery({ processId, ao }); const state = await queryClient.fetchQuery(antStateQuery); const handlers = await queryClient.fetchQuery({ queryKey: ['handlers', processId], queryFn: async () => { - return await ANT.init({ processId }).getHandlers().catch(console.error); + return await ANT.init({ process: new AOProcess({ processId, ao }) }) + .getHandlers() + .catch(console.error); }, }); diff --git a/src/state/actions/dispatchArIOInteraction.ts b/src/state/actions/dispatchArIOInteraction.ts index c58662b78..cccc44dec 100644 --- a/src/state/actions/dispatchArIOInteraction.ts +++ b/src/state/actions/dispatchArIOInteraction.ts @@ -31,6 +31,7 @@ export default async function dispatchArIOInteraction({ dispatch, signer, ao, + antAo, scheduler = DEFAULT_SCHEDULER_ID, }: { payload: Record; @@ -41,6 +42,7 @@ export default async function dispatchArIOInteraction({ dispatch: Dispatch; signer?: ContractSigner; ao?: AoClient; + antAo?: AoClient; scheduler?: string; }): Promise { let result: AoMessageResult | undefined = undefined; @@ -157,7 +159,7 @@ export default async function dispatchArIOInteraction({ const antProcess = ANT.init({ signer, process: new AOProcess({ - ao, + ao: antAo, processId: payload.antProcessId, }), }); diff --git a/src/state/actions/dispatchArNSUpdate.ts b/src/state/actions/dispatchArNSUpdate.ts index 5b6ed0359..25638a5ac 100644 --- a/src/state/actions/dispatchArNSUpdate.ts +++ b/src/state/actions/dispatchArNSUpdate.ts @@ -1,5 +1,6 @@ import { ANT, + AOProcess, AoANTHandler, AoANTState, AoClient, @@ -20,12 +21,14 @@ export function dispatchArNSUpdate({ walletAddress, arioProcessId, ao, + antAo, }: { emitter: ArNSEventEmitter; dispatch: Dispatch; walletAddress: AoAddress; arioProcessId: string; ao: AoClient; + antAo: AoClient; }) { dispatch({ type: 'setDomains', payload: {} }); dispatch({ type: 'setAnts', payload: {} }); @@ -64,7 +67,7 @@ export function dispatchArNSUpdate({ } return await ANT.init({ - processId: id, + process: new AOProcess({ processId: id, ao: antAo }), }) .getHandlers() .catch(console.error); diff --git a/src/state/contexts/ArNSState.tsx b/src/state/contexts/ArNSState.tsx index be4d461d6..dbe4717ea 100644 --- a/src/state/contexts/ArNSState.tsx +++ b/src/state/contexts/ArNSState.tsx @@ -59,7 +59,8 @@ export function ArNSStateProvider({ reducer, children, }: ArNSStateProviderProps): JSX.Element { - const [{ arioContract, arioProcessId, aoClient }] = useGlobalState(); + const [{ arioContract, arioProcessId, aoClient, antAoClient }] = + useGlobalState(); const [state, dispatchArNSState] = useReducer(reducer, initialArNSState); const [{ walletAddress }] = useWalletState(); @@ -78,6 +79,7 @@ export function ArNSStateProvider({ if (!walletAddress) return; dispatchArNSUpdate({ ao: aoClient, + antAo: antAoClient, dispatch: dispatchArNSState, emitter: state.arnsEmitter, walletAddress: walletAddress, diff --git a/src/state/contexts/GlobalState.tsx b/src/state/contexts/GlobalState.tsx index b366c45cc..5b235a6e4 100644 --- a/src/state/contexts/GlobalState.tsx +++ b/src/state/contexts/GlobalState.tsx @@ -18,7 +18,7 @@ import React, { import { ArweaveCompositeDataProvider } from '../../services/arweave/ArweaveCompositeDataProvider'; import { SimpleArweaveDataProvider } from '../../services/arweave/SimpleArweaveDataProvider'; import { - AO_CU_URL, + ARIO_AO_CU_URL, ARIO_PROCESS_ID, ARWEAVE_HOST, DEFAULT_ARWEAVE, @@ -31,7 +31,7 @@ export const defaultArIO = ARIO.init({ process: new AOProcess({ processId: ARIO_PROCESS_ID, ao: connect({ - CU_URL: AO_CU_URL, + CU_URL: ARIO_AO_CU_URL, }), }), }); @@ -40,11 +40,17 @@ export type GlobalState = { arioTicker: string; gateway: string; aoNetwork: { - CU_URL: string; - MU_URL: string; - SCHEDULER: string; + ARIO: { + CU_URL: string; + MU_URL: string; + SCHEDULER: string; + }; + ANT: { + CU_URL: string; + }; }; aoClient: AoClient; + antAoClient: AoClient; arioProcessId: string; blockHeight?: number; lastBlockUpdateTimestamp?: number; @@ -57,7 +63,8 @@ const initialState: GlobalState = { arioTicker: 'ARIO', gateway: ARWEAVE_HOST, aoNetwork: NETWORK_DEFAULTS.AO, - aoClient: connect(NETWORK_DEFAULTS.AO), + aoClient: connect(NETWORK_DEFAULTS.AO.ARIO), + antAoClient: connect(NETWORK_DEFAULTS.AO.ANT), blockHeight: undefined, lastBlockUpdateTimestamp: undefined, arweaveDataProvider: new ArweaveCompositeDataProvider({ diff --git a/src/state/contexts/TransactionState.tsx b/src/state/contexts/TransactionState.tsx index c1def5c8e..043b8ef79 100644 --- a/src/state/contexts/TransactionState.tsx +++ b/src/state/contexts/TransactionState.tsx @@ -8,7 +8,7 @@ import { useReducer, } from 'react'; -import { useArNSState } from '.'; +import { useArNSState, useGlobalState } from '.'; import { ArweaveTransactionID } from '../../services/arweave/ArweaveTransactionID'; import { ANT_INTERACTION_TYPES, @@ -58,6 +58,7 @@ export function TransactionStateProvider({ ); const queryClient = useQueryClient(); + const [{ antAoClient }] = useGlobalState(); const [walletState] = useWalletState(); const [, dispatchArNSState] = useArNSState(); @@ -91,6 +92,7 @@ export function TransactionStateProvider({ processId: state.interactionResult?.processId, walletAddress: walletState.walletAddress, dispatch: dispatchArNSState, + ao: antAoClient, }); } }, [state.interactionResult, queryClient, walletState]); diff --git a/src/state/reducers/GlobalReducer.ts b/src/state/reducers/GlobalReducer.ts index 6a7b324a4..372771dec 100644 --- a/src/state/reducers/GlobalReducer.ts +++ b/src/state/reducers/GlobalReducer.ts @@ -14,13 +14,16 @@ export type GlobalAction = | { type: 'setAONetwork'; payload: { - CU_URL?: string; - MU_URL?: string; - SCHEDULER?: string; + ARIO?: { CU_URL: string; MU_URL: string; SCHEDULER: string }; + ANT?: { CU_URL: string }; }; } | { - type: 'setAoClient'; + type: 'setARIOAoClient'; + payload: AoClient; + } + | { + type: 'setANTAoClient'; payload: AoClient; } | { @@ -59,11 +62,16 @@ export const reducer = ( ...action.payload, }, }; - case 'setAoClient': + case 'setARIOAoClient': return { ...state, aoClient: action.payload, }; + case 'setANTAoClient': + return { + ...state, + antAoClient: action.payload, + }; case 'setBlockHeight': return { ...state, diff --git a/src/utils/constants.ts b/src/utils/constants.ts index ce0132595..e3d243759 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -92,13 +92,25 @@ export const ARIO_PROCESS_ID = process.env.VITE_ARIO_PROCESS_ID || arioDevnetProcessId; export const DEFAULT_ANT_LUA_ID = ANT_LUA_ID; -export const AO_CU_URL = process.env.VITE_AO_CU_URL || 'https://cu.ardrive.io'; +export const ARIO_AO_CU_URL = + process.env.VITE_ARIO_AO_CU_URL || 'https://cu.ardrive.io'; + +export const ANT_AO_CU_URL = + process.env.VITE_ARIO_AO_CU_URL || 'https://cu.ao-testnet.xyz'; export const NETWORK_DEFAULTS = { AO: { - CU_URL: AO_CU_URL, // ao public cu: https://cu.ao-testnet.xyz - MU_URL: 'https://mu.ao-testnet.xyz', - SCHEDULER: DEFAULT_SCHEDULER_ID, + ARIO: { + CU_URL: ARIO_AO_CU_URL, // ao public cu: https://cu.ao-testnet.xyz + MU_URL: 'https://mu.ao-testnet.xyz', + SCHEDULER: DEFAULT_SCHEDULER_ID, + }, + + ANT: { + CU_URL: ANT_AO_CU_URL, + MU_URL: 'https://mu.ao-testnet.xyz', + SCHEDULER: DEFAULT_SCHEDULER_ID, + }, }, ARWEAVE: { HOST: ARWEAVE_HOST, diff --git a/src/utils/network.ts b/src/utils/network.ts index fa060f370..a239fd69d 100644 --- a/src/utils/network.ts +++ b/src/utils/network.ts @@ -1,8 +1,10 @@ import { ANT, + AOProcess, AoANTState, AoARIORead, AoArNSNameData, + AoClient, fetchAllArNSRecords, mARIOToken, } from '@ar.io/sdk/web'; @@ -46,9 +48,11 @@ export const queryClient = new QueryClient({ export function buildAntStateQuery({ processId, + ao, meta, }: { processId: string; + ao: AoClient; meta?: string[]; }): { queryKey: ['ant', string] | string[]; @@ -60,7 +64,7 @@ export function buildAntStateQuery({ queryFn: async () => { if (!processId) return null; if (isArweaveTransactionID(processId)) { - const ant = ANT.init({ processId }); + const ant = ANT.init({ process: new AOProcess({ processId, ao }) }); return ant.getState().catch((e) => { eventEmitter.emit( 'error', From 1cf6221f4fcf239317ac93399014c879281db81b Mon Sep 17 00:00:00 2001 From: atticusofsparta Date: Fri, 24 Jan 2025 11:57:27 -0600 Subject: [PATCH 2/5] fix(ao-ar-io): add antAoClient to ftching in arns update --- package.json | 2 +- src/state/contexts/ArNSState.tsx | 6 +++++- yarn.lock | 8 ++++---- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index ff1ea3463..d215fae4a 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ }, "dependencies": { "@ant-design/icons": "5.4.0", - "@ar.io/sdk": "^3.3.0-alpha.11", + "@ar.io/sdk": "^3.3.0-alpha.15", "@permaweb/aoconnect": "^0.0.59", "@radix-ui/react-radio-group": "^1.2.1", "@radix-ui/react-select": "^2.1.4", diff --git a/src/state/contexts/ArNSState.tsx b/src/state/contexts/ArNSState.tsx index dbe4717ea..9529e3776 100644 --- a/src/state/contexts/ArNSState.tsx +++ b/src/state/contexts/ArNSState.tsx @@ -4,6 +4,8 @@ import { AoArNSNameData, ArNSEventEmitter, } from '@ar.io/sdk/web'; +import { connect } from '@permaweb/aoconnect'; +import { NETWORK_DEFAULTS } from '@src/utils/constants'; import { Dispatch, createContext, @@ -36,6 +38,7 @@ export const initialArNSState: ArNSState = { contract: defaultArIO, timeoutMs: 1000 * 60 * 5, strict: false, + antAoClient: connect(NETWORK_DEFAULTS.AO.ANT), }), domains: {}, ants: {}, @@ -71,9 +74,10 @@ export function ArNSStateProvider({ contract: arioContract, timeoutMs: 1000 * 60 * 5, strict: false, + antAoClient: antAoClient, }), }); - }, [arioContract]); + }, [arioContract, antAoClient]); useEffect(() => { if (!walletAddress) return; diff --git a/yarn.lock b/yarn.lock index edd1737f3..35a802266 100644 --- a/yarn.lock +++ b/yarn.lock @@ -108,10 +108,10 @@ plimit-lit "^3.0.1" warp-contracts "1.4.45" -"@ar.io/sdk@^3.3.0-alpha.11": - version "3.3.0-alpha.11" - resolved "https://registry.yarnpkg.com/@ar.io/sdk/-/sdk-3.3.0-alpha.11.tgz#4ecb67a7f869d989b46b24d7922e119cfef9577e" - integrity sha512-hxMTRQtW0ZXIUjRDKrbbtdMD8KxcPhH46BRShc8KteVPkv6BUrWfvfIdx8Lu08QQmWnVpC2xFdq3FqexpC3N5g== +"@ar.io/sdk@^3.3.0-alpha.15": + version "3.3.0-alpha.15" + resolved "https://registry.yarnpkg.com/@ar.io/sdk/-/sdk-3.3.0-alpha.15.tgz#5b0a2a469056dfc2e025607d7d172b3b8ed0f326" + integrity sha512-UUEH3oZXhXDPmPP18RvNO816P9Uho95zgikI1Zj7mGi/EIzEBU//34Yb6vzMx9/x2bKUmYPbkgTiBOm0RTeKcw== dependencies: "@dha-team/arbundles" "^1.0.1" "@permaweb/aoconnect" "^0.0.57" From b3ae198faf77dc078dfc3cc1ef006b3dff3810f6 Mon Sep 17 00:00:00 2001 From: atticusofsparta Date: Mon, 27 Jan 2025 09:10:24 -0600 Subject: [PATCH 3/5] fix(ants): use ant ao for dry run on eth support --- src/state/actions/dispatchArNSUpdate.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/state/actions/dispatchArNSUpdate.ts b/src/state/actions/dispatchArNSUpdate.ts index cdd634968..4a9605870 100644 --- a/src/state/actions/dispatchArNSUpdate.ts +++ b/src/state/actions/dispatchArNSUpdate.ts @@ -43,7 +43,7 @@ export function dispatchArNSUpdate({ queryKey: ['handlers', id], queryFn: async () => { // validate transfer supports eth addresses - const dryTransferRes = await ao + const dryTransferRes = await antAo .dryrun({ process: id, Owner: walletAddress.toString(), From 5895b2a024d34d8f735db29460277518e0971c73 Mon Sep 17 00:00:00 2001 From: atticusofsparta Date: Mon, 27 Jan 2025 09:35:52 -0600 Subject: [PATCH 4/5] fix(cu url ant): add network settings for ao network to control query cache on ANT queries --- .../ReassignNameModal/ReassignNameModal.tsx | 4 +++- .../ReturnNameModal/ReturnNameModal.tsx | 4 +++- src/components/pages/Manage/Manage.tsx | 4 +++- .../pages/Transaction/TransactionReview.tsx | 1 + src/state/actions/dispatchArNSUpdate.ts | 6 ++++-- src/state/contexts/ArNSState.tsx | 3 ++- src/state/contexts/GlobalState.tsx | 11 +---------- src/state/reducers/GlobalReducer.ts | 6 ++---- 8 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/components/modals/ant-management/ReassignNameModal/ReassignNameModal.tsx b/src/components/modals/ant-management/ReassignNameModal/ReassignNameModal.tsx index 60ce877c2..ee534f766 100644 --- a/src/components/modals/ant-management/ReassignNameModal/ReassignNameModal.tsx +++ b/src/components/modals/ant-management/ReassignNameModal/ReassignNameModal.tsx @@ -53,7 +53,8 @@ export function ReassignNameModal({ name: string; }) { const queryClient = useQueryClient(); - const [{ arioProcessId, aoClient, antAoClient }] = useGlobalState(); + const [{ arioProcessId, aoClient, antAoClient, aoNetwork }] = + useGlobalState(); const [{ arnsEmitter }, dispatchArNSState] = useArNSState(); const [{ signing }, dispatchTransactionState] = useTransactionState(); const [{ wallet, walletAddress }] = useWalletState(); @@ -158,6 +159,7 @@ export function ReassignNameModal({ emitter: arnsEmitter, ao: aoClient, antAo: antAoClient, + aoNetworkSettings: aoNetwork, }); handleClose(); } catch (error) { diff --git a/src/components/modals/ant-management/ReturnNameModal/ReturnNameModal.tsx b/src/components/modals/ant-management/ReturnNameModal/ReturnNameModal.tsx index c412274d4..627583811 100644 --- a/src/components/modals/ant-management/ReturnNameModal/ReturnNameModal.tsx +++ b/src/components/modals/ant-management/ReturnNameModal/ReturnNameModal.tsx @@ -34,7 +34,8 @@ export function ReturnNameModal({ }) { const queryClient = useQueryClient(); const navigate = useNavigate(); - const [{ arioProcessId, aoClient, antAoClient }] = useGlobalState(); + const [{ arioProcessId, aoClient, antAoClient, aoNetwork }] = + useGlobalState(); const [{ arnsEmitter }, dispatchArNSState] = useArNSState(); const [{ signing }, dispatchTransactionState] = useTransactionState(); const [{ wallet, walletAddress }] = useWalletState(); @@ -90,6 +91,7 @@ export function ReturnNameModal({ arioProcessId, dispatch: dispatchArNSState, emitter: arnsEmitter, + aoNetworkSettings: aoNetwork, }); setShow(false); navigate('/manage'); diff --git a/src/components/pages/Manage/Manage.tsx b/src/components/pages/Manage/Manage.tsx index a552d6972..31651b516 100644 --- a/src/components/pages/Manage/Manage.tsx +++ b/src/components/pages/Manage/Manage.tsx @@ -15,7 +15,8 @@ import { RefreshIcon, SearchIcon } from '../../icons'; import './styles.css'; function Manage() { - const [{ arioProcessId, aoClient, antAoClient }] = useGlobalState(); + const [{ arioProcessId, aoClient, antAoClient, aoNetwork }] = + useGlobalState(); const [ { loading: loadingArnsState, domains, ants, arnsEmitter }, dispatchArNSState, @@ -100,6 +101,7 @@ function Manage() { dispatch: dispatchArNSState, walletAddress: walletAddress, arioProcessId, + aoNetworkSettings: aoNetwork, }) : eventEmitter.emit('error', { name: 'Manage Assets', diff --git a/src/components/pages/Transaction/TransactionReview.tsx b/src/components/pages/Transaction/TransactionReview.tsx index 3a684d4f8..dfd637099 100644 --- a/src/components/pages/Transaction/TransactionReview.tsx +++ b/src/components/pages/Transaction/TransactionReview.tsx @@ -137,6 +137,7 @@ function TransactionReview() { dispatch: dispatchArNSState, arioProcessId, walletAddress, + aoNetworkSettings: aoNetwork, }); } } diff --git a/src/state/actions/dispatchArNSUpdate.ts b/src/state/actions/dispatchArNSUpdate.ts index 4a9605870..0349975ea 100644 --- a/src/state/actions/dispatchArNSUpdate.ts +++ b/src/state/actions/dispatchArNSUpdate.ts @@ -8,6 +8,7 @@ import { } from '@ar.io/sdk/web'; import { captureException } from '@sentry/react'; import { AoAddress } from '@src/types'; +import { NETWORK_DEFAULTS } from '@src/utils/constants'; import eventEmitter from '@src/utils/events'; import { queryClient } from '@src/utils/network'; import { Tag } from 'arweave/node/lib/transaction'; @@ -22,6 +23,7 @@ export function dispatchArNSUpdate({ arioProcessId, ao, antAo, + aoNetworkSettings, }: { emitter: ArNSEventEmitter; dispatch: Dispatch; @@ -29,6 +31,7 @@ export function dispatchArNSUpdate({ arioProcessId: string; ao: AoClient; antAo: AoClient; + aoNetworkSettings: typeof NETWORK_DEFAULTS.AO; }) { dispatch({ type: 'setDomains', payload: {} }); dispatch({ type: 'setAnts', payload: {} }); @@ -40,7 +43,7 @@ export function dispatchArNSUpdate({ }); emitter.on('process', async (id, process) => { const handlers = await queryClient.fetchQuery({ - queryKey: ['handlers', id], + queryKey: ['handlers', id, aoNetworkSettings.ANT], queryFn: async () => { // validate transfer supports eth addresses const dryTransferRes = await antAo @@ -75,7 +78,6 @@ export function dispatchArNSUpdate({ return null; }); }, - staleTime: Infinity, }); dispatch({ diff --git a/src/state/contexts/ArNSState.tsx b/src/state/contexts/ArNSState.tsx index 9529e3776..2f1b6dcc6 100644 --- a/src/state/contexts/ArNSState.tsx +++ b/src/state/contexts/ArNSState.tsx @@ -62,7 +62,7 @@ export function ArNSStateProvider({ reducer, children, }: ArNSStateProviderProps): JSX.Element { - const [{ arioContract, arioProcessId, aoClient, antAoClient }] = + const [{ arioContract, arioProcessId, aoClient, antAoClient, aoNetwork }] = useGlobalState(); const [state, dispatchArNSState] = useReducer(reducer, initialArNSState); const [{ walletAddress }] = useWalletState(); @@ -88,6 +88,7 @@ export function ArNSStateProvider({ emitter: state.arnsEmitter, walletAddress: walletAddress, arioProcessId: arioProcessId, + aoNetworkSettings: aoNetwork, }); }, [walletAddress, state.arnsEmitter]); diff --git a/src/state/contexts/GlobalState.tsx b/src/state/contexts/GlobalState.tsx index 5b235a6e4..b00741d30 100644 --- a/src/state/contexts/GlobalState.tsx +++ b/src/state/contexts/GlobalState.tsx @@ -39,16 +39,7 @@ export const defaultArIO = ARIO.init({ export type GlobalState = { arioTicker: string; gateway: string; - aoNetwork: { - ARIO: { - CU_URL: string; - MU_URL: string; - SCHEDULER: string; - }; - ANT: { - CU_URL: string; - }; - }; + aoNetwork: typeof NETWORK_DEFAULTS.AO; aoClient: AoClient; antAoClient: AoClient; arioProcessId: string; diff --git a/src/state/reducers/GlobalReducer.ts b/src/state/reducers/GlobalReducer.ts index 372771dec..5dd1b7e02 100644 --- a/src/state/reducers/GlobalReducer.ts +++ b/src/state/reducers/GlobalReducer.ts @@ -1,4 +1,5 @@ import { AoARIORead, AoARIOWrite, AoClient } from '@ar.io/sdk/web'; +import { NETWORK_DEFAULTS } from '@src/utils/constants'; import { ArweaveCompositeDataProvider } from '../../services/arweave/ArweaveCompositeDataProvider'; import { GlobalState } from '../contexts/GlobalState'; @@ -13,10 +14,7 @@ export type GlobalAction = } | { type: 'setAONetwork'; - payload: { - ARIO?: { CU_URL: string; MU_URL: string; SCHEDULER: string }; - ANT?: { CU_URL: string }; - }; + payload: typeof NETWORK_DEFAULTS.AO; } | { type: 'setARIOAoClient'; From b5b3635b0bd1c86a021c92854eefe125bdd878d7 Mon Sep 17 00:00:00 2001 From: atticusofsparta Date: Mon, 27 Jan 2025 09:54:55 -0600 Subject: [PATCH 5/5] fix(devtools): fix ant cu url button --- src/components/devtools/NetworkSettings.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/devtools/NetworkSettings.tsx b/src/components/devtools/NetworkSettings.tsx index 1559a3459..e346f8b1a 100644 --- a/src/components/devtools/NetworkSettings.tsx +++ b/src/components/devtools/NetworkSettings.tsx @@ -313,7 +313,7 @@ function NetworkSettings() { disabled={!validANTCuUrl} className="bg-primary text-black h-full flex w-fit p-1 rounded-sm text-xs" onClick={() => - updateARIOAoNetwork({ CU_URL: newANTCuUrl.trim() }) + updateANTAoNetwork({ CU_URL: newANTCuUrl.trim() }) } > Set ANT CU url