utils APIs
- calculateSlippageAmount
- calculateGasMargin
- getRouterContract
- getBscScanLink
- isAddress
- shortenAddress
- getEtherscanLink
- basisPointsToPercent
- getTokenAddress
- copyToClipboard
- deepMergeByKey
- decrypt
- encrypt
- emailErrorMsg
- reqErrorMsg
- debouncePromise
- callbackify
- isValidURL
- hasUserApiEditAccess
- loadThirdPartyScript
- getCurrentWindow
- hashVote
- toEthSignedMessageHash
- MAINNET_ID
- usePrevious
- bnum
- normalizeBalance
- isWalletScheme
- WalletSchemeProposalState
- VotingMachineProposalState
- calculateStakes
- formatBalance
- denormalizeBalance
- PendingAction
- isVoteNo
- isVoteYes
- parseSignedVoteMessage
- toPercentage
- verifySignedVote
- NETWORK_ASSET_SYMBOL
- ZERO_ADDRESS
- enumKeys
- DEFAULT_CHAIN_ID
- useInterval
- getBlockchainLink
- getERC20Token
- getDxVoteContract
- toAddressStub
- getNetworkById
- formatNumberValue
- encodeDxdVestingCreate
- encodeErc20Approval
- encodeErc20Transfer
- encodeRepMint
- TXEvents
- BigNumber
- ZERO_HASH
- ANY_ADDRESS
- ERC20_APPROVE_SIGNATURE
- ERC20_TRANSFER_SIGNATURE
- QUEUED_PRIORITY_THRESHOLD
- NETWORKS
- toCamelCaseString
- ALCHEMY_NETWORK_URLS
- DEFAULT_RPC_URLS
- appendEthAPIKey
- NETWORK_APIS
- INFURA_NETWORK_NAMES
- POKT_NETWORK_URLS
- constants
- session
- displayFromWei
- getBigNumber
- getSupplyCap
- getAllowance
- approve
- fromWei
- getFullDisplayBalance
- getLibrary
- maxAmountSpend
- addMaticToMetamask
- returnTokenFromKey
- isSupportedNetwork
- formatTokenAmount
- formatCompact
- formatNumber
- isTokensOnList
- getAPYWithFee
- getRewardRate
- getStakedAmountStakingInfo
- getTVLStaking
- getEarnedUSDLPFarm
- getEarnedUSDDualFarm
- formatAPY
- getUSDString
- formatMulDivTokenAmount
- getExactTokenAmount
- escapeRegExp
- currencyId
- getOneYearFee
- returnStakingInfo
- getAllTokensOnUniswap
- getAllPairsOnUniswap
- getSecondsOneDay
- getValueTokenDecimals
- getPartialTokenAmount
- confirmPriceImpactWithoutFee
- halfAmountSpend
- getTokenInfo
- getEthPrice
- getIntervalTokenData
- getTokenAPRSyrup
- getEarnedUSDSyrup
- getFormattedPrice
- getPriceColor
- getTopTokens
- shortenTx
- getContract
- isZero
- getChartData
- getChartDates
- getChartStartTime
- getLimitedData
- getTopPairs
- getGlobalData
- getBulkPairData
- formatDateFromTimeStamp
- getPairChartData
- getYAXISValuesAnalytics
- getPairTransactions
- getTokenChartData
- getTokenPairs2
- useLairDQUICKAPY
- getPageItemsToLoad
- returnFullWidthMobile
- returnDualStakingInfo
- getDaysCurrentYear
- getTokenPairs
- getBlockFromTimestamp
- getFarmLPToken
- getSyrupLPToken
- initTokenAmountFromCallResult
- returnSyrupInfo
- getCallStateResult
- notEmpty
- DEFAULT_TO_CHAIN_ID
- CHAINS
- UnsupportedChainIdError
- switchChain
- showMigrationBanner
- isValidAddress
- ChainId
- COLORS
- QUERIES
- onboard
- disableSendForm
- max
- parseUnits
- formatUnits
- ParsingError
- TOKENS_LIST
- Token
- blockLiquidity
- migrationPoolV2Warning
- formatEtherRaw
- numberFormatter
- estimateGasForAddEthLiquidity
- DEFAULT_ADD_LIQUIDITY_ETH_GAS_ESTIMATE
- UPDATE_GAS_INTERVAL_MS
- toWeiSafe
- addEtherscan
- receiveAmount
- getEstimatedDepositTime
- DEFAULT_FROM_CHAIN_ID
- formatEther
- PROVIDERS
- getRelayFees
- getLpFee
- isSupportedChainId
- getAddress
- getDepositBox
- TransactionError
- MAX_APPROVAL_AMOUNT
- optimismErc20Pairs
- bobaErc20Pairs
- tagAddress
- validateContractAndChain
- multicallTwoAddress
- IChainSelection
- CHAINS_SELECTION
- onboardBaseConfig
- getConfirmationDepositTime
- shortenAddressLong
- timeAgo
- textareaAutoResize
- initOAuthWindow
- parseURL
- scrollToBottom
- isUrl
- get_url_extension
- wait
- b64_to_utf8
- utf8_to_b64
- callDelayer
- useKeyboardDidShow
- capitalizedCase
- getCoinSymbol
- getCountryName
- getTransactionStatusColor
- useAlert
- scaleSpacing
- getActiveCase
- changeBodyTheme
- getPercentage
- metaGenerator
- useFetch
- visualize
- worldLegends
- dateFormat
- getPerDayStats
- API_BASEURL
- API_INDONESIA
- indonesiaLegends
- getActiveCaseID
- isWsAddress
- constructApiDescriptionObject
- encodeURI
- NOOP
- isLoggedIn
- getBalance
- getAccount
- isTokenOnList
- formatAddressShort
- requiresTypeSlug
- getNextOffchainPollEndingTime
- slugify
- slugifyPreserveDashes
- setupSwagger
- isBlindMode
- getExplorerLink
- isCountdown
- showVvsPrice
- getCookies
- iconFromMIME
- makeRangeArray
- exitIfMaintenance
- sanitizeHtmlString
- parseDate
- retryWrapper
- batchPromises
- arrayPartitions
- sleep
- checkKeyboardTrigger
- clampValue
- debounce
- normalize
- strToInt
- getFromLocalStorage
- saveToLocalStorage
- generateTagColors
- formatNumberWithCommas
- memoize
- calculateTotalInvestment
- throttle
- urlParametersState
- mmddyyyy2ddmmyyy
- sortStringDates
- gtag
- compactNumberFormatter
- getNumberSign
- getLastArrayElement
- fillArrayUntil
- capitalizeFirstLetter
- buildUrl
- XmlWrapper
- XmlTemplate
- setCookie
Other Related APIs
- react#useState
- react#useEffect
- react#useCallback
- react#useContext
- react#useMemo
- react-router-dom#useLocation
- react-redux#useDispatch
- react-redux#useSelector
- react-redux#TypedUseSelectorHook
- redux#bindActionCreators
- ethers#ethers
- ethers#BigNumber
- utils#isValidAddress
- utils#ChainId
- utils#TOKENS_LIST
- utils#PROVIDERS
- utils#getDepositBox
- utils#MAX_APPROVAL_AMOUNT
- utils#optimismErc20Pairs
- utils#bobaErc20Pairs
- utils#tagAddress
utils#TransactionError TypeScript Examples
The following examples show how to use
utils#TransactionError.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: hooks.ts From frontend-v1 with GNU Affero General Public License v3.0 | 4 votes |
export function useSendAcross() {
const { referrer } = useQuery();
const { isConnected, chainId, account, signer } = useConnection();
const {
fromChain,
toChain,
toAddress,
amount,
token,
error,
currentlySelectedFromChain,
currentlySelectedToChain,
} = useAppSelector((state) => state.send);
const { balance } = useBalance({
chainId: currentlySelectedFromChain.chainId,
account,
tokenAddress: token,
});
const { block } = useL2Block();
const depositBox = getDepositBox(currentlySelectedFromChain.chainId);
const { data: allowance } = useAllowance(
{
chainId: currentlySelectedFromChain.chainId,
token,
owner: account!,
spender: depositBox.address,
amount,
},
{ skip: !account || !isConnected || !depositBox }
);
const { approve: rawApprove } = useERC20(token);
const canApprove = balance.gte(amount) && amount.gte(0);
const hasToApprove = allowance?.hasToApprove ?? false;
async function approve() {
return rawApprove({
amount: MAX_APPROVAL_AMOUNT,
spender: depositBox.address,
signer,
});
}
const hasToSwitchChain =
isConnected && currentlySelectedFromChain.chainId !== chainId;
const tokenSymbol =
TOKENS_LIST[currentlySelectedFromChain.chainId].find(
(t) => t.address === token
)?.symbol ?? "";
const { data: fees, isFetching: isFetchingFees } = useBridgeFees(
{
amount,
tokenSymbol,
blockTime: block?.timestamp!,
},
{ skip: tokenSymbol === "" || amount.lte(0) || !block?.timestamp }
);
const canSend = useMemo(
() =>
currentlySelectedFromChain.chainId &&
block &&
currentlySelectedToChain.chainId &&
amount &&
token &&
fees &&
!isFetchingFees &&
toAddress &&
isValidAddress(toAddress) &&
!hasToApprove &&
!hasToSwitchChain &&
!error &&
!fees.isAmountTooLow &&
!fees.isLiquidityInsufficient &&
balance
.sub(
token === "0x0000000000000000000000000000000000000000"
? BigNumber.from(ethers.utils.parseEther(FEE_ESTIMATION))
: BigNumber.from("0")
)
.gte(amount),
[
currentlySelectedFromChain.chainId,
block,
currentlySelectedToChain.chainId,
amount,
token,
fees,
isFetchingFees,
toAddress,
hasToApprove,
hasToSwitchChain,
error,
balance,
]
);
const send = useCallback(async () => {
if (
!signer ||
!canSend ||
!fees ||
isFetchingFees ||
!toAddress ||
!block
) {
return {};
}
try {
const depositBox = getDepositBox(
currentlySelectedFromChain.chainId,
signer
);
const isETH = token === ethers.constants.AddressZero;
const value = isETH ? amount : ethers.constants.Zero;
const l2Token = isETH
? TOKENS_LIST[currentlySelectedFromChain.chainId][0].address
: token;
const { instantRelayFee, slowRelayFee } = fees;
let timestamp = block.timestamp;
const data = depositBox.interface.encodeFunctionData("deposit", [
toAddress,
l2Token,
amount,
slowRelayFee.pct,
instantRelayFee.pct,
timestamp,
]);
// do not tag a referrer if data is not provided as a hex string.
const taggedData =
referrer && ethers.utils.isAddress(referrer)
? tagAddress(data, referrer)
: data;
if (
!(await validateContractAndChain(
depositBox.address,
currentlySelectedFromChain.chainId,
signer
))
) {
return {};
}
const tx = await signer.sendTransaction({
data: taggedData,
value,
to: depositBox.address,
chainId: currentlySelectedFromChain.chainId,
});
return { tx, fees };
} catch (e) {
throw new TransactionError(
depositBox.address,
"deposit",
toAddress,
token,
amount,
fees.slowRelayFee.pct,
fees.instantRelayFee.pct,
block.timestamp
);
}
}, [
amount,
block,
canSend,
depositBox.address,
fees,
isFetchingFees,
currentlySelectedFromChain.chainId,
signer,
toAddress,
token,
referrer,
]);
return {
fromChain,
toChain,
toAddress,
amount,
token,
error,
canSend,
canApprove,
hasToApprove,
hasToSwitchChain,
send,
approve,
fees: isFetchingFees ? undefined : fees,
spender: depositBox.address,
};
}