0xtrails 0.13.0 → 0.13.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{ccip-Cg9-lJ6K.js → ccip-CT_An6eM.js} +39 -39
- package/dist/chains.d.ts +4 -3
- package/dist/chains.d.ts.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/customTokens.d.ts.map +1 -1
- package/dist/error.d.ts +1 -0
- package/dist/error.d.ts.map +1 -1
- package/dist/gasless.d.ts +1 -2
- package/dist/gasless.d.ts.map +1 -1
- package/dist/{index-DEojZg7b.js → index-RfqL5Foz.js} +56672 -43550
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +385 -333
- package/dist/intents.d.ts +8 -2
- package/dist/intents.d.ts.map +1 -1
- package/dist/keyMachineClient.d.ts +9 -0
- package/dist/keyMachineClient.d.ts.map +1 -0
- package/dist/keymachine/index.d.ts +14 -0
- package/dist/keymachine/index.d.ts.map +1 -0
- package/dist/keymachine/key-machine.gen.d.ts +461 -0
- package/dist/keymachine/key-machine.gen.d.ts.map +1 -0
- package/dist/onramp/MeshConnectFlow.d.ts +18 -0
- package/dist/onramp/MeshConnectFlow.d.ts.map +1 -0
- package/dist/onramp/MeshConnectIframe.d.ts +13 -0
- package/dist/onramp/MeshConnectIframe.d.ts.map +1 -0
- package/dist/onramp/SendFromExchangeButton.d.ts +16 -0
- package/dist/onramp/SendFromExchangeButton.d.ts.map +1 -0
- package/dist/onramp/TrailsOnRampProvider.d.ts +31 -0
- package/dist/onramp/TrailsOnRampProvider.d.ts.map +1 -0
- package/dist/onramp/index.d.ts +13 -0
- package/dist/onramp/index.d.ts.map +1 -0
- package/dist/onramp/meshconnect.d.ts +30 -0
- package/dist/onramp/meshconnect.d.ts.map +1 -0
- package/dist/onramp/trailsOnramp.d.ts +24 -0
- package/dist/onramp/trailsOnramp.d.ts.map +1 -0
- package/dist/onramp-client/index.d.ts +3 -3
- package/dist/onramp-client/index.d.ts.map +1 -1
- package/dist/paymasterSend.d.ts.map +1 -1
- package/dist/prepareSend.d.ts.map +1 -1
- package/dist/query/balance.fetchers.d.ts +31 -2
- package/dist/query/balance.fetchers.d.ts.map +1 -1
- package/dist/query/balance.hooks.d.ts +21 -2
- package/dist/query/balance.hooks.d.ts.map +1 -1
- package/dist/query/balance.queries.d.ts +18 -1
- package/dist/query/balance.queries.d.ts.map +1 -1
- package/dist/query/chains.queries.d.ts.map +1 -1
- package/dist/query/meld.fetchers.d.ts +1 -1
- package/dist/query/meld.fetchers.d.ts.map +1 -1
- package/dist/query/meld.hooks.d.ts +3 -3
- package/dist/query/meld.hooks.d.ts.map +1 -1
- package/dist/query/meld.queries.d.ts +1 -1
- package/dist/query/meld.queries.d.ts.map +1 -1
- package/dist/query/price.fetchers.d.ts +15 -0
- package/dist/query/price.fetchers.d.ts.map +1 -0
- package/dist/query/price.hooks.d.ts +352 -0
- package/dist/query/price.hooks.d.ts.map +1 -0
- package/dist/query/price.queries.d.ts +34 -0
- package/dist/query/price.queries.d.ts.map +1 -0
- package/dist/query/tokenList.queries.d.ts +54 -0
- package/dist/query/tokenList.queries.d.ts.map +1 -0
- package/dist/recover.d.ts +6 -4
- package/dist/recover.d.ts.map +1 -1
- package/dist/tokens.d.ts +13 -0
- package/dist/tokens.d.ts.map +1 -1
- package/dist/transactionIntent/deposits/depositOrchestrator.d.ts +2 -2
- package/dist/transactionIntent/deposits/depositOrchestrator.d.ts.map +1 -1
- package/dist/transactionIntent/deposits/gaslessDeposit.d.ts +2 -2
- package/dist/transactionIntent/deposits/gaslessDeposit.d.ts.map +1 -1
- package/dist/transactionIntent/deposits/standardDeposit.d.ts +1 -1
- package/dist/transactionIntent/deposits/standardDeposit.d.ts.map +1 -1
- package/dist/transactionIntent/handlers/intentHandler.d.ts.map +1 -1
- package/dist/transactionIntent/helpers/transactionStateHelpers.d.ts.map +1 -1
- package/dist/transactionIntent/quote/normalizeQuote.d.ts.map +1 -1
- package/dist/transactionIntent/types.d.ts +1 -1
- package/dist/transactionIntent/types.d.ts.map +1 -1
- package/dist/transactions.d.ts +4 -0
- package/dist/transactions.d.ts.map +1 -1
- package/dist/umd/trails.min.js +291 -202
- package/dist/utils/format.d.ts +7 -0
- package/dist/utils/format.d.ts.map +1 -1
- package/dist/walletUtils.d.ts +2 -1
- package/dist/walletUtils.d.ts.map +1 -1
- package/dist/wallets.d.ts +13 -54
- package/dist/wallets.d.ts.map +1 -1
- package/dist/widget/components/AccountIntentTransactionHistory.d.ts.map +1 -1
- package/dist/widget/components/ClassicSwap.d.ts.map +1 -1
- package/dist/widget/components/ConnectWallet.d.ts.map +1 -1
- package/dist/widget/components/ConnectedWallets.d.ts.map +1 -1
- package/dist/widget/components/DirectTransfer.d.ts +1 -1
- package/dist/widget/components/DirectTransfer.d.ts.map +1 -1
- package/dist/widget/components/EarnPools.d.ts.map +1 -1
- package/dist/widget/components/ExecutionStatusBadge.d.ts.map +1 -1
- package/dist/widget/components/Fund.d.ts.map +1 -1
- package/dist/widget/components/FundMethods.d.ts.map +1 -1
- package/dist/widget/components/HighPriceImpactBlock.d.ts +7 -0
- package/dist/widget/components/HighPriceImpactBlock.d.ts.map +1 -0
- package/dist/widget/components/MeldHistory.d.ts.map +1 -1
- package/dist/widget/components/MeshExchangeSelection.d.ts +11 -0
- package/dist/widget/components/MeshExchangeSelection.d.ts.map +1 -0
- package/dist/widget/components/OnrampHistoryRow.d.ts +1 -1
- package/dist/widget/components/OnrampHistoryRow.d.ts.map +1 -1
- package/dist/widget/components/OnrampProviderConfirmation.d.ts.map +1 -1
- package/dist/widget/components/Pay.d.ts.map +1 -1
- package/dist/widget/components/PoolDeposit.d.ts.map +1 -1
- package/dist/widget/components/PoolWithdraw.d.ts.map +1 -1
- package/dist/widget/components/QRCodeWalletSelect.d.ts +1 -1
- package/dist/widget/components/QRCodeWalletSelect.d.ts.map +1 -1
- package/dist/widget/components/QuoteDetails.d.ts.map +1 -1
- package/dist/widget/components/Receipt.d.ts.map +1 -1
- package/dist/widget/components/Recipients.d.ts.map +1 -1
- package/dist/widget/components/RefundWarning.d.ts.map +1 -1
- package/dist/widget/components/TokenSelector.d.ts.map +1 -1
- package/dist/widget/components/TransactionDetails.d.ts.map +1 -1
- package/dist/widget/components/TransactionHistoryItem.d.ts +2 -0
- package/dist/widget/components/TransactionHistoryItem.d.ts.map +1 -1
- package/dist/widget/components/TransferPendingVertical.d.ts +1 -0
- package/dist/widget/components/TransferPendingVertical.d.ts.map +1 -1
- package/dist/widget/components/WaasFeeOptions.d.ts.map +1 -1
- package/dist/widget/components/WalletConnect.d.ts.map +1 -1
- package/dist/widget/components/WalletImage.d.ts.map +1 -1
- package/dist/widget/components/WalletList.d.ts.map +1 -1
- package/dist/widget/components/Withdraw.d.ts.map +1 -1
- package/dist/widget/css/compiled.css +1 -1
- package/dist/widget/hooks/useAddressWalletIcon.d.ts.map +1 -1
- package/dist/widget/hooks/useCombinedHistory.d.ts +6 -5
- package/dist/widget/hooks/useCombinedHistory.d.ts.map +1 -1
- package/dist/widget/hooks/useCustomTokenSearch.d.ts +6 -1
- package/dist/widget/hooks/useCustomTokenSearch.d.ts.map +1 -1
- package/dist/widget/hooks/useDefaultDestinationToken.d.ts.map +1 -1
- package/dist/widget/hooks/useDefaultOriginToken.d.ts.map +1 -1
- package/dist/widget/hooks/useFiatOnRampCurrencies.d.ts +1 -1
- package/dist/widget/hooks/useFiatOnRampCurrencies.d.ts.map +1 -1
- package/dist/widget/hooks/useGetIntent.d.ts +3 -2
- package/dist/widget/hooks/useGetIntent.d.ts.map +1 -1
- package/dist/widget/hooks/useIntentReceiptBalances.d.ts +1 -1
- package/dist/widget/hooks/useIntentReceiptBalances.d.ts.map +1 -1
- package/dist/widget/hooks/useIntentTransactionHistory.d.ts +3 -2
- package/dist/widget/hooks/useIntentTransactionHistory.d.ts.map +1 -1
- package/dist/widget/hooks/useMeldTransactionHistory.d.ts +1 -1
- package/dist/widget/hooks/useMeldTransactionHistory.d.ts.map +1 -1
- package/dist/widget/hooks/useMeldTransactionStatus.d.ts +1 -1
- package/dist/widget/hooks/useMeldTransactionStatus.d.ts.map +1 -1
- package/dist/widget/hooks/useOnRampQuote.d.ts +1 -1
- package/dist/widget/hooks/useOnRampQuote.d.ts.map +1 -1
- package/dist/widget/hooks/useOnRampTransactionStatus.d.ts +1 -1
- package/dist/widget/hooks/useOnRampTransactionStatus.d.ts.map +1 -1
- package/dist/widget/hooks/useQuote.d.ts +2 -2
- package/dist/widget/hooks/useQuote.d.ts.map +1 -1
- package/dist/widget/hooks/useSelectedFundMethod.d.ts +7 -0
- package/dist/widget/hooks/useSelectedFundMethod.d.ts.map +1 -1
- package/dist/widget/hooks/useSendForm.d.ts +0 -1
- package/dist/widget/hooks/useSendForm.d.ts.map +1 -1
- package/dist/widget/hooks/useTokenList.d.ts +7 -1
- package/dist/widget/hooks/useTokenList.d.ts.map +1 -1
- package/dist/widget/hooks/useViewManager.d.ts +1 -1
- package/dist/widget/hooks/useViewManager.d.ts.map +1 -1
- package/dist/widget/index.js +1 -1
- package/dist/widget/providers/TrailsProvider.d.ts +2 -0
- package/dist/widget/providers/TrailsProvider.d.ts.map +1 -1
- package/dist/widget/utils/createWagmiConfig.d.ts +2 -2
- package/dist/widget/utils/createWagmiConfig.d.ts.map +1 -1
- package/dist/widget/utils/fundMethodSwitchState.d.ts +1 -0
- package/dist/widget/utils/fundMethodSwitchState.d.ts.map +1 -1
- package/dist/widget/utils/historyFilters.d.ts +13 -0
- package/dist/widget/utils/historyFilters.d.ts.map +1 -0
- package/dist/widget/utils/meldProviderUtils.d.ts +1 -1
- package/dist/widget/utils/meldProviderUtils.d.ts.map +1 -1
- package/dist/widget/utils/meshSupportedTokens.d.ts +4 -0
- package/dist/widget/utils/meshSupportedTokens.d.ts.map +1 -0
- package/dist/widget/utils/onrampConfig.d.ts +11 -0
- package/dist/widget/utils/onrampConfig.d.ts.map +1 -0
- package/dist/widget/utils/statusLabel.d.ts +2 -0
- package/dist/widget/utils/statusLabel.d.ts.map +1 -0
- package/dist/widget/utils/trailsOnrampConfig.d.ts +18 -0
- package/dist/widget/utils/trailsOnrampConfig.d.ts.map +1 -0
- package/dist/widget/widget.d.ts +24 -8
- package/dist/widget/widget.d.ts.map +1 -1
- package/package.json +9 -7
- package/src/chains.ts +26 -9
- package/src/constants.ts +2 -0
- package/src/customTokens.ts +22 -7
- package/src/error.ts +7 -0
- package/src/gasless.ts +5 -2
- package/src/index.ts +8 -5
- package/src/intents.ts +56 -60
- package/src/keyMachineClient.ts +29 -0
- package/src/keymachine/index.ts +175 -0
- package/src/keymachine/key-machine.gen.ts +993 -0
- package/src/onramp/MeshConnectFlow.tsx +86 -0
- package/src/onramp/MeshConnectIframe.tsx +661 -0
- package/src/onramp/SendFromExchangeButton.tsx +81 -0
- package/src/onramp/TrailsOnRampProvider.tsx +59 -0
- package/src/onramp/index.ts +31 -0
- package/src/onramp/meshconnect.ts +277 -0
- package/src/onramp/trailsOnramp.tsx +130 -0
- package/src/onramp-client/index.ts +4 -6
- package/src/paymasterSend.ts +0 -5
- package/src/prepareSend.ts +45 -44
- package/src/query/balance.fetchers.ts +172 -17
- package/src/query/balance.hooks.ts +69 -6
- package/src/query/balance.queries.ts +63 -0
- package/src/query/chains.queries.ts +1 -6
- package/src/query/meld.fetchers.ts +1 -1
- package/src/query/meld.hooks.ts +1 -1
- package/src/query/meld.queries.ts +1 -1
- package/src/query/price.fetchers.ts +53 -0
- package/src/query/price.hooks.ts +46 -0
- package/src/query/price.queries.ts +364 -0
- package/src/query/tokenList.queries.ts +118 -0
- package/src/recover.ts +89 -26
- package/src/tokens.ts +108 -26
- package/src/transactionIntent/deposits/depositOrchestrator.ts +11 -11
- package/src/transactionIntent/deposits/gaslessDeposit.ts +38 -39
- package/src/transactionIntent/deposits/standardDeposit.ts +5 -30
- package/src/transactionIntent/handlers/intentHandler.ts +29 -12
- package/src/transactionIntent/helpers/transactionStateHelpers.ts +5 -2
- package/src/transactionIntent/quote/normalizeQuote.ts +11 -5
- package/src/transactionIntent/types.ts +1 -1
- package/src/transactions.ts +5 -1
- package/src/utils/format.ts +85 -1
- package/src/walletUtils.ts +2 -1
- package/src/wallets.ts +184 -380
- package/src/widget/compiled.css +1 -1
- package/src/widget/components/AccountIntentTransactionHistory.tsx +134 -109
- package/src/widget/components/ClassicSwap.tsx +26 -24
- package/src/widget/components/ConnectWallet.tsx +4 -2
- package/src/widget/components/ConnectedWallets.tsx +2 -5
- package/src/widget/components/DirectTransfer.tsx +5 -2
- package/src/widget/components/EarnPools.tsx +1 -2
- package/src/widget/components/ExecutionStatusBadge.tsx +10 -4
- package/src/widget/components/Fund.tsx +169 -110
- package/src/widget/components/FundMethods.tsx +5 -9
- package/src/widget/components/HighPriceImpactBlock.tsx +44 -0
- package/src/widget/components/MeldHistory.tsx +4 -28
- package/src/widget/components/MeshExchangeSelection.tsx +218 -0
- package/src/widget/components/OnrampHistoryRow.tsx +3 -27
- package/src/widget/components/OnrampProviderConfirmation.tsx +0 -25
- package/src/widget/components/Pay.tsx +20 -36
- package/src/widget/components/PoolDeposit.tsx +14 -24
- package/src/widget/components/PoolWithdraw.tsx +1 -63
- package/src/widget/components/QRCodeWalletSelect.tsx +5 -2
- package/src/widget/components/QuoteDetails.tsx +113 -106
- package/src/widget/components/Receipt.tsx +0 -11
- package/src/widget/components/Recipients.tsx +2 -1
- package/src/widget/components/RefundWarning.tsx +5 -10
- package/src/widget/components/ThemeProvider.tsx +4 -4
- package/src/widget/components/TokenSelector.tsx +85 -16
- package/src/widget/components/TransactionDetails.tsx +46 -0
- package/src/widget/components/TransactionHistoryItem.tsx +14 -23
- package/src/widget/components/TransferPendingVertical.tsx +17 -11
- package/src/widget/components/WaasFeeOptions.tsx +4 -42
- package/src/widget/components/WalletConnect.tsx +2 -5
- package/src/widget/components/WalletImage.tsx +6 -18
- package/src/widget/components/WalletList.tsx +1 -1
- package/src/widget/components/Withdraw.tsx +22 -23
- package/src/widget/hooks/useAddressWalletIcon.ts +2 -1
- package/src/widget/hooks/useAmountUsd.ts +1 -1
- package/src/widget/hooks/useCombinedHistory.ts +37 -93
- package/src/widget/hooks/useCustomTokenSearch.tsx +63 -33
- package/src/widget/hooks/useDefaultDestinationToken.tsx +2 -5
- package/src/widget/hooks/useDefaultOriginToken.tsx +2 -5
- package/src/widget/hooks/useFiatOnRampCurrencies.ts +1 -1
- package/src/widget/hooks/useGetIntent.ts +5 -4
- package/src/widget/hooks/useIntentReceiptBalances.ts +3 -3
- package/src/widget/hooks/useIntentTransactionHistory.ts +24 -47
- package/src/widget/hooks/useMeldTransactionHistory.ts +4 -2
- package/src/widget/hooks/useMeldTransactionStatus.ts +13 -11
- package/src/widget/hooks/useOnRampQuote.ts +3 -3
- package/src/widget/hooks/useOnRampTransactionStatus.ts +8 -6
- package/src/widget/hooks/useQuote.ts +56 -48
- package/src/widget/hooks/useSelectedFundMethod.tsx +14 -1
- package/src/widget/hooks/useSendForm.ts +52 -31
- package/src/widget/hooks/useTokenList.ts +209 -140
- package/src/widget/hooks/useTrailsSendTransaction.ts +1 -1
- package/src/widget/hooks/useViewManager.tsx +1 -0
- package/src/widget/providers/TrailsProvider.tsx +5 -0
- package/src/widget/styles.ts +1 -1
- package/src/widget/utils/createWagmiConfig.ts +7 -2
- package/src/widget/utils/fundMethodSwitchState.ts +2 -0
- package/src/widget/utils/historyFilters.ts +157 -0
- package/src/widget/utils/meldProviderUtils.ts +8 -2
- package/src/widget/utils/meshSupportedTokens.ts +28 -0
- package/src/widget/utils/onrampConfig.ts +15 -0
- package/src/widget/utils/statusLabel.ts +3 -0
- package/src/widget/utils/trailsOnrampConfig.ts +39 -0
- package/src/widget/widget.tsx +235 -185
- package/dist/onramp-client/trails-onramp.gen.d.ts +0 -570
- package/dist/onramp-client/trails-onramp.gen.d.ts.map +0 -1
- package/dist/prices.d.ts +0 -34
- package/dist/prices.d.ts.map +0 -1
- package/dist/useGasEstimation.d.ts +0 -34
- package/dist/useGasEstimation.d.ts.map +0 -1
- package/dist/widget/hooks/useCustomTokenFetch.d.ts +0 -19
- package/dist/widget/hooks/useCustomTokenFetch.d.ts.map +0 -1
- package/dist/widget/hooks/useTokenWithFreshBalance.d.ts +0 -18
- package/dist/widget/hooks/useTokenWithFreshBalance.d.ts.map +0 -1
- package/src/onramp-client/trails-onramp.gen.ts +0 -1320
- package/src/prices.ts +0 -528
- package/src/useGasEstimation.ts +0 -147
- package/src/widget/assets/Binance_Icon_Logo.svg +0 -14
- package/src/widget/assets/Bitfinex_Icon_Logo.svg +0 -5
- package/src/widget/assets/Coinbase_Icon_Logo.svg +0 -1
- package/src/widget/assets/WalletConnect-logo-blue-bg.svg +0 -11
- package/src/widget/assets/sequence-logo.svg +0 -15
- package/src/widget/hooks/useCustomTokenFetch.tsx +0 -74
- package/src/widget/hooks/useTokenWithFreshBalance.ts +0 -246
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
<svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 1280" width="1280" height="1280">
|
|
2
|
-
<title>New Project</title>
|
|
3
|
-
<defs>
|
|
4
|
-
<image width="1280" height="1280" id="img1" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAAUAAQMAAAAiKm20AAAAAXNSR0IB2cksfwAAAANQTFRFO5n8m8y4zwAABH5JREFUeJztzjEBACAMwDDm3zQSduSAo1GQOZ+b14FNQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQXra8FAaK2qtUAAAAASUVORK5CYII="/>
|
|
5
|
-
<image width="600" height="370" id="img2" href="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMzAwcHgiIGhlaWdodD0iMTg1cHgiIHZpZXdCb3g9IjAgMCAzMDAgMTg1IiB2ZXJzaW9uPSIxLjEiCgl4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCgl4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+Cgk8IS0tIEdlbmVyYXRvcjogU2tldGNoIDQ5LjMgKDUxMTY3KSAtIGh0dHA6Ly93d3cuYm9oZW1pYW5jb2RpbmcuY29tL3NrZXRjaCAtLT4KCTx0aXRsZT5XYWxsZXRDb25uZWN0PC90aXRsZT4KCTxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgoJPGRlZnM+PC9kZWZzPgoJPGcgaWQ9IlBhZ2UtMSIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CgkJPGcgaWQ9IndhbGxldGNvbm5lY3QtbG9nby1hbHQiIGZpbGw9IiNmZmZmZmYiIGZpbGwtcnVsZT0ibm9uemVybyI+CgkJCTxwYXRoIGQ9Ik02MS40Mzg1NDI5LDM2LjI1NjI2MTIgQzExMC4zNDk3NjcsLTExLjYzMTkwNTEgMTg5LjY1MDUzLC0xMS42MzE5MDUxIDIzOC41NjE3NTIsMzYuMjU2MjYxMiBMMjQ0LjQ0ODI5Nyw0Mi4wMTk2Nzg2IEMyNDYuODkzODU4LDQ0LjQxNDA4NjcgMjQ2Ljg5Mzg1OCw0OC4yOTYxODk4IDI0NC40NDgyOTcsNTAuNjkwNTk5IEwyMjQuMzExNjAyLDcwLjQwNjEwMiBDMjIzLjA4ODgyMSw3MS42MDMzMDcxIDIyMS4xMDYzMDIsNzEuNjAzMzA3MSAyMTkuODgzNTIxLDcwLjQwNjEwMiBMMjExLjc4MjkzNyw2Mi40NzQ5NTQxIEMxNzcuNjYxMjQ1LDI5LjA2Njk3MjQgMTIyLjMzOTA1MSwyOS4wNjY5NzI0IDg4LjIxNzM1ODIsNjIuNDc0OTU0MSBMNzkuNTQyMzAyLDcwLjk2ODU1OTIgQzc4LjMxOTUyMDQsNzIuMTY1NzYzMyA3Ni4zMzcwMDEsNzIuMTY1NzYzMyA3NS4xMTQyMjE0LDcwLjk2ODU1OTIgTDU0Ljk3NzUyNjUsNTEuMjUzMDU2MSBDNTIuNTMxOTY1Myw0OC44NTg2NDY5IDUyLjUzMTk2NTMsNDQuOTc2NTQzOSA1NC45Nzc1MjY1LDQyLjU4MjEzNTcgTDYxLjQzODU0MjksMzYuMjU2MjYxMiBaIE0yODAuMjA2MzM5LDc3LjAzMDAwNjEgTDI5OC4xMjgwMzYsOTQuNTc2OTAzMSBDMzAwLjU3MzU4NSw5Ni45NzEzIDMwMC41NzM1OTksMTAwLjg1MzM4IDI5OC4xMjgwNjcsMTAzLjI0Nzc5MyBMMjE3LjMxNzg5NiwxODIuMzY4OTI3IEMyMTQuODcyMzUyLDE4NC43NjMzNTMgMjEwLjkwNzMxNCwxODQuNzYzMzggMjA4LjQ2MTczNiwxODIuMzY4OTg5IEMyMDguNDYxNzI2LDE4Mi4zNjg5NzkgMjA4LjQ2MTcxNCwxODIuMzY4OTY3IDIwOC40NjE3MDQsMTgyLjM2ODk1NyBMMTUxLjEwNzU2MSwxMjYuMjE0Mzg1IEMxNTAuNDk2MTcxLDEyNS42MTU3ODMgMTQ5LjUwNDkxMSwxMjUuNjE1NzgzIDE0OC44OTM1MjEsMTI2LjIxNDM4NSBDMTQ4Ljg5MzUxNywxMjYuMjE0Mzg5IDE0OC44OTM1MTQsMTI2LjIxNDM5MyAxNDguODkzNTEsMTI2LjIxNDM5NiBMOTEuNTQwNTg4OCwxODIuMzY4OTI3IEM4OS4wOTUwNTIsMTg0Ljc2MzM1OSA4NS4xMzAwMTMzLDE4NC43NjMzOTkgODIuNjg0NDI3NiwxODIuMzY5MDE0IEM4Mi42ODQ0MTMzLDE4Mi4zNjkgODIuNjg0Mzk4LDE4Mi4zNjg5ODYgODIuNjg0MzgyNywxODIuMzY4OTcgTDEuODcxOTYzMjcsMTAzLjI0Njc4NSBDLTAuNTczNTk2OTM5LDEwMC44NTIzNzcgLTAuNTczNTk2OTM5LDk2Ljk3MDI3MzUgMS44NzE5NjMyNyw5NC41NzU4NjUzIEwxOS43OTM2OTI5LDc3LjAyODk5OCBDMjIuMjM5MjUzMSw3NC42MzQ1ODk4IDI2LjIwNDI5MTgsNzQuNjM0NTg5OCAyOC42NDk4NTMxLDc3LjAyODk5OCBMODYuMDA0ODMwNiwxMzMuMTg0MzU1IEM4Ni42MTYyMjE0LDEzMy43ODI5NTcgODcuNjA3NDc5NiwxMzMuNzgyOTU3IDg4LjIxODg3MDQsMTMzLjE4NDM1NSBDODguMjE4ODc5NiwxMzMuMTg0MzQ2IDg4LjIxODg4NzgsMTMzLjE4NDMzOCA4OC4yMTg4OTY5LDEzMy4xODQzMzEgTDE0NS41NzEsNzcuMDI4OTk4IEMxNDguMDE2NTA1LDc0LjYzNDUzNDcgMTUxLjk4MTU0NCw3NC42MzQ0NDQ5IDE1NC40MjcxNjEsNzcuMDI4Nzk4IEMxNTQuNDI3MTk1LDc3LjAyODgzMTYgMTU0LjQyNzIyOSw3Ny4wMjg4NjUzIDE1NC40MjcyNjIsNzcuMDI4ODk5IEwyMTEuNzgyMTY0LDEzMy4xODQzMzEgQzIxMi4zOTM1NTQsMTMzLjc4MjkzMiAyMTMuMzg0ODE0LDEzMy43ODI5MzIgMjEzLjk5NjIwNCwxMzMuMTg0MzMxIEwyNzEuMzUwMTc5LDc3LjAzMDAwNjEgQzI3My43OTU3NCw3NC42MzU1OTY5IDI3Ny43NjA3NzgsNzQuNjM1NTk2OSAyODAuMjA2MzM5LDc3LjAzMDAwNjEgWiIgaWQ9IldhbGxldENvbm5lY3QiPjwvcGF0aD4KCQk8L2c+Cgk8L2c+Cjwvc3ZnPg=="/>
|
|
6
|
-
</defs>
|
|
7
|
-
<style>
|
|
8
|
-
</style>
|
|
9
|
-
<use id="Background" href="#img1" x="0" y="0"/>
|
|
10
|
-
<use id="WalletConnect-logo-white" href="#img2" transform="matrix(1.241,0,0,1.241,268,410)"/>
|
|
11
|
-
</svg>
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
<svg width="500" height="365" viewBox="0 0 500 365" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<g clip-path="url(#clip0_29_10159)">
|
|
3
|
-
<path d="M496.448 181.441C496.448 158.416 478.089 139.75 455.442 139.75C432.796 139.75 414.437 158.416 414.437 181.441C414.437 204.467 432.796 223.132 455.442 223.132C478.089 223.132 496.448 204.467 496.448 181.441Z" fill="#7C3AED"/>
|
|
4
|
-
<path d="M82.0114 42.2523C82.0114 19.227 63.6525 0.561279 41.0057 0.561279C18.3589 0.561279 0 19.227 0 42.2523C0 65.2776 18.3589 83.9433 41.0057 83.9433C63.6525 83.9433 82.0114 65.2776 82.0114 42.2523Z" fill="#7C3AED"/>
|
|
5
|
-
<path d="M82.0114 322.846C82.0114 299.821 63.6525 281.155 41.0057 281.155C18.3589 281.155 0 299.821 0 322.846C0 345.871 18.3589 364.537 41.0057 364.537C63.6525 364.537 82.0114 345.871 82.0114 322.846Z" fill="#7C3AED"/>
|
|
6
|
-
<path d="M500 320.63C500 301.412 484.677 285.833 465.775 285.833H161.879C142.977 285.833 127.654 301.412 127.654 320.63C127.654 339.848 142.977 355.427 161.879 355.427H465.775C484.677 355.427 500 339.848 500 320.63Z" fill="#7C3AED"/>
|
|
7
|
-
<path d="M368.794 181.441C368.794 162.223 353.471 146.644 334.569 146.644H34.2255C15.3234 146.644 0.000265708 162.223 0.000265708 181.441C0.000265708 200.659 15.3234 216.238 34.2255 216.238H334.569C353.471 216.238 368.794 200.659 368.794 181.441Z" fill="#7C3AED"/>
|
|
8
|
-
<path d="M500 42.2523C500 23.0343 484.677 7.45507 465.775 7.45507H161.879C142.977 7.45507 127.654 23.0343 127.654 42.2523C127.654 61.4703 142.977 77.0495 161.879 77.0495H465.775C484.677 77.0495 500 61.4703 500 42.2523Z" fill="#7C3AED"/>
|
|
9
|
-
</g>
|
|
10
|
-
<defs>
|
|
11
|
-
<clipPath id="clip0_29_10159">
|
|
12
|
-
<rect width="500" height="363.98" fill="white" transform="translate(0 0.561279)"/>
|
|
13
|
-
</clipPath>
|
|
14
|
-
</defs>
|
|
15
|
-
</svg>
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { useQuery } from "@tanstack/react-query"
|
|
2
|
-
import { isAddress } from "viem"
|
|
3
|
-
import { getTokenInfo } from "../../tokens.js"
|
|
4
|
-
import { logger } from "../../logger.js"
|
|
5
|
-
import { MINUTE_MS, DAY_MS } from "../../utils/time.js"
|
|
6
|
-
import { useTrails } from "../providers/TrailsProvider.js"
|
|
7
|
-
|
|
8
|
-
interface UseCustomTokenFetchProps {
|
|
9
|
-
address: string | null
|
|
10
|
-
chainId: number | null
|
|
11
|
-
enabled?: boolean
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
interface UseCustomTokenFetchReturn {
|
|
15
|
-
tokenInfo: Awaited<ReturnType<typeof getTokenInfo>> | null
|
|
16
|
-
isLoading: boolean
|
|
17
|
-
error: Error | null
|
|
18
|
-
isValidAddress: boolean
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Hook to fetch token information for a custom address
|
|
23
|
-
* Reuses getTokenInfo from tokens.ts which handles caching and on-chain fetching
|
|
24
|
-
*/
|
|
25
|
-
export function useCustomTokenFetch({
|
|
26
|
-
address,
|
|
27
|
-
chainId,
|
|
28
|
-
enabled = true,
|
|
29
|
-
}: UseCustomTokenFetchProps): UseCustomTokenFetchReturn {
|
|
30
|
-
const isValidAddress = address ? isAddress(address) : false
|
|
31
|
-
const shouldFetch = enabled && isValidAddress && chainId !== null
|
|
32
|
-
const trailsConfig = useTrails()
|
|
33
|
-
|
|
34
|
-
const {
|
|
35
|
-
data: tokenInfo,
|
|
36
|
-
isLoading,
|
|
37
|
-
error,
|
|
38
|
-
} = useQuery({
|
|
39
|
-
queryKey: ["customToken", address?.toLowerCase(), chainId],
|
|
40
|
-
queryFn: async () => {
|
|
41
|
-
if (!address || !chainId) return null
|
|
42
|
-
|
|
43
|
-
try {
|
|
44
|
-
const info = await getTokenInfo(chainId, address, {
|
|
45
|
-
trailsApiKey: trailsConfig.trailsApiKey,
|
|
46
|
-
trailsApiUrl: trailsConfig.trailsApiUrl,
|
|
47
|
-
sequenceMetadataUrl: trailsConfig.sequenceMetadataUrl,
|
|
48
|
-
})
|
|
49
|
-
if (info) {
|
|
50
|
-
logger.console.log("[trails-sdk] Fetched custom token info:", info)
|
|
51
|
-
}
|
|
52
|
-
return info
|
|
53
|
-
} catch (err) {
|
|
54
|
-
logger.console.error(
|
|
55
|
-
"[trails-sdk] Error fetching custom token info:",
|
|
56
|
-
err,
|
|
57
|
-
)
|
|
58
|
-
throw err
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
enabled: shouldFetch,
|
|
62
|
-
staleTime: 5 * MINUTE_MS, // 5 minutes - token info doesn't change often
|
|
63
|
-
gcTime: DAY_MS, // 24 hours
|
|
64
|
-
retry: 1, // Only retry once for network errors
|
|
65
|
-
refetchOnWindowFocus: false,
|
|
66
|
-
})
|
|
67
|
-
|
|
68
|
-
return {
|
|
69
|
-
tokenInfo: tokenInfo ?? null,
|
|
70
|
-
isLoading,
|
|
71
|
-
error: error as Error | null,
|
|
72
|
-
isValidAddress,
|
|
73
|
-
}
|
|
74
|
-
}
|
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
import { useMemo } from "react"
|
|
2
|
-
import type { Token } from "../../tokens.js"
|
|
3
|
-
import {
|
|
4
|
-
useTokenBalances,
|
|
5
|
-
WIDGET_REFRESH_INTERVAL,
|
|
6
|
-
} from "../../query/balance.hooks.js"
|
|
7
|
-
import type { Address } from "viem"
|
|
8
|
-
import { erc20Abi } from "viem"
|
|
9
|
-
import { useBalance, useReadContract } from "wagmi"
|
|
10
|
-
import { logger } from "../../index.js"
|
|
11
|
-
import { isNativeToken, addressEqual } from "../../utils/address.js"
|
|
12
|
-
import { formatBalanceFields } from "../../utils/format.js"
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Reads the on-chain balance for a single token (native or ERC20).
|
|
16
|
-
* This is the source of truth — it bypasses the indexer entirely.
|
|
17
|
-
*/
|
|
18
|
-
function useOnChainBalance(
|
|
19
|
-
token: Token | null | undefined,
|
|
20
|
-
accountAddress?: string,
|
|
21
|
-
): { balance: string | undefined; isLoading: boolean } {
|
|
22
|
-
const isNative = isNativeToken(token?.contractAddress)
|
|
23
|
-
const enabled = !!token && !!accountAddress && !!token.chainId
|
|
24
|
-
|
|
25
|
-
// Native token balance (ETH, MATIC, etc.)
|
|
26
|
-
const { data: nativeData, isLoading: nativeLoading } = useBalance({
|
|
27
|
-
address: accountAddress as Address | undefined,
|
|
28
|
-
chainId: token?.chainId,
|
|
29
|
-
query: {
|
|
30
|
-
enabled: enabled && isNative,
|
|
31
|
-
refetchInterval: WIDGET_REFRESH_INTERVAL,
|
|
32
|
-
},
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
// ERC20 token balance
|
|
36
|
-
const { data: erc20Data, isLoading: erc20Loading } = useReadContract({
|
|
37
|
-
address: token?.contractAddress as Address | undefined,
|
|
38
|
-
abi: erc20Abi,
|
|
39
|
-
functionName: "balanceOf",
|
|
40
|
-
args: accountAddress ? [accountAddress as Address] : undefined,
|
|
41
|
-
chainId: token?.chainId,
|
|
42
|
-
query: {
|
|
43
|
-
enabled: enabled && !isNative,
|
|
44
|
-
refetchInterval: WIDGET_REFRESH_INTERVAL,
|
|
45
|
-
},
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
return useMemo(() => {
|
|
49
|
-
if (!enabled) return { balance: undefined, isLoading: false }
|
|
50
|
-
|
|
51
|
-
if (isNative) {
|
|
52
|
-
return {
|
|
53
|
-
balance: nativeData?.value?.toString(),
|
|
54
|
-
isLoading: nativeLoading,
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return {
|
|
59
|
-
balance: erc20Data?.toString(),
|
|
60
|
-
isLoading: erc20Loading,
|
|
61
|
-
}
|
|
62
|
-
}, [
|
|
63
|
-
enabled,
|
|
64
|
-
isNative,
|
|
65
|
-
nativeData?.value,
|
|
66
|
-
nativeLoading,
|
|
67
|
-
erc20Data,
|
|
68
|
-
erc20Loading,
|
|
69
|
-
])
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Enriches a token with fresh balance data from the cache/API,
|
|
74
|
-
* with an on-chain balance read as source of truth fallback.
|
|
75
|
-
* This prevents displaying stale balance data from localStorage or props.
|
|
76
|
-
*/
|
|
77
|
-
export function useTokenWithFreshBalance(
|
|
78
|
-
token: Token | null | undefined,
|
|
79
|
-
accountAddress?: string,
|
|
80
|
-
disabled?: boolean,
|
|
81
|
-
): { token: Token | null | undefined; isLoadingBalance: boolean } {
|
|
82
|
-
// Fetch fresh balance data for the account (indexer-backed, includes USD prices)
|
|
83
|
-
const { sortedTokens, isLoadingBalances } = useTokenBalances(
|
|
84
|
-
accountAddress as Address | null,
|
|
85
|
-
undefined,
|
|
86
|
-
{ disabled: disabled, refetchInterval: WIDGET_REFRESH_INTERVAL },
|
|
87
|
-
)
|
|
88
|
-
|
|
89
|
-
// On-chain balance as source of truth for the selected token
|
|
90
|
-
const { balance: onChainBalance, isLoading: isLoadingOnChain } =
|
|
91
|
-
useOnChainBalance(disabled ? null : token, accountAddress)
|
|
92
|
-
|
|
93
|
-
logger.console.log(
|
|
94
|
-
"[trails-sdk] sortedTokens FROM useTokenWithFreshBalance",
|
|
95
|
-
sortedTokens,
|
|
96
|
-
)
|
|
97
|
-
|
|
98
|
-
// Enrich token with fresh balance data
|
|
99
|
-
const tokenWithFreshBalance = useMemo(() => {
|
|
100
|
-
if (!token) return token
|
|
101
|
-
if (!sortedTokens) return token // Return original if no fresh data available
|
|
102
|
-
|
|
103
|
-
// Find matching token in indexer balance data
|
|
104
|
-
const freshToken = sortedTokens.find(
|
|
105
|
-
(t: Token) =>
|
|
106
|
-
addressEqual(t.contractAddress, token.contractAddress) &&
|
|
107
|
-
(t.chainId || 0) === (token.chainId || 0),
|
|
108
|
-
)
|
|
109
|
-
|
|
110
|
-
if (freshToken) {
|
|
111
|
-
// If on-chain balance is lower than indexer balance, the indexer is stale —
|
|
112
|
-
// use the on-chain value as source of truth for the balance fields.
|
|
113
|
-
if (onChainBalance !== undefined && freshToken.balance) {
|
|
114
|
-
try {
|
|
115
|
-
const onChain = BigInt(onChainBalance)
|
|
116
|
-
const indexed = BigInt(freshToken.balance)
|
|
117
|
-
if (onChain < indexed) {
|
|
118
|
-
const fields = formatBalanceFields(onChainBalance, token.decimals)
|
|
119
|
-
return {
|
|
120
|
-
...token,
|
|
121
|
-
...fields,
|
|
122
|
-
balanceUsd: freshToken.balanceUsd,
|
|
123
|
-
balanceUsdFormatted: freshToken.balanceUsdFormatted,
|
|
124
|
-
isSufficientBalance: freshToken.isSufficientBalance,
|
|
125
|
-
priceUsd: freshToken.priceUsd,
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
} catch {
|
|
129
|
-
// Fall through to indexer balance
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// Merge token metadata with fresh balance data
|
|
134
|
-
return {
|
|
135
|
-
...token,
|
|
136
|
-
balance: freshToken.balance,
|
|
137
|
-
balanceDisplay: freshToken.balanceDisplay,
|
|
138
|
-
balanceLocaleDisplay: freshToken.balanceLocaleDisplay,
|
|
139
|
-
balanceFormatted: freshToken.balanceFormatted,
|
|
140
|
-
balanceUsd: freshToken.balanceUsd,
|
|
141
|
-
balanceUsdFormatted: freshToken.balanceUsdFormatted,
|
|
142
|
-
isSufficientBalance: freshToken.isSufficientBalance,
|
|
143
|
-
priceUsd: freshToken.priceUsd,
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// Token not found in indexer data — use on-chain balance as source of truth
|
|
148
|
-
if (onChainBalance !== undefined) {
|
|
149
|
-
const fields = formatBalanceFields(onChainBalance, token.decimals)
|
|
150
|
-
return {
|
|
151
|
-
...token,
|
|
152
|
-
...fields,
|
|
153
|
-
balanceUsd: 0,
|
|
154
|
-
balanceUsdFormatted: "$0.00",
|
|
155
|
-
isSufficientBalance: false,
|
|
156
|
-
priceUsd: token.priceUsd,
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
// Token not found and no on-chain data yet — zero out if indexer has loaded
|
|
161
|
-
if (sortedTokens.length > 0 || !isLoadingBalances) {
|
|
162
|
-
return {
|
|
163
|
-
...token,
|
|
164
|
-
balance: "0",
|
|
165
|
-
balanceDisplay: "0",
|
|
166
|
-
balanceLocaleDisplay: "0",
|
|
167
|
-
balanceFormatted: "0",
|
|
168
|
-
balanceUsd: 0,
|
|
169
|
-
balanceUsdFormatted: "$0.00",
|
|
170
|
-
isSufficientBalance: false,
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// Return original token while still loading
|
|
175
|
-
return token
|
|
176
|
-
}, [token, sortedTokens, isLoadingBalances, onChainBalance])
|
|
177
|
-
|
|
178
|
-
return {
|
|
179
|
-
token: tokenWithFreshBalance,
|
|
180
|
-
isLoadingBalance: isLoadingBalances || isLoadingOnChain,
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* Enriches multiple tokens with fresh balance data
|
|
186
|
-
*/
|
|
187
|
-
export function useTokensWithFreshBalance(
|
|
188
|
-
tokens: Token[],
|
|
189
|
-
accountAddress?: string,
|
|
190
|
-
): { tokens: Token[]; isLoadingBalance: boolean } {
|
|
191
|
-
// Fetch fresh balance data for the account
|
|
192
|
-
const { sortedTokens, isLoadingBalances } = useTokenBalances(
|
|
193
|
-
accountAddress as Address | null,
|
|
194
|
-
undefined,
|
|
195
|
-
{ refetchInterval: WIDGET_REFRESH_INTERVAL },
|
|
196
|
-
)
|
|
197
|
-
|
|
198
|
-
// Enrich tokens with fresh balance data
|
|
199
|
-
const tokensWithFreshBalance = useMemo(() => {
|
|
200
|
-
if (!sortedTokens || tokens.length === 0) {
|
|
201
|
-
return tokens
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
return tokens.map((token) => {
|
|
205
|
-
// Find matching token in balance data
|
|
206
|
-
const freshToken = sortedTokens.find(
|
|
207
|
-
(t: Token) =>
|
|
208
|
-
addressEqual(t.contractAddress, token.contractAddress) &&
|
|
209
|
-
(t.chainId || 0) === (token.chainId || 0),
|
|
210
|
-
)
|
|
211
|
-
|
|
212
|
-
if (freshToken) {
|
|
213
|
-
// Merge token metadata with fresh balance data
|
|
214
|
-
return {
|
|
215
|
-
...token,
|
|
216
|
-
balance: freshToken.balance,
|
|
217
|
-
balanceDisplay: freshToken.balanceDisplay,
|
|
218
|
-
balanceLocaleDisplay: freshToken.balanceLocaleDisplay,
|
|
219
|
-
balanceFormatted: freshToken.balanceFormatted,
|
|
220
|
-
balanceUsd: freshToken.balanceUsd,
|
|
221
|
-
balanceUsdFormatted: freshToken.balanceUsdFormatted,
|
|
222
|
-
isSufficientBalance: freshToken.isSufficientBalance,
|
|
223
|
-
priceUsd: freshToken.priceUsd,
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
// Token not found — balance is likely zero (filtered out by useTokenBalances)
|
|
228
|
-
if (sortedTokens.length > 0 || !isLoadingBalances) {
|
|
229
|
-
return {
|
|
230
|
-
...token,
|
|
231
|
-
balance: "0",
|
|
232
|
-
balanceDisplay: "0",
|
|
233
|
-
balanceLocaleDisplay: "0",
|
|
234
|
-
balanceFormatted: "0",
|
|
235
|
-
balanceUsd: 0,
|
|
236
|
-
balanceUsdFormatted: "$0.00",
|
|
237
|
-
isSufficientBalance: false,
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
return token
|
|
242
|
-
})
|
|
243
|
-
}, [tokens, sortedTokens, isLoadingBalances])
|
|
244
|
-
|
|
245
|
-
return { tokens: tokensWithFreshBalance, isLoadingBalance: isLoadingBalances }
|
|
246
|
-
}
|