diff --git a/src/config/index.ts b/src/config/index.ts index ec5c367d34..26be95a074 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -78,13 +78,13 @@ export const getNetworkConfigFeatures = (): SafeFeatures | undefined => getConfi export const getNetworkInfo = (): NetworkSettings => getConfig()?.network -export const getTxServiceUriFrom = (safeAddress: string) => `safes/${safeAddress}/transactions/` +export const getTxServiceUriFrom = (safeAddress: string) => `/safes/${safeAddress}/transactions/` -export const getIncomingTxServiceUriTo = (safeAddress: string) => `safes/${safeAddress}/incoming-transfers/` +export const getIncomingTxServiceUriTo = (safeAddress: string) => `/safes/${safeAddress}/incoming-transfers/` -export const getAllTransactionsUriFrom = (safeAddress: string) => `safes/${safeAddress}/all-transactions/` +export const getAllTransactionsUriFrom = (safeAddress: string) => `/safes/${safeAddress}/all-transactions/` -export const getSafeCreationTxUri = (safeAddress: string) => `safes/${safeAddress}/creation/` +export const getSafeCreationTxUri = (safeAddress: string) => `/safes/${safeAddress}/creation/` export const getGoogleAnalyticsTrackingID = (): string => GOOGLE_ANALYTICS_ID[getNetworkName()] diff --git a/src/config/networks/local.ts b/src/config/networks/local.ts index 195e315e38..dec9140784 100644 --- a/src/config/networks/local.ts +++ b/src/config/networks/local.ts @@ -2,13 +2,13 @@ import EtherLogo from 'src/assets/icons/icon_etherTokens.svg' import { EnvironmentSettings, ETHEREUM_NETWORK, NetworkConfig } from 'src/config/networks/network.d' const baseConfig: EnvironmentSettings = { - txServiceUrl: 'http://localhost:8000/api/v1/', + txServiceUrl: 'http://localhost:8000/api/v1', relayApiUrl: 'https://safe-relay.staging.gnosisdev.com/api/v1', - safeAppsUrl: 'http://localhost:3002/', + safeAppsUrl: 'http://localhost:3002', gasPriceOracleUrl: 'https://ethgasstation.info/json/ethgasAPI.json', - rpcServiceUrl: 'http://localhost:4447/', + rpcServiceUrl: 'http://localhost:4447', networkExplorerName: 'Etherscan', - networkExplorerUrl: 'https://rinkeby.etherscan.io/', + networkExplorerUrl: 'https://rinkeby.etherscan.io', networkExplorerApiUrl: 'https://api-rinkeby.etherscan.io/api', } diff --git a/src/config/networks/mainnet.ts b/src/config/networks/mainnet.ts index 7635ada83e..6571e1583f 100644 --- a/src/config/networks/mainnet.ts +++ b/src/config/networks/mainnet.ts @@ -2,12 +2,12 @@ import EtherLogo from 'src/assets/icons/icon_etherTokens.svg' import { EnvironmentSettings, ETHEREUM_NETWORK, NetworkConfig } from 'src/config/networks/network.d' const baseConfig: EnvironmentSettings = { - txServiceUrl: 'https://safe-transaction.mainnet.staging.gnosisdev.com/api/v1/', - safeAppsUrl: 'https://safe-apps.dev.gnosisdev.com/', + txServiceUrl: 'https://safe-transaction.mainnet.staging.gnosisdev.com/api/v1', + safeAppsUrl: 'https://safe-apps.dev.gnosisdev.com', gasPriceOracleUrl: 'https://ethgasstation.info/json/ethgasAPI.json', - rpcServiceUrl: 'https://mainnet.infura.io:443/v3/', + rpcServiceUrl: 'https://mainnet.infura.io:443/v3', networkExplorerName: 'Etherscan', - networkExplorerUrl: 'https://etherscan.io/', + networkExplorerUrl: 'https://etherscan.io', networkExplorerApiUrl: 'https://api.etherscan.io/api', } @@ -18,12 +18,12 @@ const mainnet: NetworkConfig = { }, staging: { ...baseConfig, - safeAppsUrl: 'https://safe-apps.staging.gnosisdev.com/', + safeAppsUrl: 'https://safe-apps.staging.gnosisdev.com', }, production: { ...baseConfig, - txServiceUrl: 'https://safe-transaction.mainnet.gnosis.io/api/v1/', - safeAppsUrl: 'https://apps.gnosis-safe.io/', + txServiceUrl: 'https://safe-transaction.mainnet.gnosis.io/api/v1', + safeAppsUrl: 'https://apps.gnosis-safe.io', }, }, network: { diff --git a/src/config/networks/rinkeby.ts b/src/config/networks/rinkeby.ts index 7a6d78325f..4da2762194 100644 --- a/src/config/networks/rinkeby.ts +++ b/src/config/networks/rinkeby.ts @@ -2,12 +2,12 @@ import EtherLogo from 'src/assets/icons/icon_etherTokens.svg' import { EnvironmentSettings, ETHEREUM_NETWORK, NetworkConfig } from 'src/config/networks/network.d' const baseConfig: EnvironmentSettings = { - txServiceUrl: 'https://safe-transaction.staging.gnosisdev.com/api/v1/', - safeAppsUrl: 'https://safe-apps.dev.gnosisdev.com/', + txServiceUrl: 'https://safe-transaction.staging.gnosisdev.com/api/v1', + safeAppsUrl: 'https://safe-apps.dev.gnosisdev.com', gasPriceOracleUrl: 'https://ethgasstation.info/json/ethgasAPI.json', - rpcServiceUrl: 'https://rinkeby.infura.io:443/v3/', + rpcServiceUrl: 'https://rinkeby.infura.io:443/v3', networkExplorerName: 'Etherscan', - networkExplorerUrl: 'https://rinkeby.etherscan.io/', + networkExplorerUrl: 'https://rinkeby.etherscan.io', networkExplorerApiUrl: 'https://api-rinkeby.etherscan.io/api', } @@ -22,8 +22,8 @@ const rinkeby: NetworkConfig = { }, production: { ...baseConfig, - txServiceUrl: 'https://safe-transaction.rinkeby.gnosis.io/api/v1/', - safeAppsUrl: 'https://apps.gnosis-safe.io/', + txServiceUrl: 'https://safe-transaction.rinkeby.gnosis.io/api/v1', + safeAppsUrl: 'https://apps.gnosis-safe.io', }, }, network: { diff --git a/src/config/networks/xdai.ts b/src/config/networks/xdai.ts index d3a29a93e9..78cba3b3b2 100644 --- a/src/config/networks/xdai.ts +++ b/src/config/networks/xdai.ts @@ -3,12 +3,12 @@ import { ETHEREUM_NETWORK, NetworkConfig } from 'src/config/networks/network.d' const xDai: NetworkConfig = { environment: { production: { - txServiceUrl: 'https://safe-transaction.xdai.gnosis.io/api/v1/', - safeAppsUrl: 'https://apps.gnosis-safe.io/', + txServiceUrl: 'https://safe-transaction.xdai.gnosis.io/api/v1', + safeAppsUrl: 'https://apps.gnosis-safe.io', gasPrice: 1e9, - rpcServiceUrl: 'https://rpc.xdaichain.com/', + rpcServiceUrl: 'https://rpc.xdaichain.com', networkExplorerName: 'Blockscout', - networkExplorerUrl: 'https://blockscout.com/poa/xdai/', + networkExplorerUrl: 'https://blockscout.com/poa/xdai', networkExplorerApiUrl: 'https://blockscout.com/poa/xdai/api', }, }, diff --git a/src/logic/currencyValues/__tests__/fetchSafeTokens.test.ts b/src/logic/currencyValues/__tests__/fetchSafeTokens.test.ts index 7d9f35d0e4..2afecf0cfc 100644 --- a/src/logic/currencyValues/__tests__/fetchSafeTokens.test.ts +++ b/src/logic/currencyValues/__tests__/fetchSafeTokens.test.ts @@ -49,8 +49,6 @@ describe('fetchTokenCurrenciesBalances', () => { // then expect(result).toStrictEqual(expectedResult) expect(axios.get).toHaveBeenCalled() - expect(axios.get).toBeCalledWith(`${apiUrl}safes/${safeAddress}/balances/usd/?exclude_spam=${excludeSpamTokens}`, { - params: { limit: 3000 }, - }) + expect(axios.get).toBeCalledWith(`${apiUrl}/safes/${safeAddress}/balances/usd/?exclude_spam=${excludeSpamTokens}`) }) }) diff --git a/src/logic/currencyValues/api/fetchTokenCurrenciesBalances.ts b/src/logic/currencyValues/api/fetchTokenCurrenciesBalances.ts index 28eba7e05d..06c290dc8d 100644 --- a/src/logic/currencyValues/api/fetchTokenCurrenciesBalances.ts +++ b/src/logic/currencyValues/api/fetchTokenCurrenciesBalances.ts @@ -16,13 +16,9 @@ const fetchTokenCurrenciesBalances = ( excludeSpamTokens = true, ): Promise> => { const apiUrl = getTxServiceUrl() - const url = `${apiUrl}safes/${safeAddress}/balances/usd/?exclude_spam=${excludeSpamTokens}` + const url = `${apiUrl}/safes/${safeAddress}/balances/usd/?exclude_spam=${excludeSpamTokens}` - return axios.get(url, { - params: { - limit: 3000, - }, - }) + return axios.get(url) } export default fetchTokenCurrenciesBalances diff --git a/src/logic/safe/store/actions/allTransactions/loadAllTransactions.ts b/src/logic/safe/store/actions/allTransactions/loadAllTransactions.ts index 6265ff024e..b06c9ba13f 100644 --- a/src/logic/safe/store/actions/allTransactions/loadAllTransactions.ts +++ b/src/logic/safe/store/actions/allTransactions/loadAllTransactions.ts @@ -25,7 +25,7 @@ const getAllTransactionsUri = (safeAddress: string): string => { const address = checksumAddress(safeAddress) const base = getAllTransactionsUriFrom(address) - return `${host}${base}` + return `${host}/${base}` } const fetchAllTransactions = async ( diff --git a/src/logic/safe/transactions/incomingTxHistory.ts b/src/logic/safe/transactions/incomingTxHistory.ts index e4597eb067..8eec0f6f10 100644 --- a/src/logic/safe/transactions/incomingTxHistory.ts +++ b/src/logic/safe/transactions/incomingTxHistory.ts @@ -6,5 +6,5 @@ export const buildIncomingTxServiceUrl = (safeAddress: string): string => { const address = checksumAddress(safeAddress) const base = getIncomingTxServiceUriTo(address) - return `${host}${base}` + return `${host}/${base}` } diff --git a/src/logic/safe/transactions/txHistory.ts b/src/logic/safe/transactions/txHistory.ts index b12300d2eb..ea787b17ee 100644 --- a/src/logic/safe/transactions/txHistory.ts +++ b/src/logic/safe/transactions/txHistory.ts @@ -48,7 +48,7 @@ export const buildTxServiceUrl = (safeAddress: string): string => { const host = getTxServiceUrl() const address = checksumAddress(safeAddress) const base = getTxServiceUriFrom(address) - return `${host}${base}?has_confirmations=True` + return `${host}/${base}?has_confirmations=True` } const SUCCESS_STATUS = 201 // CREATED status diff --git a/src/logic/tokens/api/fetchErc20AndErc721AssetsList.ts b/src/logic/tokens/api/fetchErc20AndErc721AssetsList.ts new file mode 100644 index 0000000000..b7874b643a --- /dev/null +++ b/src/logic/tokens/api/fetchErc20AndErc721AssetsList.ts @@ -0,0 +1,24 @@ +import axios, { AxiosResponse } from 'axios' + +import { getTxServiceUrl } from 'src/config/index' + +type TokenResult = { + address: string + decimals?: number + logoUri: string + name: string + symbol: string + type: string +} + +export const fetchErc20AndErc721AssetsList = async (): Promise> => { + const apiUrl = getTxServiceUrl() + + const url = `${apiUrl}/tokens/` + + return axios.get<{ results: TokenResult[] }>(url, { + params: { + limit: 3000, + }, + }) +} diff --git a/src/logic/tokens/api/fetchToken.ts b/src/logic/tokens/api/fetchToken.ts deleted file mode 100644 index 7584521ecd..0000000000 --- a/src/logic/tokens/api/fetchToken.ts +++ /dev/null @@ -1,16 +0,0 @@ -import axios from 'axios' - -import { getRelayUrl } from 'src/config/index' - -const fetchToken = (tokenAddress) => { - const apiUrl = getRelayUrl() - const url = `${apiUrl}/tokens/` - - return axios.get(url, { - params: { - address: tokenAddress, - }, - }) -} - -export default fetchToken diff --git a/src/logic/tokens/api/fetchTokenBalanceList.ts b/src/logic/tokens/api/fetchTokenBalanceList.ts index 91bdc399df..6712a09eaf 100644 --- a/src/logic/tokens/api/fetchTokenBalanceList.ts +++ b/src/logic/tokens/api/fetchTokenBalanceList.ts @@ -4,13 +4,9 @@ import { getTxServiceUrl } from 'src/config/index' const fetchTokenBalanceList = (safeAddress) => { const apiUrl = getTxServiceUrl() - const url = `${apiUrl}safes/${safeAddress}/balances/` + const url = `${apiUrl}/safes/${safeAddress}/balances/` - return axios.get(url, { - params: { - limit: 3000, - }, - }) + return axios.get(url) } export default fetchTokenBalanceList diff --git a/src/logic/tokens/api/fetchTokenList.ts b/src/logic/tokens/api/fetchTokenList.ts deleted file mode 100644 index dd9054b039..0000000000 --- a/src/logic/tokens/api/fetchTokenList.ts +++ /dev/null @@ -1,16 +0,0 @@ -import axios from 'axios' - -import { getRelayUrl } from 'src/config/index' - -const fetchTokenList = () => { - const apiUrl = getRelayUrl() - const url = `${apiUrl}tokens/` - - return axios.get(url, { - params: { - limit: 3000, - }, - }) -} - -export default fetchTokenList diff --git a/src/logic/tokens/api/index.ts b/src/logic/tokens/api/index.ts index 7ff3aa7de3..408b30b38e 100644 --- a/src/logic/tokens/api/index.ts +++ b/src/logic/tokens/api/index.ts @@ -1,2 +1 @@ -export { default as fetchTokenList } from './fetchTokenList' -export { default as fetchToken } from './fetchToken' +export { fetchErc20AndErc721AssetsList } from './fetchErc20AndErc721AssetsList' diff --git a/src/logic/tokens/store/actions/fetchTokens.ts b/src/logic/tokens/store/actions/fetchTokens.ts index 5c5bde4959..6bccf77034 100644 --- a/src/logic/tokens/store/actions/fetchTokens.ts +++ b/src/logic/tokens/store/actions/fetchTokens.ts @@ -8,7 +8,7 @@ import contract from 'truffle-contract' import saveTokens from './saveTokens' import generateBatchRequests from 'src/logic/contracts/generateBatchRequests' -import { fetchTokenList } from 'src/logic/tokens/api' +import { fetchErc20AndErc721AssetsList } from 'src/logic/tokens/api' import { makeToken, Token } from 'src/logic/tokens/store/model/token' import { tokensSelector } from 'src/logic/tokens/store/selectors' import { getWeb3 } from 'src/logic/wallets/getWeb3' @@ -98,13 +98,15 @@ export const fetchTokens = () => async ( const { data: { results: tokenList }, - } = await fetchTokenList() + } = await fetchErc20AndErc721AssetsList() - if (currentSavedTokens && currentSavedTokens.size === tokenList.length) { + const erc20Tokens = tokenList.filter((token) => token.type.toLowerCase() === 'erc20') + + if (currentSavedTokens?.size === erc20Tokens.length) { return } - const tokens = List(tokenList.map((token) => makeToken(token))) + const tokens = List(erc20Tokens.map((token) => makeToken(token))) dispatch(saveTokens(tokens)) } catch (err) {