├── .dockerignore ├── .github ├── actions │ └── setup │ │ └── action.yml └── workflows │ ├── docker-publish.yml │ ├── npm-publish.yml │ ├── publishable-packages.yml │ └── ui-deploy.yml ├── .gitignore ├── .husky ├── check-npmignore.mjs └── pre-commit ├── .npmrc ├── .nvmrc ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── eslint.config.mjs ├── jest.config.base.mjs ├── jest.config.esm.mjs ├── ops ├── README.md └── webhooks │ ├── README.md │ ├── install_dependencies.sh │ ├── install_webhook_server.sh │ ├── run_webhook_server.sh │ ├── stop_webook_server.sh │ ├── test_webhook_server.sh │ └── webhook_postreceive.sh ├── package.json ├── packages ├── api │ ├── .dockerignore │ ├── .gitignore │ ├── Dockerfile │ ├── LICENSE │ ├── Makefile │ ├── README.md │ ├── bench │ │ ├── bench.sh │ │ └── payload.lua │ ├── ci │ │ └── package_check.sh │ ├── eslint.config.mjs │ ├── jest.config.mjs │ ├── package.json │ ├── src │ │ ├── config.ts │ │ ├── index.ts │ │ ├── rateLimit.ts │ │ ├── responseCache.ts │ │ └── server.ts │ ├── test │ │ └── server.test.ts │ └── tsconfig.json ├── explorer-backend │ ├── .dockerignore │ ├── .gitignore │ ├── .node-version │ ├── .nvmrc │ ├── Dockerfile │ ├── LICENSE │ ├── Makefile │ ├── README.md │ ├── docker-compose.yml │ ├── eslint.config.mjs │ ├── jest.config.mjs │ ├── package.json │ ├── public │ │ └── index.html │ ├── scripts │ │ ├── README.md │ │ ├── backfill_cctp.js │ │ ├── bonder_balance_checker.js │ │ ├── docker.sh │ │ ├── loadtest │ │ │ ├── bench.sh │ │ │ └── payload.lua │ │ ├── package.json │ │ ├── postgres.sh │ │ ├── postgres_dev.sh │ │ ├── refresh_pending.js │ │ └── select_transferIds_console.js │ ├── src │ │ ├── Db.ts │ │ ├── OsStats.ts │ │ ├── TransferStats.ts │ │ ├── cache.ts │ │ ├── cli.ts │ │ ├── config.ts │ │ ├── controller.ts │ │ ├── index.ts │ │ ├── populateData.ts │ │ ├── preregenesis.ts │ │ ├── price.ts │ │ ├── rateLimit.ts │ │ ├── responseCache.ts │ │ ├── server.ts │ │ ├── theGraph.ts │ │ ├── utils │ │ │ ├── cctpDomainToChainId.ts │ │ │ ├── chainIdToName.ts │ │ │ ├── chainSlugToId.ts │ │ │ ├── chainSlugToName.ts │ │ │ ├── explorerLink.ts │ │ │ ├── explorerLinkAddress.ts │ │ │ ├── explorerLinkTx.ts │ │ │ ├── formatCurrency.ts │ │ │ ├── getChainLogo.ts │ │ │ ├── getColor.ts │ │ │ ├── getDefaultRpcUrl.ts │ │ │ ├── getProxyAddress.ts │ │ │ ├── getSlugFromChainId.ts │ │ │ ├── getSubgraphUrl.ts │ │ │ ├── getSupportedCctpChains.ts │ │ │ ├── getTokenLogo.ts │ │ │ ├── integrationPartnerImage.ts │ │ │ ├── integrationPartnerName.ts │ │ │ ├── nearestDate.ts │ │ │ ├── padHex.ts │ │ │ ├── populateTransfer.ts │ │ │ ├── promiseTimeout.ts │ │ │ ├── timeToBridgeStats.ts │ │ │ ├── truncateAddress.ts │ │ │ ├── truncateHash.ts │ │ │ └── truncateString.ts │ │ └── worker.ts │ ├── static │ │ ├── favicon.ico │ │ ├── images │ │ │ └── hop.svg │ │ ├── main.js │ │ └── style.css │ ├── test │ │ ├── config.test.ts │ │ └── theGraph.test.ts │ └── tsconfig.json ├── explorer-frontend │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── components │ │ ├── _dark.tsx │ │ ├── _light.tsx │ │ ├── _theme.tsx │ │ └── _useTheme.tsx │ ├── eslint.config.mjs │ ├── netlify.toml │ ├── next-env.d.ts │ ├── next.config.js │ ├── package.json │ ├── pages │ │ ├── _app.tsx │ │ ├── api │ │ │ └── hello.ts │ │ ├── assets │ │ │ ├── circles-bg-dark.svg │ │ │ └── circles-bg.svg │ │ └── index.tsx │ ├── public │ │ ├── favicon.ico │ │ ├── lib │ │ │ ├── clipboard-1.4.0.min.js │ │ │ ├── d3.chart.min.js │ │ │ ├── d3.v3.min.js │ │ │ ├── ethers-5.0.umd.min.js │ │ │ ├── luxon-1.27.0.min.js │ │ │ ├── sankey.js │ │ │ ├── sankey.patched.js │ │ │ └── vue-2.6.14.min.js │ │ └── static.js │ ├── styles │ │ ├── Index.module.css │ │ └── globals.css │ └── tsconfig.json ├── frontend │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── eslint.config.mjs │ ├── index.html │ ├── netlify.toml │ ├── package.json │ ├── public │ │ ├── 451.html │ │ ├── airdrop │ │ │ ├── authereum │ │ │ │ └── index.html │ │ │ ├── index.html │ │ │ ├── preview │ │ │ │ └── index.html │ │ │ └── social-verify │ │ │ │ └── index.html │ │ ├── apple-touch-icon.png │ │ ├── assets │ │ │ ├── circles-bg-dark.svg │ │ │ └── circles-bg.svg │ │ ├── authereum-verified │ │ │ └── index.html │ │ ├── cachebust │ │ ├── claim │ │ │ └── index.html │ │ ├── commit-transfers │ │ │ └── index.html │ │ ├── convert │ │ │ └── index.html │ │ ├── favicon.ico │ │ ├── health │ │ │ └── index.html │ │ ├── images │ │ │ ├── hop_600x200.jpg │ │ │ ├── hop_logo.png │ │ │ └── hop_logo_192x192.png │ │ ├── js │ │ │ ├── dinoGame.js │ │ │ └── static.js │ │ ├── logo16.png │ │ ├── logo192.png │ │ ├── logo32.png │ │ ├── logo512.png │ │ ├── manifest.json │ │ ├── pool │ │ │ └── index.html │ │ ├── pools │ │ │ └── index.html │ │ ├── relay │ │ │ └── index.html │ │ ├── rewards │ │ │ └── index.html │ │ ├── robots.txt │ │ ├── send │ │ │ └── index.html │ │ ├── site.webmanifest │ │ ├── social-verified │ │ │ └── index.html │ │ ├── stake │ │ │ └── index.html │ │ ├── stats │ │ │ └── index.html │ │ ├── whitepaper.pdf │ │ └── withdraw │ │ │ └── index.html │ ├── src │ │ ├── App.css │ │ ├── App.tsx │ │ ├── AppRoutes.tsx │ │ ├── abis │ │ │ ├── MerkleRewards.json │ │ │ ├── index.ts │ │ │ └── types │ │ │ │ ├── ENSToken.d.ts │ │ │ │ ├── common.ts │ │ │ │ ├── factories │ │ │ │ └── ENSToken__factory.ts │ │ │ │ └── index.ts │ │ ├── assets │ │ │ ├── bolt.svg │ │ │ ├── circles-bg-dark.svg │ │ │ ├── circles-bg.svg │ │ │ ├── logos │ │ │ │ ├── arbitrum.svg │ │ │ │ ├── coinbasewallet.svg │ │ │ │ ├── dai.svg │ │ │ │ ├── deversifi.svg │ │ │ │ ├── discord.svg │ │ │ │ ├── eth.svg │ │ │ │ ├── github.svg │ │ │ │ ├── gnosis.svg │ │ │ │ ├── gnosissafe.svg │ │ │ │ ├── hop-logo-black.svg │ │ │ │ ├── hop-logo-full-color.svg │ │ │ │ ├── hop-logo-white.svg │ │ │ │ ├── hop-token-logo.svg │ │ │ │ ├── hop.svg │ │ │ │ ├── mainnet.svg │ │ │ │ ├── matic.svg │ │ │ │ ├── medium.svg │ │ │ │ ├── metamask.png │ │ │ │ ├── metamask.svg │ │ │ │ ├── nova.svg │ │ │ │ ├── op.svg │ │ │ │ ├── optimism.svg │ │ │ │ ├── polygon.svg │ │ │ │ ├── sbtc.svg │ │ │ │ ├── seth.svg │ │ │ │ ├── snx.svg │ │ │ │ ├── susd.svg │ │ │ │ ├── twitter-x.svg │ │ │ │ ├── twitter.svg │ │ │ │ ├── usdc.svg │ │ │ │ ├── usdt.svg │ │ │ │ ├── walletconnect.svg │ │ │ │ ├── wbtc.svg │ │ │ │ └── xdai.svg │ │ │ ├── moon-icon.svg │ │ │ ├── settings-icon.svg │ │ │ └── sun-icon.svg │ │ ├── components │ │ │ ├── AccountDetails │ │ │ │ ├── AccountDetails.tsx │ │ │ │ ├── AccountTransferHistory.tsx │ │ │ │ └── index.tsx │ │ │ ├── Alert │ │ │ │ ├── Alert.tsx │ │ │ │ └── index.tsx │ │ │ ├── AmmDetails │ │ │ │ ├── AmmDetails.tsx │ │ │ │ └── index.tsx │ │ │ ├── AmountSelectorCard │ │ │ │ ├── AmountSelectorCard.tsx │ │ │ │ └── index.tsx │ │ │ ├── Banner │ │ │ │ ├── Banner.tsx │ │ │ │ └── index.tsx │ │ │ ├── Button │ │ │ │ ├── Button.tsx │ │ │ │ ├── ButtonLink.tsx │ │ │ │ ├── ButtonsWrapper.tsx │ │ │ │ ├── ClipboardCopyButton │ │ │ │ │ ├── ClipboardCopyButton.tsx │ │ │ │ │ ├── ClipboardIcon.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── StyledButton.tsx │ │ │ │ └── index.tsx │ │ │ ├── Footer │ │ │ │ ├── Footer.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── useBlockNumber.tsx │ │ │ ├── Grid │ │ │ │ ├── Grid.tsx │ │ │ │ └── index.ts │ │ │ ├── Header │ │ │ │ ├── ConnectWalletButton.tsx │ │ │ │ ├── Header.tsx │ │ │ │ ├── HeaderRoutes.tsx │ │ │ │ ├── Settings.tsx │ │ │ │ ├── TxPill.tsx │ │ │ │ ├── WalletWarning.tsx │ │ │ │ └── index.tsx │ │ │ ├── InfoTooltip │ │ │ │ ├── AprDetailsTooltip.tsx │ │ │ │ ├── DetailRow.tsx │ │ │ │ ├── FeeDetails.tsx │ │ │ │ ├── InfoTooltip.tsx │ │ │ │ └── index.ts │ │ │ ├── LargeTextField │ │ │ │ ├── LargeTextField.tsx │ │ │ │ └── index.tsx │ │ │ ├── Link │ │ │ │ ├── Link.tsx │ │ │ │ ├── StyledLink.tsx │ │ │ │ └── index.ts │ │ │ ├── Loading │ │ │ │ ├── Loading.tsx │ │ │ │ └── index.ts │ │ │ ├── Modal │ │ │ │ ├── Modal.tsx │ │ │ │ ├── StyledModal.tsx │ │ │ │ ├── TxStatusModal.tsx │ │ │ │ └── index.tsx │ │ │ ├── NetworkSelector │ │ │ │ ├── NetworkSelector.tsx │ │ │ │ ├── RaisedNetworkSelector.tsx │ │ │ │ ├── index.ts │ │ │ │ └── useNetworkSelectorStyles.ts │ │ │ ├── SmallTextField │ │ │ │ ├── SmallTextField.tsx │ │ │ │ └── index.tsx │ │ │ ├── Table │ │ │ │ ├── RightAlignedData.tsx │ │ │ │ ├── Table.tsx │ │ │ │ ├── index.ts │ │ │ │ └── makeData.ts │ │ │ ├── TokenWrapper │ │ │ │ ├── Expandable.tsx │ │ │ │ ├── TokenWrapper.tsx │ │ │ │ ├── TokenWrapperContext.tsx │ │ │ │ └── index.tsx │ │ │ ├── Transaction │ │ │ │ ├── TransactionRow.tsx │ │ │ │ ├── TransactionStatus.tsx │ │ │ │ ├── TransactionsList.tsx │ │ │ │ ├── TxStatusTracker.tsx │ │ │ │ ├── index.ts │ │ │ │ └── useTxStatusStyles.ts │ │ │ ├── Web3Modal │ │ │ │ ├── Web3Modal.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── useWeb3ModalStyles.tsx │ │ │ ├── selects │ │ │ │ ├── FlatSelect.tsx │ │ │ │ ├── RaisedSelect.tsx │ │ │ │ └── SelectOption.tsx │ │ │ ├── slider │ │ │ │ ├── Slider.tsx │ │ │ │ └── index.tsx │ │ │ ├── tabs │ │ │ │ └── FlatTabs.tsx │ │ │ ├── txConfirm │ │ │ │ ├── AddLiquidity.tsx │ │ │ │ ├── AddLiquidityAndStake.tsx │ │ │ │ ├── Approval.tsx │ │ │ │ ├── ApproveAndStake.tsx │ │ │ │ ├── ConfirmConvert.tsx │ │ │ │ ├── ConfirmSend.tsx │ │ │ │ ├── ConfirmStake.tsx │ │ │ │ ├── RemoveLiquidity.tsx │ │ │ │ ├── TxConfirm.tsx │ │ │ │ ├── TxList.tsx │ │ │ │ ├── UnstakeAndRemoveLiquidity.tsx │ │ │ │ ├── UnwrapToken.tsx │ │ │ │ ├── WithdrawReview.tsx │ │ │ │ ├── WithdrawStake.tsx │ │ │ │ ├── WrapToken.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── useSendingTransaction.ts │ │ │ └── ui │ │ │ │ ├── Circle.tsx │ │ │ │ ├── CopyEthAddress.tsx │ │ │ │ ├── EthAddress.tsx │ │ │ │ ├── Icon.tsx │ │ │ │ └── SvgImg.tsx │ │ ├── config │ │ │ ├── addresses.ts │ │ │ ├── blocklist.ts │ │ │ ├── config.ts │ │ │ ├── disabled.test.ts │ │ │ ├── disabled.ts │ │ │ ├── goerli.ts │ │ │ ├── index.ts │ │ │ ├── interfaces.ts │ │ │ ├── mainnet.ts │ │ │ ├── networks.ts │ │ │ └── sepolia.ts │ │ ├── contexts │ │ │ ├── AppContext │ │ │ │ ├── AppContext.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── useAccountDetails.tsx │ │ │ │ ├── useBridges.ts │ │ │ │ ├── useEvents.ts │ │ │ │ ├── useSettings.tsx │ │ │ │ ├── useTokens.ts │ │ │ │ ├── useTxConfirm.ts │ │ │ │ └── useTxHistory.ts │ │ │ └── Web3Context.tsx │ │ ├── hooks │ │ │ ├── index.ts │ │ │ ├── useAddTokenToMetamask.ts │ │ │ ├── useAmountSelectorCardStyles.ts │ │ │ ├── useApprove.ts │ │ │ ├── useAssets.ts │ │ │ ├── useAsyncMemo.tsx │ │ │ ├── useBalance.tsx │ │ │ ├── useCheckPoolDeprecated.tsx │ │ │ ├── useCheckTokenDeprecated.tsx │ │ │ ├── useCurrentBlockTimestamp.ts │ │ │ ├── useDisableTxs.ts │ │ │ ├── useEns.ts │ │ │ ├── useEstimateTxCost.ts │ │ │ ├── useFeeConversions.ts │ │ │ ├── useGnosisSafeTransaction.ts │ │ │ ├── useIsSmartContractWallet.ts │ │ │ ├── useNeedsTokenForFee.ts │ │ │ ├── useQueryParams.tsx │ │ │ ├── useSelectedNetwork.ts │ │ │ ├── useSufficientBalance.ts │ │ │ ├── useTokenPrice.ts │ │ │ ├── useTransaction.ts │ │ │ ├── useTransactionReplacement.ts │ │ │ ├── useTransactionStatus.tsx │ │ │ ├── useTransferTimeEstimate.ts │ │ │ └── useTxResult.ts │ │ ├── logger │ │ │ ├── index.ts │ │ │ └── logger.ts │ │ ├── main.tsx │ │ ├── models │ │ │ ├── Address.ts │ │ │ ├── Network.ts │ │ │ ├── Price.ts │ │ │ ├── Token.ts │ │ │ └── Transaction.ts │ │ ├── pages │ │ │ ├── Airdrop │ │ │ │ ├── AirdropPreview │ │ │ │ │ ├── AddressModal.tsx │ │ │ │ │ ├── AirdropPreview.tsx │ │ │ │ │ ├── AirdropPreviewWrapper.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── useDistribution.tsx │ │ │ │ ├── AuthereumVerified │ │ │ │ │ ├── AuthereumVerified.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── AuthereumVerify │ │ │ │ │ ├── AuthereumVerify.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── ClaimDateMessage.tsx │ │ │ │ ├── SocialVerified │ │ │ │ │ ├── SocialVerified.tsx │ │ │ │ │ └── index.ts │ │ │ │ └── SocialVerify │ │ │ │ │ ├── SocialVerify.tsx │ │ │ │ │ └── index.ts │ │ │ ├── Claim │ │ │ │ ├── ChooseDelegate.tsx │ │ │ │ ├── Claim.tsx │ │ │ │ ├── ClaimReview.tsx │ │ │ │ ├── ClaimStart.tsx │ │ │ │ ├── ClaimWrapper.tsx │ │ │ │ ├── Claimed.tsx │ │ │ │ ├── Claiming.tsx │ │ │ │ ├── DelegateConfirmModal.tsx │ │ │ │ ├── DelegateIcon.tsx │ │ │ │ ├── DelegateInfoModal.tsx │ │ │ │ ├── claims.ts │ │ │ │ ├── config.ts │ │ │ │ ├── index.ts │ │ │ │ ├── merkle.ts │ │ │ │ ├── useClaim.ts │ │ │ │ └── useDelegates.ts │ │ │ ├── CommitTransfers │ │ │ │ ├── CommitTransfers.tsx │ │ │ │ └── index.tsx │ │ │ ├── Convert │ │ │ │ ├── Convert.tsx │ │ │ │ ├── ConvertContent.tsx │ │ │ │ ├── ConvertContext.tsx │ │ │ │ ├── ConvertOption │ │ │ │ │ ├── AmmConvertOption.tsx │ │ │ │ │ ├── ConvertOption.tsx │ │ │ │ │ ├── HopConvertOption.tsx │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── Faucet │ │ │ │ ├── Faucet.tsx │ │ │ │ ├── FaucetContext.tsx │ │ │ │ └── index.tsx │ │ │ ├── Health │ │ │ │ ├── Health.tsx │ │ │ │ └── index.tsx │ │ │ ├── Pools │ │ │ │ ├── PoolDetails │ │ │ │ │ ├── AccountPosition.tsx │ │ │ │ │ ├── BottomPoolStats.tsx │ │ │ │ │ ├── DepositForm.tsx │ │ │ │ │ ├── DinoGame.tsx │ │ │ │ │ ├── PoolDetails.tsx │ │ │ │ │ ├── PoolEmptyState.tsx │ │ │ │ │ ├── StakeForm.tsx │ │ │ │ │ ├── StakingRewardsClaim.tsx │ │ │ │ │ ├── TopPoolStats.tsx │ │ │ │ │ ├── WithdrawForm.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── useStyles.tsx │ │ │ │ ├── PoolsContext.tsx │ │ │ │ ├── PoolsOverview │ │ │ │ │ ├── PoolRow.tsx │ │ │ │ │ ├── PoolsOverview.tsx │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── usePools.tsx │ │ │ │ ├── components │ │ │ │ │ ├── BalanceText.tsx │ │ │ │ │ ├── InputField.tsx │ │ │ │ │ └── TokenIcon.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── usePoolStats.ts │ │ │ │ ├── useStaking.tsx │ │ │ │ └── useStakingAll.tsx │ │ │ ├── Relay │ │ │ │ ├── Relay.tsx │ │ │ │ ├── index.tsx │ │ │ │ └── relayer │ │ │ │ │ ├── ArbitrumRelayer.ts │ │ │ │ │ ├── GnosisRelayer.ts │ │ │ │ │ ├── LineaRelayer.ts │ │ │ │ │ ├── OptimismRelayer.ts │ │ │ │ │ ├── PolygonRelayer.ts │ │ │ │ │ ├── PolygonZkRelayer.ts │ │ │ │ │ ├── Relayer.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── theGraph.ts │ │ │ │ │ └── types.ts │ │ │ ├── Rewards │ │ │ │ ├── Rewards.tsx │ │ │ │ ├── RewardsWidget.tsx │ │ │ │ ├── config.ts │ │ │ │ ├── index.tsx │ │ │ │ ├── merkle.ts │ │ │ │ ├── useHasRewards.tsx │ │ │ │ └── useRewards.tsx │ │ │ ├── Send │ │ │ │ ├── CustomRecipientDropdown.tsx │ │ │ │ ├── FeeRefund.tsx │ │ │ │ ├── Send.tsx │ │ │ │ ├── SendAmountSelectorCard.tsx │ │ │ │ ├── SendHeader.tsx │ │ │ │ ├── index.tsx │ │ │ │ ├── useAvailableLiquidity.tsx │ │ │ │ ├── useSend.tsx │ │ │ │ ├── useSendData.tsx │ │ │ │ ├── useSendStyles.ts │ │ │ │ └── useSendTransaction.ts │ │ │ ├── Stats │ │ │ │ ├── BalanceStats.tsx │ │ │ │ ├── BonderStats.tsx │ │ │ │ ├── DebitWindowStats.tsx │ │ │ │ ├── PendingAmountStats.tsx │ │ │ │ ├── PoolStats.tsx │ │ │ │ ├── Stats.tsx │ │ │ │ ├── StatsContext.tsx │ │ │ │ └── index.tsx │ │ │ └── Withdraw │ │ │ │ ├── Withdraw.tsx │ │ │ │ └── index.tsx │ │ ├── react-app-env.d.ts │ │ ├── reportWebVitals.ts │ │ ├── setupTests.ts │ │ ├── theme │ │ │ ├── ThemeProvider.tsx │ │ │ ├── dark.tsx │ │ │ ├── index.ts │ │ │ ├── light.tsx │ │ │ ├── overrides.ts │ │ │ ├── theme.tsx │ │ │ └── typography.ts │ │ ├── utils │ │ │ ├── addresses.test.ts │ │ │ ├── addresses.ts │ │ │ ├── bigNumberMax.ts │ │ │ ├── bigNumberMin.test.ts │ │ │ ├── bigNumberMin.ts │ │ │ ├── blocks.test.ts │ │ │ ├── blocks.ts │ │ │ ├── bridges.ts │ │ │ ├── capitalize.ts │ │ │ ├── chainIdToHex.ts │ │ │ ├── commafy.ts │ │ │ ├── constants.ts │ │ │ ├── contracts.ts │ │ │ ├── createTransaction.ts │ │ │ ├── ens.ts │ │ │ ├── format.test.ts │ │ │ ├── format.ts │ │ │ ├── getBaseExplorerUrl.ts │ │ │ ├── getBonderFeeWithId.ts │ │ │ ├── getChainName.ts │ │ │ ├── getDefaultSendGasLimit.ts │ │ │ ├── getEtherscanLink.ts │ │ │ ├── getExplorerUrl.ts │ │ │ ├── getIsTxFinalized.ts │ │ │ ├── getNativeTokenSymbol.ts │ │ │ ├── getProvider.ts │ │ │ ├── getQueryParam.ts │ │ │ ├── getRpcUrl.ts │ │ │ ├── getTransferTimeSeconds.ts │ │ │ ├── getTransferTimeString.ts │ │ │ ├── index.ts │ │ │ ├── localStorage.ts │ │ │ ├── logs.ts │ │ │ ├── networks.test.ts │ │ │ ├── networks.ts │ │ │ ├── normalizeTokenSymbol.ts │ │ │ ├── prettifyErrorMessage.ts │ │ │ ├── promiseTimeout.ts │ │ │ ├── queries.ts │ │ │ ├── retryPromise.ts │ │ │ ├── shiftBNDecimals.ts │ │ │ ├── stake.ts │ │ │ ├── styles.ts │ │ │ ├── timings.ts │ │ │ ├── toPercentDisplay.ts │ │ │ ├── toTokenDisplay.ts │ │ │ ├── toUsdDisplay.ts │ │ │ ├── tokens.ts │ │ │ ├── transactions.test.ts │ │ │ ├── transactions.ts │ │ │ ├── transferTimeDisplay.ts │ │ │ ├── updateQueryParams.ts │ │ │ └── wait.ts │ │ └── vite-env.d.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── hop-node │ ├── .dockerignore │ ├── .gitignore │ ├── Dockerfile │ ├── LICENSE │ ├── Makefile │ ├── README.md │ ├── docker-compose.yml │ ├── eslint.config.mjs │ ├── jest.config.mjs │ ├── package.json │ ├── src │ │ ├── aws │ │ │ ├── AwsSigner.ts │ │ │ ├── KmsSigner.ts │ │ │ ├── LambdaSigner.ts │ │ │ ├── cloudWatch.ts │ │ │ ├── index.ts │ │ │ ├── parameterStore.ts │ │ │ └── s3Upload.ts │ │ ├── chains │ │ │ ├── AbstractChainBridge.ts │ │ │ ├── Chains │ │ │ │ ├── arbitrum │ │ │ │ │ ├── ArbitrumAddresses.ts │ │ │ │ │ ├── ArbitrumBridge.ts │ │ │ │ │ ├── ArbitrumFinalityService.ts │ │ │ │ │ ├── ArbitrumMessageService.ts │ │ │ │ │ └── inclusion │ │ │ │ │ │ └── ArbitrumInclusionService.ts │ │ │ │ ├── gnosis │ │ │ │ │ ├── GnosisAddresses.ts │ │ │ │ │ ├── GnosisBridge.ts │ │ │ │ │ ├── GnosisFinalityService.ts │ │ │ │ │ └── GnosisMessageService.ts │ │ │ │ ├── linea │ │ │ │ │ ├── LineaBridge.ts │ │ │ │ │ ├── LineaFinalityService.ts │ │ │ │ │ └── LineaMessageService.ts │ │ │ │ ├── optimism │ │ │ │ │ ├── OptimismAddresses.ts │ │ │ │ │ ├── OptimismBridge.ts │ │ │ │ │ ├── OptimismFinalityService.ts │ │ │ │ │ ├── OptimismMessageService.ts │ │ │ │ │ └── inclusion │ │ │ │ │ │ ├── AbstractOptimismInclusionService.ts │ │ │ │ │ │ ├── AlchemyInclusionService.ts │ │ │ │ │ │ ├── Derive.ts │ │ │ │ │ │ └── JsonRpcInclusionService.ts │ │ │ │ ├── polygon │ │ │ │ │ ├── PolygonBridge.ts │ │ │ │ │ ├── PolygonFinalityService.ts │ │ │ │ │ └── PolygonMessageService.ts │ │ │ │ ├── polygonzk │ │ │ │ │ ├── PolygonZkBridge.ts │ │ │ │ │ ├── PolygonZkFinalityService.ts │ │ │ │ │ └── PolygonZkMessageService.ts │ │ │ │ ├── scroll │ │ │ │ │ ├── ScrollBridge.ts │ │ │ │ │ ├── ScrollFinalityService.ts │ │ │ │ │ └── ScrollMessageService.ts │ │ │ │ └── zksync │ │ │ │ │ ├── ZkSyncBridge.ts │ │ │ │ │ ├── ZkSyncFinalityService.ts │ │ │ │ │ └── ZkSyncMessageService.ts │ │ │ ├── Factories │ │ │ │ └── ChainBridgeFactory.ts │ │ │ ├── IChainBridge.ts │ │ │ ├── Services │ │ │ │ ├── AbstractFinalityService.ts │ │ │ │ ├── AbstractInclusionService.ts │ │ │ │ ├── AbstractMessageService.ts │ │ │ │ ├── AbstractService.ts │ │ │ │ └── CacheService.ts │ │ │ ├── getChainBridge.ts │ │ │ └── index.ts │ │ ├── cli │ │ │ ├── bondFirstRootOfRoute.ts │ │ │ ├── bondTransferRoot.ts │ │ │ ├── bondWithdrawal.ts │ │ │ ├── bondedUnconfirmedRoots.ts │ │ │ ├── challenger.ts │ │ │ ├── cli.ts │ │ │ ├── commitTransfers.ts │ │ │ ├── confirmRoot.ts │ │ │ ├── dbDump.ts │ │ │ ├── generateChainBalanceArchiveData.ts │ │ │ ├── healthCheck.ts │ │ │ ├── hopNode.ts │ │ │ ├── incompleteSettlements.ts │ │ │ ├── index.ts │ │ │ ├── invalidBondWithdrawals.ts │ │ │ ├── keystores.ts │ │ │ ├── logs.ts │ │ │ ├── metrics │ │ │ │ ├── bonderBalance.ts │ │ │ │ ├── bonderTxCost.ts │ │ │ │ └── sharedMetrics.ts │ │ │ ├── pendingTransfers.ts │ │ │ ├── refreshApiStats.ts │ │ │ ├── relayL1ToL2Message.ts │ │ │ ├── resyncData.ts │ │ │ ├── selfTest.ts │ │ │ ├── send.ts │ │ │ ├── sendToSelf.ts │ │ │ ├── settle.ts │ │ │ ├── shared │ │ │ │ ├── art.ts │ │ │ │ ├── index.ts │ │ │ │ ├── shared.ts │ │ │ │ └── utils.ts │ │ │ ├── showConfig.ts │ │ │ ├── stake.ts │ │ │ ├── stakeStatus.ts │ │ │ ├── swap.ts │ │ │ ├── totalStake.ts │ │ │ ├── transferId.ts │ │ │ ├── transferIds.ts │ │ │ ├── transferRoot.ts │ │ │ ├── transferRoots.ts │ │ │ ├── transferRootsCount.ts │ │ │ ├── transfersCount.ts │ │ │ ├── transfersTable.ts │ │ │ ├── unbondedTransferRoots.ts │ │ │ ├── unsettledRoots.ts │ │ │ ├── unstake.ts │ │ │ ├── unwind.ts │ │ │ ├── unwithdrawnTransfers.ts │ │ │ ├── updateConfig.ts │ │ │ ├── verifyAwsSigner.ts │ │ │ ├── verifyChainBalance.ts │ │ │ ├── verifyCommits.ts │ │ │ ├── withdraw.ts │ │ │ └── withdrawalProof.ts │ │ ├── config │ │ │ ├── config.ts │ │ │ ├── coreConfig.ts │ │ │ ├── fileOps.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ └── validation.ts │ │ ├── constants │ │ │ ├── chainBalanceArchiveData.ts │ │ │ ├── constants.ts │ │ │ ├── index.ts │ │ │ ├── preRegenesisRootsCommitted.ts │ │ │ └── utils.ts │ │ ├── contracts │ │ │ ├── contracts.ts │ │ │ └── index.ts │ │ ├── db │ │ │ ├── BaseDb.ts │ │ │ ├── DatabaseMigrator.ts │ │ │ ├── GasBoostDb.ts │ │ │ ├── GasCostDb.ts │ │ │ ├── SyncStateDb.ts │ │ │ ├── TransferRootsDb.ts │ │ │ ├── TransfersDb.ts │ │ │ ├── db.ts │ │ │ ├── index.ts │ │ │ ├── migrations.ts │ │ │ └── utils.ts │ │ ├── finality │ │ │ ├── FinalityService.ts │ │ │ ├── IFinalityService.ts │ │ │ ├── index.ts │ │ │ └── strategies │ │ │ │ ├── FinalityStrategy.ts │ │ │ │ ├── IFinalityStrategy.ts │ │ │ │ ├── bonder │ │ │ │ ├── ArbitrumStrategy.ts │ │ │ │ ├── EthereumStrategy.ts │ │ │ │ ├── GnosisStrategy.ts │ │ │ │ ├── LineaStrategy.ts │ │ │ │ ├── OptimismStrategy.ts │ │ │ │ ├── PolygonStrategy.ts │ │ │ │ ├── PolygonZkStrategy.ts │ │ │ │ └── index.ts │ │ │ │ ├── collateralized │ │ │ │ ├── ArbitrumStrategy.ts │ │ │ │ ├── EthereumStrategy.ts │ │ │ │ ├── GnosisStrategy.ts │ │ │ │ ├── LineaStrategy.ts │ │ │ │ ├── OptimismStrategy.ts │ │ │ │ ├── PolygonStrategy.ts │ │ │ │ ├── PolygonZkStrategy.ts │ │ │ │ └── index.ts │ │ │ │ ├── default │ │ │ │ ├── ArbitrumStrategy.ts │ │ │ │ ├── EthereumStrategy.ts │ │ │ │ ├── GnosisStrategy.ts │ │ │ │ ├── LineaStrategy.ts │ │ │ │ ├── OptimismStrategy.ts │ │ │ │ ├── PolygonStrategy.ts │ │ │ │ ├── PolygonZkStrategy.ts │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ └── threshold │ │ │ │ ├── ArbitrumStrategy.ts │ │ │ │ ├── EthereumStrategy.ts │ │ │ │ ├── GnosisStrategy.ts │ │ │ │ ├── LineaStrategy.ts │ │ │ │ ├── OptimismStrategy.ts │ │ │ │ ├── PolygonStrategy.ts │ │ │ │ ├── PolygonZkStrategy.ts │ │ │ │ └── index.ts │ │ ├── gasboost │ │ │ ├── GasBoostSigner.ts │ │ │ ├── GasBoostTransaction.ts │ │ │ ├── GasBoostTransactionFactory.ts │ │ │ ├── MemoryStore.ts │ │ │ ├── Store.ts │ │ │ ├── constants.ts │ │ │ └── index.ts │ │ ├── keystore │ │ │ ├── entropyToMnemonic.ts │ │ │ ├── index.ts │ │ │ └── keystore.ts │ │ ├── logger │ │ │ ├── Logger.ts │ │ │ └── index.ts │ │ ├── metrics │ │ │ ├── MetricsServer.ts │ │ │ ├── index.ts │ │ │ └── metrics.ts │ │ ├── notifier │ │ │ ├── index.ts │ │ │ ├── interfaces.ts │ │ │ ├── notifier.ts │ │ │ └── slack.ts │ │ ├── prompt │ │ │ ├── index.ts │ │ │ └── promptPassphrase.ts │ │ ├── provider │ │ │ ├── index.ts │ │ │ └── provider.ts │ │ ├── swap │ │ │ ├── index.ts │ │ │ ├── swap.ts │ │ │ ├── types.ts │ │ │ └── uniswap │ │ │ │ ├── index.ts │ │ │ │ └── uniswap.ts │ │ ├── theGraph │ │ │ ├── getBondedWithdrawal.ts │ │ │ ├── getBondedWithdrawals.ts │ │ │ ├── getIncompleteSettlements.ts │ │ │ ├── getInvalidBondWithdrawals.ts │ │ │ ├── getMultipleWithdrawalsSettled.ts │ │ │ ├── getStake.ts │ │ │ ├── getSubgraphLastBlockSynced.ts │ │ │ ├── getTransfer.ts │ │ │ ├── getTransferCommitted.ts │ │ │ ├── getTransferFromL1Completed.ts │ │ │ ├── getTransferId.ts │ │ │ ├── getTransferIds.ts │ │ │ ├── getTransferIdsForTransferRoot.ts │ │ │ ├── getTransferRoot.ts │ │ │ ├── getTransferRootBonded.ts │ │ │ ├── getTransferRootConfirmed.ts │ │ │ ├── getTransferRootForTransferId.ts │ │ │ ├── getTransferRootSet.ts │ │ │ ├── getTransferRoots.ts │ │ │ ├── getTransferRootsCount.ts │ │ │ ├── getTransferSent.ts │ │ │ ├── getTransferSentToL2.ts │ │ │ ├── getTransferSents.ts │ │ │ ├── getTransfers.ts │ │ │ ├── getTransfersCommitted.ts │ │ │ ├── getTransfersCount.ts │ │ │ ├── getUnbondedTransferRoots.ts │ │ │ ├── getUnbondedTransfers.ts │ │ │ ├── getUnsetTransferRoots.ts │ │ │ ├── getUnstake.ts │ │ │ ├── getUnwithdrawnTransfers.ts │ │ │ ├── getWithdrawal.ts │ │ │ ├── getWithdrawals.ts │ │ │ ├── makeRequest.ts │ │ │ └── shared.ts │ │ ├── types │ │ │ ├── error.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── utils │ │ │ ├── MerkleTree.ts │ │ │ ├── bigNumberMax.ts │ │ │ ├── bigNumberMin.ts │ │ │ ├── chainSlugToId.ts │ │ │ ├── findMissingIndexes.ts │ │ │ ├── getBlockNumberFromDate.ts │ │ │ ├── getBumpedBN.ts │ │ │ ├── getBumpedGasPrice.ts │ │ │ ├── getCanonicalTokenSymbol.ts │ │ │ ├── getEnvFilePath.ts │ │ │ ├── getExponentialBackoffDelayMs.ts │ │ │ ├── getNameservers.ts │ │ │ ├── getNonRetryableRpcProvider.ts │ │ │ ├── getProviderChainSlug.ts │ │ │ ├── getRpcProvider.ts │ │ │ ├── getRpcProviderFromUrl.ts │ │ │ ├── getRpcRootProviderName.ts │ │ │ ├── getRpcUrlFromProvider.ts │ │ │ ├── getSortedTransferIds.ts │ │ │ ├── getSubgraphUrl.ts │ │ │ ├── getTokenMetadataByAddress.ts │ │ │ ├── getTransferId.ts │ │ │ ├── getTransferIdFromCalldata.ts │ │ │ ├── getTransferRootId.ts │ │ │ ├── getTransferSentToL2TransferId.ts │ │ │ ├── getWithdrawalProofData.ts │ │ │ ├── isFetchBadResponseError.ts │ │ │ ├── isFetchConnectionError.ts │ │ │ ├── isFetchExecutionError.ts │ │ │ ├── isFetchRateLimitError.ts │ │ │ ├── isFetchRpcServerError.ts │ │ │ ├── isFetchTimeoutError.ts │ │ │ ├── isHToken.ts │ │ │ ├── isL1.ts │ │ │ ├── isL1ChainId.ts │ │ │ ├── isNativeToken.ts │ │ │ ├── isTokenSupportedForChain.ts │ │ │ ├── objectDepth.ts │ │ │ ├── padHex.ts │ │ │ ├── promiseQueue.ts │ │ │ ├── promiseTimeout.ts │ │ │ ├── rateLimitRetry.ts │ │ │ └── wait.ts │ │ ├── wallets │ │ │ ├── index.ts │ │ │ └── wallets.ts │ │ └── watchers │ │ │ ├── AvailableLiquidityWatcher.ts │ │ │ ├── BondTransferRootWatcher.ts │ │ │ ├── BondWithdrawalWatcher.ts │ │ │ ├── ChallengeWatcher.ts │ │ │ ├── CommitTransfersWatcher.ts │ │ │ ├── ConfirmRootsWatcher.ts │ │ │ ├── HealthCheckWatcher.ts │ │ │ ├── IncompleteSettlementsWatcher.ts │ │ │ ├── OsWatcher.ts │ │ │ ├── RelayWatcher.ts │ │ │ ├── SettleBondedWithdrawalWatcher.ts │ │ │ ├── SyncWatcher.ts │ │ │ ├── classes │ │ │ ├── BaseWatcher.ts │ │ │ ├── Bridge.ts │ │ │ ├── ContractBase.ts │ │ │ ├── IBaseWatcher.ts │ │ │ ├── L1Bridge.ts │ │ │ ├── L1MessengerWrapper.ts │ │ │ ├── L2Amm.ts │ │ │ ├── L2AmmWrapper.ts │ │ │ ├── L2Bridge.ts │ │ │ ├── Metrics.ts │ │ │ └── Token.ts │ │ │ └── watchers.ts │ ├── test │ │ ├── KmsSigner.test.ts │ │ ├── LambdaSigner.test.ts │ │ ├── bridge.test.ts │ │ ├── config.ts │ │ ├── eventsBatch.test.ts │ │ ├── gasBoostSigner.test.ts │ │ ├── getBlockNumberFromDate.test.ts │ │ ├── getBumpedBN.test.ts │ │ ├── getSubgraphUrl.test.ts │ │ ├── getTransferId.test.ts │ │ ├── getTransferIdFromCalldata.test.ts │ │ ├── getTransferRootId.test.ts │ │ ├── getTransfersIdsWithTransferRootHash.test.ts │ │ ├── healthChecker.test.ts │ │ ├── isNativeToken.test.ts │ │ ├── keystore.test.ts │ │ ├── merkle.test.ts │ │ ├── queue.test.ts │ │ ├── rateLimitRetry.test.ts │ │ ├── syncWatcher.test.ts │ │ ├── theGraph.test.ts │ │ ├── utils.test.ts │ │ └── utils │ │ │ └── expectDefined.ts │ └── tsconfig.json ├── metabase │ ├── .gitignore │ ├── README.md │ └── docker-compose.yml ├── sdk-demo │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── eslint.config.mjs │ ├── index.html │ ├── package.json │ ├── public │ │ ├── favicon.ico │ │ ├── logo192.png │ │ ├── logo512.png │ │ ├── manifest.json │ │ └── robots.txt │ ├── src │ │ ├── App.css │ │ ├── App.tsx │ │ ├── actions.json │ │ ├── index.css │ │ ├── main.tsx │ │ ├── react-app-env.d.ts │ │ ├── reportWebVitals.ts │ │ ├── setupTests.ts │ │ └── vite-env.d.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── sdk │ ├── .gitattributes │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ ├── abi │ │ ├── Accounting.ts │ │ ├── ArbERC20.ts │ │ ├── ArbitrumGlobalInbox.ts │ │ ├── ArbitrumMessengerWrapper.ts │ │ ├── Arbitrum_L1_ERC20_Bridge.ts │ │ ├── Arbitrum_L2_ERC20_Bridge.ts │ │ ├── Bridge.ts │ │ ├── CCTPMessageTransmitter.ts │ │ ├── CCTPTokenMessenger.ts │ │ ├── CCTPTokenMinter.ts │ │ ├── ERC20.ts │ │ ├── ERC20Burnable.ts │ │ ├── ERC20Mintable.ts │ │ ├── FxBaseChildTunnel.ts │ │ ├── FxBaseRootTunnel.ts │ │ ├── GovernorAlpha.ts │ │ ├── Hop.ts │ │ ├── HopBridgeToken.ts │ │ ├── IAllowlist.ts │ │ ├── IArbSys.ts │ │ ├── IArbitraryMessageBridge.ts │ │ ├── IBridge.ts │ │ ├── ICheckpointManager.ts │ │ ├── IERC20.ts │ │ ├── IEthERC20Bridge.ts │ │ ├── IFlashLoanReceiver.ts │ │ ├── IForeignOmniBridge.ts │ │ ├── IFxMessageProcessor.ts │ │ ├── IFxStateSender.ts │ │ ├── IGlobalInbox.ts │ │ ├── IInbox.ts │ │ ├── IMessageProvider.ts │ │ ├── IMessengerWrapper.ts │ │ ├── IOutbox.ts │ │ ├── IPolygonFxChild.ts │ │ ├── IRootChainManager.ts │ │ ├── IStateReceiver.ts │ │ ├── IStateSender.ts │ │ ├── ISwap.ts │ │ ├── ISwapFlashLoan.ts │ │ ├── ISwapGuarded.ts │ │ ├── IWETH.ts │ │ ├── I_L1_PolygonMessenger.ts │ │ ├── I_L2_PolygonMessengerProxy.ts │ │ ├── L1_ArbitrumMessenger.ts │ │ ├── L1_Bridge.ts │ │ ├── L1_ERC20_Bridge.ts │ │ ├── L1_ERC20_Bridge_Legacy.ts │ │ ├── L1_ETH_Bridge.ts │ │ ├── L1_HomeAMBNativeToErc20.ts │ │ ├── L1_HopCCTPImplementation.ts │ │ ├── L1_OptimismMessenger.ts │ │ ├── L1_OptimismTokenBridge.ts │ │ ├── L1_PolygonFxBaseRootTunnel.ts │ │ ├── L1_PolygonMessenger.ts │ │ ├── L1_PolygonPosRootChainManager.ts │ │ ├── L1_xDaiAMB.ts │ │ ├── L1_xDaiForeignOmniBridge.ts │ │ ├── L1_xDaiMessenger.ts │ │ ├── L2_AmmWrapper.ts │ │ ├── L2_ArbitrumBridge.ts │ │ ├── L2_Bridge.ts │ │ ├── L2_BridgeWrapper.ts │ │ ├── L2_HopCCTPImplementation.ts │ │ ├── L2_OptimismBridge.ts │ │ ├── L2_OptimismTokenBridge.ts │ │ ├── L2_PolygonBridge.ts │ │ ├── L2_PolygonChildERC20.ts │ │ ├── L2_PolygonMessengerProxy.ts │ │ ├── L2_xDaiAMB.ts │ │ ├── L2_xDaiBridge.ts │ │ ├── L2_xDaiToken.ts │ │ ├── LPToken.ts │ │ ├── MathUtils.ts │ │ ├── MessengerWrapper.ts │ │ ├── MockERC20.ts │ │ ├── MockEthERC20Bridge.ts │ │ ├── MockForeignOmniBridge.ts │ │ ├── MockFxChild.ts │ │ ├── MockFxRoot.ts │ │ ├── MockMessenger.ts │ │ ├── MockPolygonMessengerWrapper.ts │ │ ├── MockRootChainManager.ts │ │ ├── Mock_Accounting.ts │ │ ├── Mock_Bridge.ts │ │ ├── Mock_L1_CanonicalBridge.ts │ │ ├── Mock_L1_ERC20_Bridge.ts │ │ ├── Mock_L1_ETH_Bridge.ts │ │ ├── Mock_L1_Messenger.ts │ │ ├── Mock_L1_PolygonMessenger.ts │ │ ├── Mock_L1_xDaiMessenger.ts │ │ ├── Mock_L2_ArbitrumBridge.ts │ │ ├── Mock_L2_Messenger.ts │ │ ├── Mock_L2_OptimismBridge.ts │ │ ├── Mock_L2_PolygonBridge.ts │ │ ├── Mock_L2_xDaiBridge.ts │ │ ├── Multicall3.ts │ │ ├── OVM_BaseCrossDomainMessenger.ts │ │ ├── OVM_L1_ERC20_Bridge.ts │ │ ├── OVM_L2_ERC20_Bridge.ts │ │ ├── OptimismMessengerWrapper.ts │ │ ├── Ownable.ts │ │ ├── OwnableUpgradeable.ts │ │ ├── OwnerPausableUpgradeable.ts │ │ ├── PausableUpgradeable.ts │ │ ├── PolygonMessengerWrapper.ts │ │ ├── SaddleLpToken.ts │ │ ├── StakingRewards.ts │ │ ├── StakingRewardsFactory.ts │ │ ├── Swap.ts │ │ ├── SwapUtils.ts │ │ ├── Timelock.ts │ │ ├── UniswapQuoterV2.ts │ │ ├── UniswapV3Pool.ts │ │ ├── WETH9.ts │ │ ├── iAbs_BaseCrossDomainMessenger.ts │ │ ├── iOVM_BaseCrossDomainMessenger.ts │ │ ├── iOVM_L1CrossDomainMessenger.ts │ │ ├── iOVM_L2CrossDomainMessenger.ts │ │ ├── mockOVM_CrossDomainMessenger.ts │ │ └── xDaiMessengerWrapper.ts │ ├── docs │ │ ├── .nojekyll │ │ ├── README.md │ │ ├── classes │ │ │ ├── AMM.md │ │ │ ├── Accounting__factory.md │ │ │ ├── ArbERC20__factory.md │ │ │ ├── ArbitrumGlobalInbox__factory.md │ │ │ ├── ArbitrumMessengerWrapper__factory.md │ │ │ ├── Arbitrum_L1_ERC20_Bridge__factory.md │ │ │ ├── Arbitrum_L2_ERC20_Bridge__factory.md │ │ │ ├── Base.md │ │ │ ├── Bridge__factory.md │ │ │ ├── CCTPMessageTransmitter__factory.md │ │ │ ├── CCTPTokenMessenger__factory.md │ │ │ ├── CCTPTokenMinter__factory.md │ │ │ ├── ERC20Burnable__factory.md │ │ │ ├── ERC20Mintable__factory.md │ │ │ ├── ERC20__factory.md │ │ │ ├── FallbackProvider.md │ │ │ ├── FxBaseChildTunnel__factory.md │ │ │ ├── FxBaseRootTunnel__factory.md │ │ │ ├── GovernorAlpha__factory.md │ │ │ ├── Hop.md │ │ │ ├── HopBridge.md │ │ │ ├── HopBridgeToken__factory.md │ │ │ ├── Hop__factory.md │ │ │ ├── IAbs_BaseCrossDomainMessenger__factory.md │ │ │ ├── IAllowlist__factory.md │ │ │ ├── IArbSys__factory.md │ │ │ ├── IArbitraryMessageBridge__factory.md │ │ │ ├── IBridge__factory.md │ │ │ ├── ICheckpointManager__factory.md │ │ │ ├── IERC20__factory.md │ │ │ ├── IEthERC20Bridge__factory.md │ │ │ ├── IFlashLoanReceiver__factory.md │ │ │ ├── IForeignOmniBridge__factory.md │ │ │ ├── IFxMessageProcessor__factory.md │ │ │ ├── IFxStateSender__factory.md │ │ │ ├── IGlobalInbox__factory.md │ │ │ ├── IInbox__factory.md │ │ │ ├── IMessageProvider__factory.md │ │ │ ├── IMessengerWrapper__factory.md │ │ │ ├── IOVM_BaseCrossDomainMessenger__factory.md │ │ │ ├── IOVM_L1CrossDomainMessenger__factory.md │ │ │ ├── IOVM_L2CrossDomainMessenger__factory.md │ │ │ ├── IOutbox__factory.md │ │ │ ├── IPolygonFxChild__factory.md │ │ │ ├── IRootChainManager__factory.md │ │ │ ├── IStateReceiver__factory.md │ │ │ ├── IStateSender__factory.md │ │ │ ├── ISwapFlashLoan__factory.md │ │ │ ├── ISwapGuarded__factory.md │ │ │ ├── ISwap__factory.md │ │ │ ├── IWETH__factory.md │ │ │ ├── I_L1_PolygonMessenger__factory.md │ │ │ ├── I_L2_PolygonMessengerProxy__factory.md │ │ │ ├── L1_ArbitrumMessenger__factory.md │ │ │ ├── L1_Bridge__factory.md │ │ │ ├── L1_ERC20_Bridge_Legacy__factory.md │ │ │ ├── L1_ERC20_Bridge__factory.md │ │ │ ├── L1_ETH_Bridge__factory.md │ │ │ ├── L1_HomeAMBNativeToErc20__factory.md │ │ │ ├── L1_HopCCTPImplementation__factory.md │ │ │ ├── L1_OptimismMessenger__factory.md │ │ │ ├── L1_OptimismTokenBridge__factory.md │ │ │ ├── L1_PolygonFxBaseRootTunnel__factory.md │ │ │ ├── L1_PolygonMessenger__factory.md │ │ │ ├── L1_PolygonPosRootChainManager__factory.md │ │ │ ├── L1_xDaiAMB__factory.md │ │ │ ├── L1_xDaiForeignOmniBridge__factory.md │ │ │ ├── L1_xDaiMessenger__factory.md │ │ │ ├── L2_AmmWrapper__factory.md │ │ │ ├── L2_ArbitrumBridge__factory.md │ │ │ ├── L2_BridgeWrapper__factory.md │ │ │ ├── L2_Bridge__factory.md │ │ │ ├── L2_HopCCTPImplementation__factory.md │ │ │ ├── L2_OptimismBridge__factory.md │ │ │ ├── L2_OptimismTokenBridge__factory.md │ │ │ ├── L2_PolygonBridge__factory.md │ │ │ ├── L2_PolygonChildERC20__factory.md │ │ │ ├── L2_PolygonMessengerProxy__factory.md │ │ │ ├── L2_xDaiAMB__factory.md │ │ │ ├── L2_xDaiBridge__factory.md │ │ │ ├── L2_xDaiToken__factory.md │ │ │ ├── LPToken__factory.md │ │ │ ├── MathUtils__factory.md │ │ │ ├── MessengerWrapper__factory.md │ │ │ ├── MockERC20__factory.md │ │ │ ├── MockEthERC20Bridge__factory.md │ │ │ ├── MockForeignOmniBridge__factory.md │ │ │ ├── MockFxChild__factory.md │ │ │ ├── MockFxRoot__factory.md │ │ │ ├── MockMessenger__factory.md │ │ │ ├── MockOVM_CrossDomainMessenger__factory.md │ │ │ ├── MockPolygonMessengerWrapper__factory.md │ │ │ ├── MockRootChainManager__factory.md │ │ │ ├── Mock_Accounting__factory.md │ │ │ ├── Mock_Bridge__factory.md │ │ │ ├── Mock_L1_CanonicalBridge__factory.md │ │ │ ├── Mock_L1_ERC20_Bridge__factory.md │ │ │ ├── Mock_L1_ETH_Bridge__factory.md │ │ │ ├── Mock_L1_Messenger__factory.md │ │ │ ├── Mock_L1_PolygonMessenger__factory.md │ │ │ ├── Mock_L1_xDaiMessenger__factory.md │ │ │ ├── Mock_L2_ArbitrumBridge__factory.md │ │ │ ├── Mock_L2_Messenger__factory.md │ │ │ ├── Mock_L2_OptimismBridge__factory.md │ │ │ ├── Mock_L2_PolygonBridge__factory.md │ │ │ ├── Mock_L2_xDaiBridge__factory.md │ │ │ ├── Multicall.md │ │ │ ├── Multicall3__factory.md │ │ │ ├── OVM_BaseCrossDomainMessenger__factory.md │ │ │ ├── OVM_L1_ERC20_Bridge__factory.md │ │ │ ├── OVM_L2_ERC20_Bridge__factory.md │ │ │ ├── OptimismMessengerWrapper__factory.md │ │ │ ├── OwnableUpgradeable__factory.md │ │ │ ├── Ownable__factory.md │ │ │ ├── OwnerPausableUpgradeable__factory.md │ │ │ ├── PausableUpgradeable__factory.md │ │ │ ├── PolygonMessengerWrapper__factory.md │ │ │ ├── PriceFeed.md │ │ │ ├── PriceFeedFromS3.md │ │ │ ├── RelayerFee.md │ │ │ ├── RetryProvider.md │ │ │ ├── SaddleLpToken__factory.md │ │ │ ├── StakingRewardsFactory__factory.md │ │ │ ├── StakingRewards__factory.md │ │ │ ├── SwapUtils__factory.md │ │ │ ├── Swap__factory.md │ │ │ ├── Timelock__factory.md │ │ │ ├── Token.md │ │ │ ├── TokenModel.md │ │ │ ├── UniswapQuoterV2__factory.md │ │ │ ├── UniswapV3Pool__factory.md │ │ │ ├── WETH9__factory.md │ │ │ ├── WithdrawalProof.md │ │ │ └── XDaiMessengerWrapper__factory.md │ │ ├── enums │ │ │ ├── CanonicalToken.md │ │ │ ├── ChainId.md │ │ │ ├── ChainName.md │ │ │ ├── ChainSlug.md │ │ │ ├── HToken.md │ │ │ ├── NetworkSlug.md │ │ │ ├── RpcProviderSlug.md │ │ │ ├── Slug.md │ │ │ ├── TokenSymbol.md │ │ │ └── WrappedToken.md │ │ ├── interfaces │ │ │ ├── Accounting.md │ │ │ ├── ArbERC20.md │ │ │ ├── ArbitrumGlobalInbox.md │ │ │ ├── ArbitrumMessengerWrapper.md │ │ │ ├── Arbitrum_L1_ERC20_Bridge.md │ │ │ ├── Arbitrum_L2_ERC20_Bridge.md │ │ │ ├── Bridge-1.md │ │ │ ├── CCTPMessageTransmitter.md │ │ │ ├── CCTPTokenMessenger.md │ │ │ ├── CCTPTokenMinter.md │ │ │ ├── ERC20.md │ │ │ ├── ERC20Burnable.md │ │ │ ├── ERC20Mintable.md │ │ │ ├── FxBaseChildTunnel.md │ │ │ ├── FxBaseRootTunnel.md │ │ │ ├── GovernorAlpha-1.md │ │ │ ├── HopBridgeToken.md │ │ │ ├── IAbs_BaseCrossDomainMessenger.md │ │ │ ├── IAllowlist.md │ │ │ ├── IArbSys.md │ │ │ ├── IArbitraryMessageBridge.md │ │ │ ├── IBridge.md │ │ │ ├── ICheckpointManager.md │ │ │ ├── IERC20.md │ │ │ ├── IEthERC20Bridge.md │ │ │ ├── IFlashLoanReceiver.md │ │ │ ├── IForeignOmniBridge.md │ │ │ ├── IFxMessageProcessor.md │ │ │ ├── IFxStateSender.md │ │ │ ├── IGlobalInbox.md │ │ │ ├── IInbox.md │ │ │ ├── IMessageProvider.md │ │ │ ├── IMessengerWrapper.md │ │ │ ├── IOVM_BaseCrossDomainMessenger.md │ │ │ ├── IOVM_L1CrossDomainMessenger.md │ │ │ ├── IOVM_L2CrossDomainMessenger.md │ │ │ ├── IOutbox.md │ │ │ ├── IPolygonFxChild.md │ │ │ ├── IRootChainManager.md │ │ │ ├── IStateReceiver.md │ │ │ ├── IStateSender.md │ │ │ ├── ISwap.md │ │ │ ├── ISwapFlashLoan.md │ │ │ ├── ISwapGuarded.md │ │ │ ├── IWETH.md │ │ │ ├── I_L1_PolygonMessenger.md │ │ │ ├── I_L2_PolygonMessengerProxy.md │ │ │ ├── L1_ArbitrumMessenger.md │ │ │ ├── L1_Bridge.md │ │ │ ├── L1_ERC20_Bridge.md │ │ │ ├── L1_ERC20_Bridge_Legacy.md │ │ │ ├── L1_ETH_Bridge.md │ │ │ ├── L1_HomeAMBNativeToErc20.md │ │ │ ├── L1_HopCCTPImplementation.md │ │ │ ├── L1_OptimismMessenger.md │ │ │ ├── L1_OptimismTokenBridge.md │ │ │ ├── L1_PolygonFxBaseRootTunnel.md │ │ │ ├── L1_PolygonMessenger.md │ │ │ ├── L1_PolygonPosRootChainManager.md │ │ │ ├── L1_xDaiAMB.md │ │ │ ├── L1_xDaiForeignOmniBridge.md │ │ │ ├── L1_xDaiMessenger.md │ │ │ ├── L2_AmmWrapper.md │ │ │ ├── L2_ArbitrumBridge.md │ │ │ ├── L2_Bridge.md │ │ │ ├── L2_BridgeWrapper.md │ │ │ ├── L2_HopCCTPImplementation.md │ │ │ ├── L2_OptimismBridge.md │ │ │ ├── L2_OptimismTokenBridge.md │ │ │ ├── L2_PolygonBridge.md │ │ │ ├── L2_PolygonChildERC20.md │ │ │ ├── L2_PolygonMessengerProxy.md │ │ │ ├── L2_xDaiAMB.md │ │ │ ├── L2_xDaiBridge.md │ │ │ ├── L2_xDaiToken.md │ │ │ ├── LPToken.md │ │ │ ├── MathUtils.md │ │ │ ├── MessengerWrapper.md │ │ │ ├── MockERC20.md │ │ │ ├── MockEthERC20Bridge.md │ │ │ ├── MockForeignOmniBridge.md │ │ │ ├── MockFxChild.md │ │ │ ├── MockFxRoot.md │ │ │ ├── MockMessenger.md │ │ │ ├── MockOVM_CrossDomainMessenger-1.md │ │ │ ├── MockPolygonMessengerWrapper.md │ │ │ ├── MockRootChainManager.md │ │ │ ├── Mock_Accounting.md │ │ │ ├── Mock_Bridge.md │ │ │ ├── Mock_L1_CanonicalBridge.md │ │ │ ├── Mock_L1_ERC20_Bridge.md │ │ │ ├── Mock_L1_ETH_Bridge.md │ │ │ ├── Mock_L1_Messenger.md │ │ │ ├── Mock_L1_PolygonMessenger.md │ │ │ ├── Mock_L1_xDaiMessenger.md │ │ │ ├── Mock_L2_ArbitrumBridge.md │ │ │ ├── Mock_L2_Messenger.md │ │ │ ├── Mock_L2_OptimismBridge.md │ │ │ ├── Mock_L2_PolygonBridge.md │ │ │ ├── Mock_L2_xDaiBridge.md │ │ │ ├── Multicall3-1.md │ │ │ ├── OVM_BaseCrossDomainMessenger.md │ │ │ ├── OVM_L1_ERC20_Bridge.md │ │ │ ├── OVM_L2_ERC20_Bridge.md │ │ │ ├── OptimismMessengerWrapper.md │ │ │ ├── Ownable.md │ │ │ ├── OwnableUpgradeable.md │ │ │ ├── OwnerPausableUpgradeable.md │ │ │ ├── PausableUpgradeable.md │ │ │ ├── PolygonMessengerWrapper.md │ │ │ ├── SaddleLpToken.md │ │ │ ├── StakingRewards.md │ │ │ ├── StakingRewardsFactory.md │ │ │ ├── Swap.md │ │ │ ├── SwapUtils.md │ │ │ ├── Timelock.md │ │ │ ├── UniswapQuoterV2.md │ │ │ ├── UniswapV3Pool.md │ │ │ ├── WETH9.md │ │ │ └── XDaiMessengerWrapper.md │ │ ├── modules.md │ │ └── modules │ │ │ ├── Bridge.md │ │ │ ├── GovernorAlpha.md │ │ │ ├── MockOVM_CrossDomainMessenger.md │ │ │ └── Multicall3.md │ ├── eslint.config.mjs │ ├── example │ │ └── example.js │ ├── jest.config.mjs │ ├── package.json │ ├── scripts │ │ ├── .gitignore │ │ ├── generate_chart_from_file.py │ │ └── update_gitbook.sh │ ├── src │ │ ├── AMM.ts │ │ ├── Base.ts │ │ ├── Hop.ts │ │ ├── HopBridge.ts │ │ ├── Token.ts │ │ ├── addresses │ │ │ ├── goerli.ts │ │ │ ├── index.ts │ │ │ ├── mainnet.ts │ │ │ ├── sepolia.ts │ │ │ └── types.ts │ │ ├── chains │ │ │ ├── assets │ │ │ │ ├── arbitrum.ts │ │ │ │ ├── base.ts │ │ │ │ ├── ethereum.ts │ │ │ │ ├── gnosis.ts │ │ │ │ ├── index.ts │ │ │ │ ├── linea.ts │ │ │ │ ├── nova.ts │ │ │ │ ├── optimism.ts │ │ │ │ ├── polygon.ts │ │ │ │ ├── polygonzk.ts │ │ │ │ ├── scrollzk.ts │ │ │ │ └── zksync.ts │ │ │ ├── index.ts │ │ │ ├── networks │ │ │ │ ├── goerli.ts │ │ │ │ ├── index.ts │ │ │ │ ├── mainnet.ts │ │ │ │ ├── sepolia.ts │ │ │ │ └── shared.ts │ │ │ ├── types.ts │ │ │ └── utils │ │ │ │ ├── getChainNativeTokenSymbol.ts │ │ │ │ ├── getChainSlug.ts │ │ │ │ ├── getMinGasLimit.ts │ │ │ │ ├── getMinGasPrice.ts │ │ │ │ ├── getSlugFromChainId.ts │ │ │ │ ├── index.ts │ │ │ │ ├── internal.ts │ │ │ │ ├── isValidChainSlug.ts │ │ │ │ └── isValidNetworkSlug.ts │ │ ├── config │ │ │ ├── goerli.ts │ │ │ ├── index.ts │ │ │ ├── mainnet.ts │ │ │ ├── sepolia.ts │ │ │ └── types.ts │ │ ├── constants │ │ │ ├── constants.ts │ │ │ ├── eventTopics.ts │ │ │ └── index.ts │ │ ├── contracts │ │ │ ├── Accounting.ts │ │ │ ├── ArbERC20.ts │ │ │ ├── ArbitrumGlobalInbox.ts │ │ │ ├── ArbitrumMessengerWrapper.ts │ │ │ ├── Arbitrum_L1_ERC20_Bridge.ts │ │ │ ├── Arbitrum_L2_ERC20_Bridge.ts │ │ │ ├── Bridge.ts │ │ │ ├── CCTPMessageTransmitter.ts │ │ │ ├── CCTPTokenMessenger.ts │ │ │ ├── CCTPTokenMinter.ts │ │ │ ├── ERC20.ts │ │ │ ├── ERC20Burnable.ts │ │ │ ├── ERC20Mintable.ts │ │ │ ├── FxBaseChildTunnel.ts │ │ │ ├── FxBaseRootTunnel.ts │ │ │ ├── GovernorAlpha.ts │ │ │ ├── Hop.ts │ │ │ ├── HopBridgeToken.ts │ │ │ ├── IAbs_BaseCrossDomainMessenger.ts │ │ │ ├── IAllowlist.ts │ │ │ ├── IArbSys.ts │ │ │ ├── IArbitraryMessageBridge.ts │ │ │ ├── IBridge.ts │ │ │ ├── ICheckpointManager.ts │ │ │ ├── IERC20.ts │ │ │ ├── IEthERC20Bridge.ts │ │ │ ├── IFlashLoanReceiver.ts │ │ │ ├── IForeignOmniBridge.ts │ │ │ ├── IFxMessageProcessor.ts │ │ │ ├── IFxStateSender.ts │ │ │ ├── IGlobalInbox.ts │ │ │ ├── IInbox.ts │ │ │ ├── IMessageProvider.ts │ │ │ ├── IMessengerWrapper.ts │ │ │ ├── IOVM_BaseCrossDomainMessenger.ts │ │ │ ├── IOVM_L1CrossDomainMessenger.ts │ │ │ ├── IOVM_L2CrossDomainMessenger.ts │ │ │ ├── IOutbox.ts │ │ │ ├── IPolygonFxChild.ts │ │ │ ├── IRootChainManager.ts │ │ │ ├── IStateReceiver.ts │ │ │ ├── IStateSender.ts │ │ │ ├── ISwap.ts │ │ │ ├── ISwapFlashLoan.ts │ │ │ ├── ISwapGuarded.ts │ │ │ ├── IWETH.ts │ │ │ ├── I_L1_PolygonMessenger.ts │ │ │ ├── I_L2_PolygonMessengerProxy.ts │ │ │ ├── L1_ArbitrumMessenger.ts │ │ │ ├── L1_Bridge.ts │ │ │ ├── L1_ERC20_Bridge.ts │ │ │ ├── L1_ERC20_Bridge_Legacy.ts │ │ │ ├── L1_ETH_Bridge.ts │ │ │ ├── L1_HomeAMBNativeToErc20.ts │ │ │ ├── L1_HopCCTPImplementation.ts │ │ │ ├── L1_OptimismMessenger.ts │ │ │ ├── L1_OptimismTokenBridge.ts │ │ │ ├── L1_PolygonFxBaseRootTunnel.ts │ │ │ ├── L1_PolygonMessenger.ts │ │ │ ├── L1_PolygonPosRootChainManager.ts │ │ │ ├── L1_xDaiAMB.ts │ │ │ ├── L1_xDaiForeignOmniBridge.ts │ │ │ ├── L1_xDaiMessenger.ts │ │ │ ├── L2_AmmWrapper.ts │ │ │ ├── L2_ArbitrumBridge.ts │ │ │ ├── L2_Bridge.ts │ │ │ ├── L2_BridgeWrapper.ts │ │ │ ├── L2_HopCCTPImplementation.ts │ │ │ ├── L2_OptimismBridge.ts │ │ │ ├── L2_OptimismTokenBridge.ts │ │ │ ├── L2_PolygonBridge.ts │ │ │ ├── L2_PolygonChildERC20.ts │ │ │ ├── L2_PolygonMessengerProxy.ts │ │ │ ├── L2_xDaiAMB.ts │ │ │ ├── L2_xDaiBridge.ts │ │ │ ├── L2_xDaiToken.ts │ │ │ ├── LPToken.ts │ │ │ ├── MathUtils.ts │ │ │ ├── MessengerWrapper.ts │ │ │ ├── MockERC20.ts │ │ │ ├── MockEthERC20Bridge.ts │ │ │ ├── MockForeignOmniBridge.ts │ │ │ ├── MockFxChild.ts │ │ │ ├── MockFxRoot.ts │ │ │ ├── MockMessenger.ts │ │ │ ├── MockOVM_CrossDomainMessenger.ts │ │ │ ├── MockPolygonMessengerWrapper.ts │ │ │ ├── MockRootChainManager.ts │ │ │ ├── Mock_Accounting.ts │ │ │ ├── Mock_Bridge.ts │ │ │ ├── Mock_L1_CanonicalBridge.ts │ │ │ ├── Mock_L1_ERC20_Bridge.ts │ │ │ ├── Mock_L1_ETH_Bridge.ts │ │ │ ├── Mock_L1_Messenger.ts │ │ │ ├── Mock_L1_PolygonMessenger.ts │ │ │ ├── Mock_L1_xDaiMessenger.ts │ │ │ ├── Mock_L2_ArbitrumBridge.ts │ │ │ ├── Mock_L2_Messenger.ts │ │ │ ├── Mock_L2_OptimismBridge.ts │ │ │ ├── Mock_L2_PolygonBridge.ts │ │ │ ├── Mock_L2_xDaiBridge.ts │ │ │ ├── Multicall3.ts │ │ │ ├── OVM_BaseCrossDomainMessenger.ts │ │ │ ├── OVM_L1_ERC20_Bridge.ts │ │ │ ├── OVM_L2_ERC20_Bridge.ts │ │ │ ├── OptimismMessengerWrapper.ts │ │ │ ├── Ownable.ts │ │ │ ├── OwnableUpgradeable.ts │ │ │ ├── OwnerPausableUpgradeable.ts │ │ │ ├── PausableUpgradeable.ts │ │ │ ├── PolygonMessengerWrapper.ts │ │ │ ├── SaddleLpToken.ts │ │ │ ├── StakingRewards.ts │ │ │ ├── StakingRewardsFactory.ts │ │ │ ├── Swap.ts │ │ │ ├── SwapUtils.ts │ │ │ ├── Timelock.ts │ │ │ ├── UniswapQuoterV2.ts │ │ │ ├── UniswapV3Pool.ts │ │ │ ├── WETH9.ts │ │ │ ├── XDaiMessengerWrapper.ts │ │ │ ├── common.ts │ │ │ ├── factories │ │ │ │ ├── Accounting__factory.ts │ │ │ │ ├── ArbERC20__factory.ts │ │ │ │ ├── ArbitrumGlobalInbox__factory.ts │ │ │ │ ├── ArbitrumMessengerWrapper__factory.ts │ │ │ │ ├── Arbitrum_L1_ERC20_Bridge__factory.ts │ │ │ │ ├── Arbitrum_L2_ERC20_Bridge__factory.ts │ │ │ │ ├── Bridge__factory.ts │ │ │ │ ├── CCTPMessageTransmitter__factory.ts │ │ │ │ ├── CCTPTokenMessenger__factory.ts │ │ │ │ ├── CCTPTokenMinter__factory.ts │ │ │ │ ├── ERC20Burnable__factory.ts │ │ │ │ ├── ERC20Mintable__factory.ts │ │ │ │ ├── ERC20__factory.ts │ │ │ │ ├── FxBaseChildTunnel__factory.ts │ │ │ │ ├── FxBaseRootTunnel__factory.ts │ │ │ │ ├── GovernorAlpha__factory.ts │ │ │ │ ├── HopBridgeToken__factory.ts │ │ │ │ ├── Hop__factory.ts │ │ │ │ ├── IAbs_BaseCrossDomainMessenger__factory.ts │ │ │ │ ├── IAllowlist__factory.ts │ │ │ │ ├── IArbSys__factory.ts │ │ │ │ ├── IArbitraryMessageBridge__factory.ts │ │ │ │ ├── IBridge__factory.ts │ │ │ │ ├── ICheckpointManager__factory.ts │ │ │ │ ├── IERC20__factory.ts │ │ │ │ ├── IEthERC20Bridge__factory.ts │ │ │ │ ├── IFlashLoanReceiver__factory.ts │ │ │ │ ├── IForeignOmniBridge__factory.ts │ │ │ │ ├── IFxMessageProcessor__factory.ts │ │ │ │ ├── IFxStateSender__factory.ts │ │ │ │ ├── IGlobalInbox__factory.ts │ │ │ │ ├── IInbox__factory.ts │ │ │ │ ├── IMessageProvider__factory.ts │ │ │ │ ├── IMessengerWrapper__factory.ts │ │ │ │ ├── IOVM_BaseCrossDomainMessenger__factory.ts │ │ │ │ ├── IOVM_L1CrossDomainMessenger__factory.ts │ │ │ │ ├── IOVM_L2CrossDomainMessenger__factory.ts │ │ │ │ ├── IOutbox__factory.ts │ │ │ │ ├── IPolygonFxChild__factory.ts │ │ │ │ ├── IRootChainManager__factory.ts │ │ │ │ ├── IStateReceiver__factory.ts │ │ │ │ ├── IStateSender__factory.ts │ │ │ │ ├── ISwapFlashLoan__factory.ts │ │ │ │ ├── ISwapGuarded__factory.ts │ │ │ │ ├── ISwap__factory.ts │ │ │ │ ├── IWETH__factory.ts │ │ │ │ ├── I_L1_PolygonMessenger__factory.ts │ │ │ │ ├── I_L2_PolygonMessengerProxy__factory.ts │ │ │ │ ├── L1_ArbitrumMessenger__factory.ts │ │ │ │ ├── L1_Bridge__factory.ts │ │ │ │ ├── L1_ERC20_Bridge_Legacy__factory.ts │ │ │ │ ├── L1_ERC20_Bridge__factory.ts │ │ │ │ ├── L1_ETH_Bridge__factory.ts │ │ │ │ ├── L1_HomeAMBNativeToErc20__factory.ts │ │ │ │ ├── L1_HopCCTPImplementation__factory.ts │ │ │ │ ├── L1_OptimismMessenger__factory.ts │ │ │ │ ├── L1_OptimismTokenBridge__factory.ts │ │ │ │ ├── L1_PolygonFxBaseRootTunnel__factory.ts │ │ │ │ ├── L1_PolygonMessenger__factory.ts │ │ │ │ ├── L1_PolygonPosRootChainManager__factory.ts │ │ │ │ ├── L1_xDaiAMB__factory.ts │ │ │ │ ├── L1_xDaiForeignOmniBridge__factory.ts │ │ │ │ ├── L1_xDaiMessenger__factory.ts │ │ │ │ ├── L2_AmmWrapper__factory.ts │ │ │ │ ├── L2_ArbitrumBridge__factory.ts │ │ │ │ ├── L2_BridgeWrapper__factory.ts │ │ │ │ ├── L2_Bridge__factory.ts │ │ │ │ ├── L2_HopCCTPImplementation__factory.ts │ │ │ │ ├── L2_OptimismBridge__factory.ts │ │ │ │ ├── L2_OptimismTokenBridge__factory.ts │ │ │ │ ├── L2_PolygonBridge__factory.ts │ │ │ │ ├── L2_PolygonChildERC20__factory.ts │ │ │ │ ├── L2_PolygonMessengerProxy__factory.ts │ │ │ │ ├── L2_xDaiAMB__factory.ts │ │ │ │ ├── L2_xDaiBridge__factory.ts │ │ │ │ ├── L2_xDaiToken__factory.ts │ │ │ │ ├── LPToken__factory.ts │ │ │ │ ├── MathUtils__factory.ts │ │ │ │ ├── MessengerWrapper__factory.ts │ │ │ │ ├── MockERC20__factory.ts │ │ │ │ ├── MockEthERC20Bridge__factory.ts │ │ │ │ ├── MockForeignOmniBridge__factory.ts │ │ │ │ ├── MockFxChild__factory.ts │ │ │ │ ├── MockFxRoot__factory.ts │ │ │ │ ├── MockMessenger__factory.ts │ │ │ │ ├── MockOVM_CrossDomainMessenger__factory.ts │ │ │ │ ├── MockPolygonMessengerWrapper__factory.ts │ │ │ │ ├── MockRootChainManager__factory.ts │ │ │ │ ├── Mock_Accounting__factory.ts │ │ │ │ ├── Mock_Bridge__factory.ts │ │ │ │ ├── Mock_L1_CanonicalBridge__factory.ts │ │ │ │ ├── Mock_L1_ERC20_Bridge__factory.ts │ │ │ │ ├── Mock_L1_ETH_Bridge__factory.ts │ │ │ │ ├── Mock_L1_Messenger__factory.ts │ │ │ │ ├── Mock_L1_PolygonMessenger__factory.ts │ │ │ │ ├── Mock_L1_xDaiMessenger__factory.ts │ │ │ │ ├── Mock_L2_ArbitrumBridge__factory.ts │ │ │ │ ├── Mock_L2_Messenger__factory.ts │ │ │ │ ├── Mock_L2_OptimismBridge__factory.ts │ │ │ │ ├── Mock_L2_PolygonBridge__factory.ts │ │ │ │ ├── Mock_L2_xDaiBridge__factory.ts │ │ │ │ ├── Multicall3__factory.ts │ │ │ │ ├── OVM_BaseCrossDomainMessenger__factory.ts │ │ │ │ ├── OVM_L1_ERC20_Bridge__factory.ts │ │ │ │ ├── OVM_L2_ERC20_Bridge__factory.ts │ │ │ │ ├── OptimismMessengerWrapper__factory.ts │ │ │ │ ├── OwnableUpgradeable__factory.ts │ │ │ │ ├── Ownable__factory.ts │ │ │ │ ├── OwnerPausableUpgradeable__factory.ts │ │ │ │ ├── PausableUpgradeable__factory.ts │ │ │ │ ├── PolygonMessengerWrapper__factory.ts │ │ │ │ ├── SaddleLpToken__factory.ts │ │ │ │ ├── StakingRewardsFactory__factory.ts │ │ │ │ ├── StakingRewards__factory.ts │ │ │ │ ├── SwapUtils__factory.ts │ │ │ │ ├── Swap__factory.ts │ │ │ │ ├── Timelock__factory.ts │ │ │ │ ├── UniswapQuoterV2__factory.ts │ │ │ │ ├── UniswapV3Pool__factory.ts │ │ │ │ ├── WETH9__factory.ts │ │ │ │ ├── XDaiMessengerWrapper__factory.ts │ │ │ │ └── index.ts │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── models │ │ │ ├── Token.ts │ │ │ └── index.ts │ │ ├── multicall │ │ │ ├── Multicall.ts │ │ │ └── index.ts │ │ ├── networks │ │ │ └── index.ts │ │ ├── priceFeed │ │ │ ├── PriceFeed.ts │ │ │ ├── PriceFeedFromS3.ts │ │ │ ├── index.ts │ │ │ └── priceFeeds │ │ │ │ ├── CoinCodex.ts │ │ │ │ ├── CoinGecko.ts │ │ │ │ ├── Coinbase.ts │ │ │ │ ├── Coinpaprika.ts │ │ │ │ └── S3.ts │ │ ├── provider │ │ │ ├── Provider.ts │ │ │ ├── index.ts │ │ │ ├── metadata.ts │ │ │ └── types.ts │ │ ├── relayerFee │ │ │ ├── AbstractRelayerFee.ts │ │ │ ├── ArbitrumRelayerFee.ts │ │ │ ├── IRelayerFee.ts │ │ │ ├── LineaRelayerFee.ts │ │ │ ├── PolygonZkRelayerFee.ts │ │ │ ├── RelayerFee.ts │ │ │ └── index.ts │ │ ├── tokens │ │ │ ├── assets │ │ │ │ ├── ARB.ts │ │ │ │ ├── DAI.ts │ │ │ │ ├── ETH.ts │ │ │ │ ├── FRAX.ts │ │ │ │ ├── GNO.ts │ │ │ │ ├── HOP.ts │ │ │ │ ├── MAGIC.ts │ │ │ │ ├── MATIC.ts │ │ │ │ ├── OP.ts │ │ │ │ ├── RPL.ts │ │ │ │ ├── SNX.ts │ │ │ │ ├── UNI.ts │ │ │ │ ├── USDC.ts │ │ │ │ ├── USDT.ts │ │ │ │ ├── WBTC.ts │ │ │ │ ├── XDAI.ts │ │ │ │ ├── index.ts │ │ │ │ ├── rETH.ts │ │ │ │ ├── sBTC.ts │ │ │ │ ├── sETH.ts │ │ │ │ └── sUSD.ts │ │ │ ├── index.ts │ │ │ ├── tokens.ts │ │ │ ├── types.ts │ │ │ └── utils │ │ │ │ ├── getTokenDecimals.ts │ │ │ │ ├── index.ts │ │ │ │ └── isValidTokenSymbol.ts │ │ ├── types.ts │ │ ├── utils │ │ │ ├── WithdrawalProof.ts │ │ │ ├── fetchJsonOrThrow.ts │ │ │ ├── getBlockNumberFromDate.ts │ │ │ ├── getCctpDomain.ts │ │ │ ├── getChainSlugFromName.ts │ │ │ ├── getLpFeeBps.ts │ │ │ ├── getProviderFromUrl.ts │ │ │ ├── getProviderWithFallbacks.ts │ │ │ ├── getSubgraphChains.ts │ │ │ ├── getSubgraphUrl.ts │ │ │ ├── getUrlFromProvider.ts │ │ │ ├── index.ts │ │ │ ├── promiseQueue.ts │ │ │ ├── promiseTimeout.ts │ │ │ ├── rateLimitRetry.ts │ │ │ ├── serializeQueryParams.ts │ │ │ ├── shiftBNDecimals.ts │ │ │ ├── uniswap.ts │ │ │ └── wait.ts │ │ └── watchers │ │ │ ├── BaseWatcher.ts │ │ │ ├── L1ToL2Watcher.ts │ │ │ ├── L2ToL1Watcher.ts │ │ │ ├── L2ToL2Watcher.ts │ │ │ ├── Watcher.ts │ │ │ └── makeRequest.ts │ ├── test │ │ ├── addresses.test.ts │ │ ├── provider │ │ │ └── provider.test.ts │ │ ├── sdk.test.ts │ │ └── utils │ │ │ ├── WithdrawalProof.test.ts │ │ │ └── uniswap.test.ts │ ├── tsconfig.cjs.json │ ├── tsconfig.esm.json │ └── tsconfig.json ├── stats-worker │ ├── .dockerignore │ ├── .gitignore │ ├── Dockerfile │ ├── LICENSE │ ├── Makefile │ ├── README.md │ ├── eslint.config.mjs │ ├── jest.config.mjs │ ├── metabase_queries │ │ ├── dai_1_day_apr.sql │ │ ├── dai_30_day_apr.sql │ │ ├── dai_7_day_apr.sql │ │ ├── dai_chart.sql │ │ ├── dai_table.sql │ │ ├── dai_total_apr.sql │ │ ├── eth_1_day_apr.sql │ │ ├── eth_30_day_apr.sql │ │ ├── eth_7_day_apr.sql │ │ ├── eth_chart.sql │ │ ├── eth_table.sql │ │ ├── eth_total.sql │ │ ├── eth_total_apr.sql │ │ ├── usdc_1_day_apr.sql │ │ ├── usdc_30_day_apr.sql │ │ ├── usdc_7_day_apr.sql │ │ ├── usdc_chart.sql │ │ ├── usdc_table.sql │ │ ├── usdc_total.sql │ │ ├── usdc_total_apr.sql │ │ ├── usdt_1_day_apr.sql │ │ ├── usdt_30_day_apr.sql │ │ ├── usdt_7_day_apr.sql │ │ ├── usdt_chart.sql │ │ ├── usdt_table.sql │ │ ├── usdt_total.sql │ │ └── usdt_total_apr.sql │ ├── package.json │ ├── scripts │ │ ├── download_metabase_queries.js │ │ └── downloaded_dashboard_queries │ │ │ ├── Bonder Stats │ │ │ ├── DAI │ │ │ ├── DAI Bonder APR - 0x305933e09871D4043b5036e09af794FACB3f6170 │ │ │ ├── DAI Bonder APR 30 Day - 0x305933e09871D4043b5036e09af794FACB3f6170 │ │ │ ├── DAI Bonder APR 7 Day - 0x305933e09871D4043b5036e09af794FACB3f6170 │ │ │ ├── DAI Bonder Balances Table - 0x305933e09871D4043b5036e09af794FACB3f6170 │ │ │ ├── DAI Bonder Fees - 0x305933e09871D4043b5036e09af794FACB3f6170 │ │ │ ├── DAI Bonder Profit - 0x305933e09871D4043b5036e09af794FACB3f6170 │ │ │ ├── DAI Bonder Tx Fees Spent - 0x305933e09871D4043b5036e09af794FACB3f6170 │ │ │ ├── DAI Bonder Tx Fees Spent Table - 0x305933e09871D4043b5036e09af794FACB3f6170 │ │ │ ├── DAI Bonder Tx Fees Spent USD - 0x305933e09871D4043b5036e09af794FACB3f6170 │ │ │ ├── ETH │ │ │ ├── ETH Bonder APR - 0x710bDa329b2a6224E4B44833DE30F38E7f81d564 │ │ │ ├── ETH Bonder APR 30 Day - 0x710bDa329b2a6224E4B44833DE30F38E7f81d564 │ │ │ ├── ETH Bonder APR 7 Day - 0x710bDa329b2a6224E4B44833DE30F38E7f81d564 │ │ │ ├── ETH Bonder Balances Table - 0x710bDa329b2a6224E4B44833DE30F38E7f81d564 │ │ │ ├── ETH Bonder Fees - 0x710bDa329b2a6224E4B44833DE30F38E7f81d564 │ │ │ ├── ETH Bonder Profit - 0x710bDa329b2a6224E4B44833DE30F38E7f81d564 │ │ │ ├── ETH Bonder Tx Fees Spent - 0x710bDa329b2a6224E4B44833DE30F38E7f81d564 │ │ │ ├── ETH Bonder Tx Fees Spent Table - 0x710bDa329b2a6224E4B44833DE30F38E7f81d564 │ │ │ ├── ETH Bonder Tx Fees Spent USD - 0x710bDa329b2a6224E4B44833DE30F38E7f81d564 │ │ │ ├── MATIC │ │ │ ├── MATIC Bonder APR - 0xd8781ca9163e9f132a4d8392332e64115688013a │ │ │ ├── MATIC Bonder APR 30 Day - 0xd8781ca9163e9f132a4d8392332e64115688013a │ │ │ ├── MATIC Bonder APR 7 Day - 0xd8781ca9163e9f132a4d8392332e64115688013a │ │ │ ├── MATIC Bonder Balances Table - 0xd8781ca9163e9f132a4d8392332e64115688013a │ │ │ ├── MATIC Bonder Fees - 0xd8781ca9163e9f132a4d8392332e64115688013a │ │ │ ├── MATIC Bonder Profit - 0xd8781ca9163e9f132a4d8392332e64115688013a │ │ │ ├── MATIC Bonder Tx Fees Spent - 0xd8781ca9163e9f132a4d8392332e64115688013a │ │ │ ├── MATIC Bonder Tx Fees Spent Table - 0xd8781ca9163e9f132a4d8392332e64115688013a │ │ │ ├── MATIC Bonder Tx Spent USD - 0xd8781ca9163e9f132a4d8392332e64115688013a │ │ │ ├── USDC │ │ │ ├── USDC Bonder APR - 0xa6a688F107851131F0E1dce493EbBebFAf99203e │ │ │ ├── USDC Bonder APR 30 Day - 0xa6a688F107851131F0E1dce493EbBebFAf99203e │ │ │ ├── USDC Bonder APR 7 Day - 0xa6a688F107851131F0E1dce493EbBebFAf99203e │ │ │ ├── USDC Bonder Balances Table - 0xa6a688F107851131F0E1dce493EbBebFAf99203e │ │ │ ├── USDC Bonder Fees - 0xa6a688F107851131F0E1dce493EbBebFAf99203e │ │ │ ├── USDC Bonder Profit - 0xa6a688F107851131F0E1dce493EbBebFAf99203e │ │ │ ├── USDC Bonder Tx Fees Spent - 0xa6a688F107851131F0E1dce493EbBebFAf99203e │ │ │ ├── USDC Bonder Tx Fees Spent Table - 0xa6a688F107851131F0E1dce493EbBebFAf99203e │ │ │ ├── USDC Bonder Tx Fees Spent USD - 0xa6a688F107851131F0E1dce493EbBebFAf99203e │ │ │ ├── USDT Bonder APR - 0x15ec4512516d980090050fe101de21832c8edfee │ │ │ ├── USDT Bonder APR 30 Day - 0x15ec4512516d980090050fe101de21832c8edfee │ │ │ ├── USDT Bonder APR 7 Day - 0x15ec4512516d980090050fe101de21832c8edfee │ │ │ ├── USDT Bonder Balances Table - 0x15ec4512516d980090050fe101de21832c8edfee │ │ │ ├── USDT Bonder Fees - 0x15ec4512516d980090050fe101de21832c8edfee │ │ │ ├── USDT Bonder Profit - 0x15ec4512516d980090050fe101de21832c8edfee │ │ │ ├── USDT Bonder Tx Fees Spent - 0x15ec4512516d980090050fe101de21832c8edfee │ │ │ ├── USDT Bonder Tx Fees Spent Table - 0x15ec4512516d980090050fe101de21832c8edfee │ │ │ └── USDT Bonder Tx Fees Spent USD - 0x15ec4512516d980090050fe101de21832c8edfee │ │ │ ├── DAI Bonder Stats │ │ │ ├── DAI Bonder APR - 0x305933e09871D4043b5036e09af794FACB3f6170 │ │ │ ├── DAI Bonder APR 1 Day - 0x305933e09871D4043b5036e09af794FACB3f6170 │ │ │ ├── DAI Bonder APR 30 Day - 0x305933e09871D4043b5036e09af794FACB3f6170 │ │ │ ├── DAI Bonder APR 7 Day - 0x305933e09871D4043b5036e09af794FACB3f6170 │ │ │ ├── DAI Bonder Balances Table - 0x305933e09871D4043b5036e09af794FACB3f6170 │ │ │ └── DAI Bonder Profit - 0x305933e09871D4043b5036e09af794FACB3f6170 │ │ │ ├── ETH Bonder Stats │ │ │ ├── ETH Bonder APR - 0x710bDa329b2a6224E4B44833DE30F38E7f81d564 │ │ │ ├── ETH Bonder APR 1 Day - 0x710bDa329b2a6224E4B44833DE30F38E7f81d564 │ │ │ ├── ETH Bonder APR 30 Day - 0x710bDa329b2a6224E4B44833DE30F38E7f81d564 │ │ │ ├── ETH Bonder APR 7 Day - 0x710bDa329b2a6224E4B44833DE30F38E7f81d564 │ │ │ ├── ETH Bonder Balances Table - 0x710bDa329b2a6224E4B44833DE30F38E7f81d564 │ │ │ └── ETH Bonder Profit - 0x710bDa329b2a6224E4B44833DE30F38E7f81d564 │ │ │ ├── TVL Stats │ │ │ ├── Arbitrum │ │ │ ├── Arbitrum DAI Historical TVL │ │ │ ├── Arbitrum ETH Historical TVL │ │ │ ├── Arbitrum TVL │ │ │ ├── Arbitrum Token TVL │ │ │ ├── Arbitrum USDC Historical TVL │ │ │ ├── Arbitrum USDT Historical TVL │ │ │ ├── Chain TVL │ │ │ ├── Chain Token TVL Bar Chart │ │ │ ├── Ethereum │ │ │ ├── Ethereum DAI Historical TVL │ │ │ ├── Ethereum ETH Historical TVL │ │ │ ├── Ethereum MATIC Historical TVL │ │ │ ├── Ethereum TVL │ │ │ ├── Ethereum Token TVL │ │ │ ├── Ethereum USDC Historical TVL │ │ │ ├── Ethereum USDT Historical TVL │ │ │ ├── Gnosis │ │ │ ├── GnosisChain DAI Historical TVL │ │ │ ├── GnosisChain ETH Historical TVL │ │ │ ├── GnosisChain MATIC Historical TVL │ │ │ ├── GnosisChain TVL │ │ │ ├── GnosisChain Token TVL │ │ │ ├── GnosisChain USDC Historical TVL │ │ │ ├── GnosisChain USDT Historical TVL │ │ │ ├── Optimism │ │ │ ├── Optimism DAI Historical TVL │ │ │ ├── Optimism ETH Historical TVL │ │ │ ├── Optimism TVL │ │ │ ├── Optimism Token TVL │ │ │ ├── Optimism USDC Historical TVL │ │ │ ├── Optimism USDT Historical TVL │ │ │ ├── Polygon │ │ │ ├── Polygon DAI Historical TVL │ │ │ ├── Polygon ETH Historical TVL │ │ │ ├── Polygon MATIC Historical TVL │ │ │ ├── Polygon TVL │ │ │ ├── Polygon Token TVL │ │ │ ├── Polygon USDC Historical TVL │ │ │ ├── Polygon USDT Historical TVL │ │ │ ├── Token TVL │ │ │ └── Total TVL │ │ │ ├── Transfer Stats (Arbitrum Odyssey) │ │ │ ├── Accounts Bridging ETH into Arbitrum (Arbitrum Odyssey Week) │ │ │ ├── Daily Spent on Bonder Fees by Source Chain (Arbitrum Odyssey Week) │ │ │ ├── Daily Transfer Count by Source Chain (Arbitrum Odyssey Week) │ │ │ ├── Daily Transfers into Arbitrum (Arbitrum Odyssey Week) │ │ │ ├── Daily Volume USD (Arbitrum Odyssey Week) │ │ │ ├── Daily Volume by Source Chain (Arbitrum Odyssey Week) │ │ │ ├── Daily Volume by Token (Arbitrum Odyssey Week) │ │ │ ├── ETH Total Volume (Arbitrum Odyssey Week) │ │ │ ├── ETH Total Volume USD (Arbitrum Odyssey Week) │ │ │ ├── ETH Total Volume from Ethereum to Arbitrum (Arbitrum Odyssey Week) │ │ │ ├── ETH Total Volume into Arbitrum (Arbitrum Odyssey Week) │ │ │ ├── ETH Total Volume leaving Arbitrum (Arbitrum Odyssey Week) │ │ │ ├── ETH Transfers Daily USD Total │ │ │ ├── ETH Transfers Daily USD Total (Arbitrum Odyssey Week) │ │ │ ├── Lifetime Transfers Count │ │ │ ├── Spent Daily on Bonder Fees USD (Arbitrum Odyssey Week) │ │ │ ├── Spent on Bonder Fees USD (Arbitrum Odyssey Week) │ │ │ ├── Total Volume USD (Arbitrum Odyssey Week) │ │ │ ├── Transfers Count (Arbitrum Odyssey Week) │ │ │ ├── Transfers Count by Token (Arbitrum Odyssey Week) │ │ │ ├── Transfers Daily Count │ │ │ ├── Transfers Daily Count (Arbitrum Odyssey Week) │ │ │ ├── Transfers Hourly Count (Arbitrum Odyssey Week) │ │ │ └── Transfers into Arbitrum Count (Arbitrum Odyssey Week) │ │ │ ├── Transfer Stats - Count │ │ │ ├── Daily Transfers Count by Arbitrum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Daily Transfers Count by Ethereum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Daily Transfers Count by Gnosis Chain as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Daily Transfers Count by Optimism as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Daily Transfers Count by Polygon as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Daily Transfers Count in Last 7 Days │ │ │ ├── Lifetime Transfers Count │ │ │ ├── Lifetime Transfers Count by Source Chain │ │ │ ├── Lifetime Transfers Count by Token │ │ │ ├── Monthly Transfers Count │ │ │ └── Weekly Transfers Count in Last 6 Months │ │ │ ├── Transfer Stats - Cumulative Volume │ │ │ ├── Transfers Cumulative Volume USD │ │ │ ├── Transfers Cumulative Volume USD By Destination Chain │ │ │ ├── Transfers Cumulative Volume USD By Source Chain │ │ │ ├── Transfers Cumulative Volume USD By Source Chain from MetaMask Portfolio │ │ │ ├── Transfers Cumulative Volume USD By Source Chain from Socket │ │ │ ├── Transfers Cumulative Volume USD From Arbitrum to Destination Chain │ │ │ ├── Transfers Cumulative Volume USD From Ethereum to Destination Chain │ │ │ ├── Transfers Cumulative Volume USD From Gnosis Chain to Destination Chain │ │ │ ├── Transfers Cumulative Volume USD From Optimism to Destination Chain │ │ │ ├── Transfers Cumulative Volume USD From Polygon to Destination Chain │ │ │ ├── Transfers Cumulative Volume USD by Token │ │ │ ├── Transfers Cumulative Volume USD by Token by Arbitrum as Destination Chain │ │ │ ├── Transfers Cumulative Volume USD by Token by Arbitrum as Source Chain │ │ │ ├── Transfers Cumulative Volume USD by Token by Ethereum as Destination Chain │ │ │ ├── Transfers Cumulative Volume USD by Token by Ethereum as Source Chain │ │ │ ├── Transfers Cumulative Volume USD by Token by Gnosis Chain as Destination Chain │ │ │ ├── Transfers Cumulative Volume USD by Token by Gnosis Chain as Source Chain │ │ │ ├── Transfers Cumulative Volume USD by Token by Optimism as Destination Chain │ │ │ ├── Transfers Cumulative Volume USD by Token by Optimism as Source Chain │ │ │ ├── Transfers Cumulative Volume USD by Token by Polygon as Destination Chain │ │ │ ├── Transfers Cumulative Volume USD by Token by Polygon as Source Chain │ │ │ ├── Transfers Cumulative Volume USD by Token from MetaMask Portfolio │ │ │ └── Transfers Cumulative Volume USD by Token from Socket │ │ │ ├── Transfer Stats - Daily Volume │ │ │ ├── Daily Transfers Count by Arbitrum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Daily Transfers Count by Ethereum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Daily Transfers Count by Gnosis Chain as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Daily Transfers Count by Optimism as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Daily Transfers Count by Polygon as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Sum Chain Daily Volume Last 7 Days │ │ │ ├── Transfers Daily Volume USD Historical Bar Chart │ │ │ ├── Transfers Daily Volume USD by Arbitrum as Source Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by DAI Token by Arbitrum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by DAI Token by Ethereum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by DAI Token by Polygon as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by DAI Token in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by ETH Token by Arbitrum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by ETH Token by Optimism as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by ETH Token by Polygon as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by ETH Token in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by Ethereum as Source Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by Gnosis Chain as Source Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by HOP Token by Arbitrum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by HOP Token by Ethereum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by HOP Token in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by MATIC Token by Ethereum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by MATIC Token by Polygon as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by MATIC Token in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by Optimism as Source Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by Polygon as Source Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by SNX Token by Optimism as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by SNX Token in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by Source Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by Token in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by USDC Token by Optimism as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by USDC Token in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by USDT Token by Ethereum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by USDT Token by Optimism as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by USDT Token by Polygon as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by USDT Token in Last 7 Days │ │ │ └── Transfers Daily Volume USD in Last 7 Days │ │ │ ├── Transfer Stats - Integration Partners │ │ │ ├── Daily Volume USD by Integration Partner And Hop Bar Chart │ │ │ ├── Daily Volume USD by Integration Partner Bar Chart │ │ │ ├── Daily Volume USD by Source Chain from LI.FI │ │ │ ├── Daily Volume USD by Source Chain from MetaMask Portfolio │ │ │ ├── Daily Volume USD by Source Chain from Socket │ │ │ ├── Daily Volume USD by Token from MetaMask Portfolio │ │ │ ├── Daily Volume USD by Token from Socket │ │ │ ├── Transfers Cumulative Volume USD By Integration Partners And Hop Pie Chart │ │ │ ├── Transfers Cumulative Volume USD By Integration Partners Pie Chart │ │ │ ├── Transfers Cumulative Volume USD By Source Chain from MetaMask Portfolio │ │ │ ├── Transfers Cumulative Volume USD By Source Chain from Socket │ │ │ ├── Transfers Cumulative Volume USD by Token from MetaMask Portfolio │ │ │ ├── Transfers Cumulative Volume USD by Token from Socket │ │ │ ├── Transfers Daily Volume USD from MetaMask Portfolio in Last 7 Days │ │ │ └── Transfers Daily Volume USD from Socket in Last 7 Days │ │ │ ├── Transfer Stats - Monthly Volume │ │ │ ├── Transfers Monthly Volume USD │ │ │ ├── Transfers Monthly Volume USD by DAI Token │ │ │ ├── Transfers Monthly Volume USD by ETH Token │ │ │ ├── Transfers Monthly Volume USD by HOP Token │ │ │ ├── Transfers Monthly Volume USD by MATIC Token │ │ │ ├── Transfers Monthly Volume USD by SNX Token │ │ │ ├── Transfers Monthly Volume USD by USDC Token │ │ │ └── Transfers Monthly Volume USD by USDT Token │ │ │ ├── Transfer Stats - Weekly Volume │ │ │ ├── Transfers Weekly Volume USD by DAI Token in Last 6 Months │ │ │ ├── Transfers Weekly Volume USD by ETH Token in Last 6 Months │ │ │ ├── Transfers Weekly Volume USD by HOP Token in Last 6 Months │ │ │ ├── Transfers Weekly Volume USD by MATIC Token in Last 6 Months │ │ │ ├── Transfers Weekly Volume USD by SNX Token Last 6 Months │ │ │ ├── Transfers Weekly Volume USD by USDC Token in Last 6 Months │ │ │ ├── Transfers Weekly Volume USD by USDT Token in Last 6 Months │ │ │ └── Transfers Weekly Volume USD in Last 6 Months │ │ │ ├── Transfer Stats │ │ │ ├── Daily Transfers Count by Arbitrum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Daily Transfers Count by Ethereum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Daily Transfers Count by Gnosis Chain as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Daily Transfers Count by Optimism as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Daily Transfers Count by Polygon as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Daily Transfers Count in Last 7 Days │ │ │ ├── Daily Volume USD by Source Chain from LI.FI │ │ │ ├── Daily Volume USD by Source Chain from MetaMask Portfolio │ │ │ ├── Daily Volume USD by Source Chain from Socket │ │ │ ├── Daily Volume USD by Token from MetaMask Portfolio │ │ │ ├── Daily Volume USD by Token from Socket │ │ │ ├── Lifetime Transfers Count │ │ │ ├── Lifetime Transfers Count by Source Chain │ │ │ ├── Lifetime Transfers Count by Token │ │ │ ├── Monthly Transfers Count │ │ │ ├── Transfer Cumulative Volume USD Chart │ │ │ ├── Transfers Cumulative Volume USD │ │ │ ├── Transfers Cumulative Volume USD By Destination Chain │ │ │ ├── Transfers Cumulative Volume USD By Source Chain │ │ │ ├── Transfers Cumulative Volume USD By Source Chain from MetaMask Portfolio │ │ │ ├── Transfers Cumulative Volume USD By Source Chain from Socket │ │ │ ├── Transfers Cumulative Volume USD From Arbitrum to Destination Chain │ │ │ ├── Transfers Cumulative Volume USD From Ethereum to Destination Chain │ │ │ ├── Transfers Cumulative Volume USD From Gnosis Chain to Destination Chain │ │ │ ├── Transfers Cumulative Volume USD From Optimism to Destination Chain │ │ │ ├── Transfers Cumulative Volume USD From Polygon to Destination Chain │ │ │ ├── Transfers Cumulative Volume USD by Token │ │ │ ├── Transfers Cumulative Volume USD by Token by Arbitrum as Destination Chain │ │ │ ├── Transfers Cumulative Volume USD by Token by Arbitrum as Source Chain │ │ │ ├── Transfers Cumulative Volume USD by Token by Ethereum as Destination Chain │ │ │ ├── Transfers Cumulative Volume USD by Token by Ethereum as Source Chain │ │ │ ├── Transfers Cumulative Volume USD by Token by Gnosis Chain as Destination Chain │ │ │ ├── Transfers Cumulative Volume USD by Token by Gnosis Chain as Source Chain │ │ │ ├── Transfers Cumulative Volume USD by Token by Optimism as Destination Chain │ │ │ ├── Transfers Cumulative Volume USD by Token by Optimism as Source Chain │ │ │ ├── Transfers Cumulative Volume USD by Token by Polygon as Destination Chain │ │ │ ├── Transfers Cumulative Volume USD by Token by Polygon as Source Chain │ │ │ ├── Transfers Cumulative Volume USD by Token from MetaMask Portfolio │ │ │ ├── Transfers Cumulative Volume USD by Token from Socket │ │ │ ├── Transfers Daily Volume USD by Arbitrum as Source Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by DAI Token by Arbitrum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by DAI Token by Ethereum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by DAI Token by Gnosis Chain as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by DAI Token by Optimism as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by DAI Token by Polygon as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by DAI Token in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by ETH Token by Arbitrum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by ETH Token by Ethereum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by ETH Token by Gnosis Chain as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by ETH Token by Optimism as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by ETH Token by Polygon as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by ETH Token in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by Ethereum as Source Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by Gnosis Chain as Source Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by HOP Token by Arbitrum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by HOP Token by Ethereum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by HOP Token by Gnosis Chain as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by HOP Token by Optimism as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by HOP Token by Polygon as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by HOP Token in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by MATIC Token by Ethereum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by MATIC Token by Gnosis Chain as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by MATIC Token by Polygon as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by MATIC Token in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by Optimism as Source Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by Polygon as Source Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by SNX Token by Ethereum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by SNX Token by Optimism as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by SNX Token in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by Source Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by Token By Arbitrum as Destination Chain in Last 6 Months │ │ │ ├── Transfers Daily Volume USD by Token By Arbitrum as Source Chain in Last 6 Months │ │ │ ├── Transfers Daily Volume USD by Token By Ethereum as Destination Chain in Last 6 Months │ │ │ ├── Transfers Daily Volume USD by Token By Ethereum as Source Chain in Last 6 Months │ │ │ ├── Transfers Daily Volume USD by Token By Gnosis Chain as Source Chain in Last 6 Months │ │ │ ├── Transfers Daily Volume USD by Token By Gnosis as Chain Destination Chain in Last 6 Months │ │ │ ├── Transfers Daily Volume USD by Token By Optimism as Destination Chain in Last 6 Months │ │ │ ├── Transfers Daily Volume USD by Token By Optimism as Source Chain in Last 6 Months │ │ │ ├── Transfers Daily Volume USD by Token By Polygon as Destination Chain in Last 6 Months │ │ │ ├── Transfers Daily Volume USD by Token By Polygon as Source Chain in Last 6 Months │ │ │ ├── Transfers Daily Volume USD by Token in Last 6 Months │ │ │ ├── Transfers Daily Volume USD by Token in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by USDC Token by Arbitrum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by USDC Token by Ethereum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by USDC Token by Gnosis Chain as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by USDC Token by Optimism as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by USDC Token by Polygon as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by USDC Token in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by USDT Token by Arbitrum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by USDT Token by Ethereum as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by USDT Token by Gnosis Chain as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by USDT Token by Optimism as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by USDT Token by Polygon as Source Chain to Destination Chain in Last 7 Days │ │ │ ├── Transfers Daily Volume USD by USDT Token in Last 7 Days │ │ │ ├── Transfers Daily Volume USD from MetaMask Portfolio in Last 7 Days │ │ │ ├── Transfers Daily Volume USD from Socket in Last 7 Days │ │ │ ├── Transfers Daily Volume USD in Last 7 Days │ │ │ ├── Transfers Monthly Volume USD │ │ │ ├── Transfers Monthly Volume USD by DAI Token │ │ │ ├── Transfers Monthly Volume USD by ETH Token │ │ │ ├── Transfers Monthly Volume USD by HOP Token │ │ │ ├── Transfers Monthly Volume USD by MATIC Token │ │ │ ├── Transfers Monthly Volume USD by SNX Token │ │ │ ├── Transfers Monthly Volume USD by USDC Token │ │ │ ├── Transfers Monthly Volume USD by USDT Token │ │ │ ├── Transfers Weekly Volume USD by DAI Token in Last 6 Months │ │ │ ├── Transfers Weekly Volume USD by ETH Token in Last 6 Months │ │ │ ├── Transfers Weekly Volume USD by HOP Token in Last 6 Months │ │ │ ├── Transfers Weekly Volume USD by MATIC Token in Last 6 Months │ │ │ ├── Transfers Weekly Volume USD by USDC Token in Last 6 Months │ │ │ ├── Transfers Weekly Volume USD by USDT Token in Last 6 Months │ │ │ ├── Transfers Weekly Volume USD in Last 6 Months │ │ │ └── Weekly Transfers Count in Last 6 Months │ │ │ ├── USDC Bonder Stats │ │ │ ├── USDC Bonder APR - 0xa6a688F107851131F0E1dce493EbBebFAf99203e │ │ │ ├── USDC Bonder APR 1 Day - 0xa6a688F107851131F0E1dce493EbBebFAf99203e │ │ │ ├── USDC Bonder APR 30 Day - 0xa6a688F107851131F0E1dce493EbBebFAf99203e │ │ │ ├── USDC Bonder APR 7 Day - 0xa6a688F107851131F0E1dce493EbBebFAf99203e │ │ │ ├── USDC Bonder Balances Table - 0xa6a688F107851131F0E1dce493EbBebFAf99203e │ │ │ └── USDC Bonder Profit - 0xa6a688F107851131F0E1dce493EbBebFAf99203e │ │ │ ├── USDT Bonder Stats │ │ │ ├── USDT Bonder APR - 0x15ec4512516d980090050fe101de21832c8edfee │ │ │ ├── USDT Bonder APR 1 Day - 0x15ec4512516d980090050fe101de21832c8edfee │ │ │ ├── USDT Bonder APR 30 Day - 0x15ec4512516d980090050fe101de21832c8edfee │ │ │ ├── USDT Bonder APR 7 Day - 0x15ec4512516d980090050fe101de21832c8edfee │ │ │ ├── USDT Bonder Balances Table - 0x15ec4512516d980090050fe101de21832c8edfee │ │ │ ├── USDT Bonder Profit - 0x15ec4512516d980090050fe101de21832c8edfee │ │ │ └── USDT Bonder Profit 0x15ec4512516d980090050fe101de21832c8edfee │ │ │ └── Volume Stats │ │ │ ├── Arbitrum │ │ │ ├── Arbitrum Sum Token Daily Volume Last 7 Days │ │ │ ├── Arbitrum Sum Weekly Volume │ │ │ ├── Arbitrum Token Cumulative Volume │ │ │ ├── Chain Cumulative Volume │ │ │ ├── Cumulative │ │ │ ├── Cumulative Volume │ │ │ ├── Cumulative Volume Chart │ │ │ ├── Daily │ │ │ ├── ETH Sum Daily Volume Last 7 Days │ │ │ ├── ETH Sum Weekly Volume │ │ │ ├── Ethereum │ │ │ ├── Ethereum Sum Token Daily Volume Last 7 Days │ │ │ ├── Ethereum Sum Weekly Volume │ │ │ ├── Ethereum Token Cumulative Volume │ │ │ ├── Gnosis │ │ │ ├── GnosisChain Sum Token Daily Volume Last 7 Days │ │ │ ├── GnosisChain Sum Weekly Volume │ │ │ ├── GnosisChain Token Cumulative Volume │ │ │ ├── Historical Token Daily Volume │ │ │ ├── Monthly │ │ │ ├── Optimism │ │ │ ├── Optimism Sum Token Daily Volume Last 7 Days │ │ │ ├── Optimism Sum Weekly Volume │ │ │ ├── Optimism Token Cumulative Volume │ │ │ ├── Polygon │ │ │ ├── Polygon Sum Token Daily Volume Last 7 Days │ │ │ ├── Polygon Sum Weekly Volume │ │ │ ├── Polygon Token Cumulative Volume │ │ │ ├── Sum Chain Daily Volume Last 7 Days │ │ │ ├── Sum Daily Volume Last 7 Days │ │ │ ├── Sum Monthly Volume │ │ │ ├── Sum Token Daily Volume Last 7 Days │ │ │ ├── Sum Weekly Volume │ │ │ ├── Token Cumulative Volume │ │ │ └── Weekly │ ├── src │ │ ├── AmmStats.ts │ │ ├── BonderStats.ts │ │ ├── Db.ts │ │ ├── IpfsUpload.ts │ │ ├── PriceFeed.ts │ │ ├── PriceStats.ts │ │ ├── S3Upload.ts │ │ ├── TvlStats.ts │ │ ├── VolumeStats.ts │ │ ├── YieldStats.ts │ │ ├── config.ts │ │ ├── constants.ts │ │ ├── data │ │ │ ├── arbitrum_alises.json │ │ │ ├── bonder_profits.json │ │ │ └── weth_addresses.json │ │ ├── index.ts │ │ ├── utils │ │ │ ├── getBlockNumberFromDate.ts │ │ │ ├── getDefaultRpcProvider.ts │ │ │ ├── getEtherscanApiUrl.ts │ │ │ ├── getSubgraphUrl.ts │ │ │ ├── nearestDate.ts │ │ │ ├── queryFetch.ts │ │ │ ├── sumAmounts.ts │ │ │ └── wait.ts │ │ └── worker.ts │ ├── test │ │ └── fees.test.ts │ └── tsconfig.json ├── v2-explorer-backend │ ├── .dockerignore │ ├── .gitignore │ ├── Dockerfile │ ├── LICENSE │ ├── Makefile │ ├── README.md │ ├── docker-compose.yml │ ├── eslint.config.mjs │ ├── jest.config.mjs │ ├── package.json │ ├── scripts │ │ └── postgres_dev.sh │ ├── src │ │ ├── cli │ │ │ ├── cli.ts │ │ │ ├── index.ts │ │ │ ├── shared │ │ │ │ └── index.ts │ │ │ └── worker.ts │ │ ├── config │ │ │ ├── config.ts │ │ │ └── index.ts │ │ ├── controller │ │ │ ├── Controller.ts │ │ │ └── index.ts │ │ ├── db │ │ │ ├── BaseDb.ts │ │ │ ├── db.ts │ │ │ ├── index.ts │ │ │ └── syncStateDb │ │ │ │ ├── SyncStateDb.ts │ │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── indexer │ │ │ ├── index.ts │ │ │ └── indexer.ts │ │ ├── pgDb │ │ │ ├── events │ │ │ │ ├── BaseType.ts │ │ │ │ ├── BundleCommitted.ts │ │ │ │ ├── BundleForwarded.ts │ │ │ │ ├── BundleReceived.ts │ │ │ │ ├── BundleSet.ts │ │ │ │ ├── FeesSentToHub.ts │ │ │ │ ├── MessageBundled.ts │ │ │ │ ├── MessageExecuted.ts │ │ │ │ ├── MessageSent.ts │ │ │ │ └── context.ts │ │ │ ├── index.ts │ │ │ └── pgDb.ts │ │ ├── server │ │ │ ├── index.ts │ │ │ ├── rateLimit.ts │ │ │ ├── responseCache.ts │ │ │ └── server.ts │ │ ├── utils │ │ │ ├── getEnvFilePath.ts │ │ │ ├── getTransactionHashExplorerUrl.ts │ │ │ ├── truncateString.ts │ │ │ └── wait.ts │ │ └── worker │ │ │ ├── index.ts │ │ │ └── worker.ts │ ├── test │ │ ├── cli.test.ts │ │ ├── controller.test.ts │ │ ├── db.test.ts │ │ ├── indexer.test.ts │ │ └── server.test.ts │ └── tsconfig.json ├── v2-explorer-frontend │ ├── .gitignore │ ├── .nvmrc │ ├── LICENSE │ ├── README.md │ ├── eslint.config.mjs │ ├── index.html │ ├── netlify.toml │ ├── package.json │ ├── public │ │ ├── _headers │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── logo192.png │ │ ├── logo512.png │ │ ├── manifest.json │ │ └── robots.txt │ ├── src │ │ ├── App.css │ │ ├── App.tsx │ │ ├── assets │ │ │ └── circles-bg.svg │ │ ├── components │ │ │ ├── ChainSelect.tsx │ │ │ ├── ExplorerEvents.tsx │ │ │ ├── Footer.tsx │ │ │ ├── Header.tsx │ │ │ ├── SiteWrapper.tsx │ │ │ ├── Table.tsx │ │ │ └── events │ │ │ │ ├── BundleCommittedEvents.tsx │ │ │ │ ├── BundleForwardedEvents.tsx │ │ │ │ ├── BundleReceivedEvents.tsx │ │ │ │ ├── BundleSetEvents.tsx │ │ │ │ ├── MessageBundledEvents.tsx │ │ │ │ ├── MessageExecutedEvents.tsx │ │ │ │ └── MessageSentEvents.tsx │ │ ├── config.ts │ │ ├── hooks │ │ │ ├── useEvents.ts │ │ │ └── useQueryParams.tsx │ │ ├── index.css │ │ ├── logo.svg │ │ ├── main.tsx │ │ ├── pages │ │ │ ├── Details.tsx │ │ │ ├── Events.tsx │ │ │ ├── Main.tsx │ │ │ └── NotFound.tsx │ │ ├── react-app-env.d.ts │ │ ├── reportWebVitals.ts │ │ ├── setupTests.ts │ │ └── vite-env.d.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── v2-hop-node │ ├── .dockerignore │ ├── .gitignore │ ├── Dockerfile │ ├── LICENSE │ ├── README.md │ ├── eslint.config.mjs │ ├── jest.config.mjs │ ├── package.json │ ├── src │ │ ├── cctp │ │ │ ├── Message.ts │ │ │ ├── MessageDataProvider.ts │ │ │ ├── MessageIndexer.ts │ │ │ ├── MessageStateMachine.ts │ │ │ ├── sdk │ │ │ │ ├── MessageSDK.ts │ │ │ │ └── utils.ts │ │ │ └── types.ts │ │ ├── chains │ │ │ ├── AbstractChainBridge.ts │ │ │ ├── Chains │ │ │ │ ├── arbitrum │ │ │ │ │ ├── ArbitrumAddresses.ts │ │ │ │ │ ├── ArbitrumBridge.ts │ │ │ │ │ ├── ArbitrumFinalityService.ts │ │ │ │ │ ├── ArbitrumMessageService.ts │ │ │ │ │ └── inclusion │ │ │ │ │ │ └── ArbitrumInclusionService.ts │ │ │ │ ├── gnosis │ │ │ │ │ ├── GnosisAddresses.ts │ │ │ │ │ ├── GnosisBridge.ts │ │ │ │ │ ├── GnosisFinalityService.ts │ │ │ │ │ └── GnosisMessageService.ts │ │ │ │ ├── linea │ │ │ │ │ ├── LineaBridge.ts │ │ │ │ │ ├── LineaFinalityService.ts │ │ │ │ │ └── LineaMessageService.ts │ │ │ │ ├── optimism │ │ │ │ │ ├── OptimismAddresses.ts │ │ │ │ │ ├── OptimismBridge.ts │ │ │ │ │ ├── OptimismFinalityService.ts │ │ │ │ │ ├── OptimismMessageService.ts │ │ │ │ │ └── inclusion │ │ │ │ │ │ ├── AbstractOptimismInclusionService.ts │ │ │ │ │ │ ├── AlchemyInclusionService.ts │ │ │ │ │ │ ├── Derive.ts │ │ │ │ │ │ └── JsonRpcInclusionService.ts │ │ │ │ ├── polygon │ │ │ │ │ ├── PolygonBridge.ts │ │ │ │ │ ├── PolygonFinalityService.ts │ │ │ │ │ └── PolygonMessageService.ts │ │ │ │ ├── polygonzk │ │ │ │ │ ├── PolygonZkBridge.ts │ │ │ │ │ ├── PolygonZkFinalityService.ts │ │ │ │ │ └── PolygonZkMessageService.ts │ │ │ │ ├── scroll │ │ │ │ │ ├── ScrollBridge.ts │ │ │ │ │ ├── ScrollFinalityService.ts │ │ │ │ │ └── ScrollMessageService.ts │ │ │ │ └── zksync │ │ │ │ │ ├── ZkSyncBridge.ts │ │ │ │ │ ├── ZkSyncFinalityService.ts │ │ │ │ │ └── ZkSyncMessageService.ts │ │ │ ├── Factories │ │ │ │ └── ChainBridgeFactory.ts │ │ │ ├── IChainBridge.ts │ │ │ ├── Services │ │ │ │ ├── AbstractFinalityService.ts │ │ │ │ ├── AbstractInclusionService.ts │ │ │ │ ├── AbstractMessageService.ts │ │ │ │ ├── AbstractService.ts │ │ │ │ └── CacheService.ts │ │ │ ├── getChainBridge.ts │ │ │ └── index.ts │ │ ├── cli │ │ │ ├── cctp │ │ │ │ ├── cctp.ts │ │ │ │ ├── cctpDBDump.ts │ │ │ │ ├── relayCCTP.ts │ │ │ │ ├── unrelayedCCTPMessages.ts │ │ │ │ └── utils.ts │ │ │ ├── cli.ts │ │ │ ├── hopNode.ts │ │ │ ├── index.ts │ │ │ └── shared │ │ │ │ ├── art.ts │ │ │ │ ├── index.ts │ │ │ │ └── shared.ts │ │ ├── config │ │ │ ├── ConfigManager.ts │ │ │ ├── configs │ │ │ │ ├── SharedConfig.ts │ │ │ │ └── SignerConfig.ts │ │ │ ├── constants.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ └── utils.ts │ │ ├── constants │ │ │ ├── constants.ts │ │ │ ├── index.ts │ │ │ └── utils.ts │ │ ├── data-provider │ │ │ ├── DataProvider.ts │ │ │ └── IDataProvider.ts │ │ ├── db │ │ │ ├── DB.ts │ │ │ ├── OnchainEventIndexerDB.ts │ │ │ ├── StateMachineDB.ts │ │ │ ├── TxRelayDB.ts │ │ │ ├── constants.ts │ │ │ └── utils.ts │ │ ├── finality │ │ │ ├── FinalityService.ts │ │ │ ├── IFinalityService.ts │ │ │ ├── index.ts │ │ │ └── strategies │ │ │ │ ├── FinalityStrategy.ts │ │ │ │ ├── IFinalityStrategy.ts │ │ │ │ ├── bonder │ │ │ │ ├── ArbitrumStrategy.ts │ │ │ │ ├── EthereumStrategy.ts │ │ │ │ ├── GnosisStrategy.ts │ │ │ │ ├── LineaStrategy.ts │ │ │ │ ├── OptimismStrategy.ts │ │ │ │ ├── PolygonStrategy.ts │ │ │ │ ├── PolygonZkStrategy.ts │ │ │ │ └── index.ts │ │ │ │ ├── collateralized │ │ │ │ ├── ArbitrumStrategy.ts │ │ │ │ ├── EthereumStrategy.ts │ │ │ │ ├── GnosisStrategy.ts │ │ │ │ ├── LineaStrategy.ts │ │ │ │ ├── OptimismStrategy.ts │ │ │ │ ├── PolygonStrategy.ts │ │ │ │ ├── PolygonZkStrategy.ts │ │ │ │ └── index.ts │ │ │ │ ├── default │ │ │ │ ├── ArbitrumStrategy.ts │ │ │ │ ├── EthereumStrategy.ts │ │ │ │ ├── GnosisStrategy.ts │ │ │ │ ├── LineaStrategy.ts │ │ │ │ ├── OptimismStrategy.ts │ │ │ │ ├── PolygonStrategy.ts │ │ │ │ ├── PolygonZkStrategy.ts │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ └── threshold │ │ │ │ ├── ArbitrumStrategy.ts │ │ │ │ ├── EthereumStrategy.ts │ │ │ │ ├── GnosisStrategy.ts │ │ │ │ ├── LineaStrategy.ts │ │ │ │ ├── OptimismStrategy.ts │ │ │ │ ├── PolygonStrategy.ts │ │ │ │ ├── PolygonZkStrategy.ts │ │ │ │ └── index.ts │ │ ├── gasboost │ │ │ ├── GasBoostSigner.ts │ │ │ ├── GasBoostTransaction.ts │ │ │ ├── GasBoostTransactionFactory.ts │ │ │ ├── MemoryStore.ts │ │ │ ├── Store.ts │ │ │ ├── constants.ts │ │ │ └── index.ts │ │ ├── indexer │ │ │ ├── IOnchainEventIndexer.ts │ │ │ ├── OnchainEventIndexer.ts │ │ │ ├── constants.ts │ │ │ └── utils.ts │ │ ├── keystore │ │ │ ├── entropyToMnemonic.ts │ │ │ ├── index.ts │ │ │ └── keystore.ts │ │ ├── logger │ │ │ ├── Logger.ts │ │ │ └── index.ts │ │ ├── provider │ │ │ ├── index.ts │ │ │ └── provider.ts │ │ ├── state-machine │ │ │ ├── IStateMachine.ts │ │ │ ├── StateMachine.ts │ │ │ └── utils.ts │ │ ├── types │ │ │ ├── error.ts │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── utils │ │ │ ├── bigNumberMax.ts │ │ │ ├── bigNumberMin.ts │ │ │ ├── getBumpedBN.ts │ │ │ ├── getBumpedGasPrice.ts │ │ │ ├── getRpcProvider.ts │ │ │ ├── getRpcProviderFromUrl.ts │ │ │ ├── getRpcRootProviderName.ts │ │ │ ├── getRpcUrlFromProvider.ts │ │ │ ├── getTxOverrides.ts │ │ │ ├── poll.ts │ │ │ ├── promiseTimeout.ts │ │ │ ├── rateLimitRetry.ts │ │ │ └── wait.ts │ │ └── wallets │ │ │ ├── index.ts │ │ │ └── wallets.ts │ ├── test │ │ ├── cctp.test.ts │ │ └── utils │ │ │ └── expectDefined.ts │ └── tsconfig.json ├── v2-sdk-demo │ ├── .gitignore │ └── README.md └── v2-sdk │ ├── .gitignore │ └── README.md ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── tsconfig.eslint.json └── tsconfig.json /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | Dockerfile 3 | *.env 4 | packages/explorer-backend/scripts/pgdata 5 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | node .husky/check-npmignore.mjs 2 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | # Pins pacakges by default 2 | save-prefix='' 3 | 4 | # Remove all ethersproject when ethers is updated 5 | public-hoist-pattern[]=@ethersproject/* 6 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 20.12.2 2 | -------------------------------------------------------------------------------- /jest.config.base.mjs: -------------------------------------------------------------------------------- 1 | export default { 2 | roots: ['test'], 3 | transform: { 4 | '^.+\\.tsx?$': ['ts-jest'] 5 | }, 6 | bail: 1, 7 | verbose: true 8 | } 9 | -------------------------------------------------------------------------------- /ops/README.md: -------------------------------------------------------------------------------- 1 | # Ops 2 | 3 | Various operational packages 4 | -------------------------------------------------------------------------------- /ops/webhooks/run_webhook_server.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | /usr/local/bin/gws -port=4665 -method=POST -path=/postreceive -secret=$WEBHOOK_SECRET -command=$(pwd)/webhook_postreceive.sh 4 | -------------------------------------------------------------------------------- /ops/webhooks/test_webhook_server.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mock_response='{"payload":{"reponame":"explorer","branch":"production-backend","build_parameters":{"CIRCLE_JOB":""},"outcome":"success","build_url":"https://app.circleci.com/jobs/github/hop-protocol/explorer/1"}}' 4 | 5 | curl -X POST -H "X-Secret: $WEBHOOK_SECRET" -d $mock_response http://localhost:4665/postreceive 6 | -------------------------------------------------------------------------------- /packages/api/.dockerignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/api/.dockerignore -------------------------------------------------------------------------------- /packages/api/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.env 3 | dist 4 | *.log 5 | yarn.lock 6 | .npmignore -------------------------------------------------------------------------------- /packages/api/bench/bench.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | #HOST="https://api.hop.exchange" 4 | HOST="http://localhost:8000" 5 | PATH="/v1/quote?amount=1000000&token=USDC&fromChain=polygon&toChain=gnosis&slippage=0.5" 6 | #PATH="/health" 7 | URL="$HOST$PATH" 8 | 9 | /bin/wrk2 -t5 -c200 -d30s -R2000 -s payload.lua "$URL" 10 | -------------------------------------------------------------------------------- /packages/api/ci/package_check.sh: -------------------------------------------------------------------------------- 1 | #/bin/env bash 2 | 3 | curl -s "https://registry.npmjs.org/@hop-protocol/sdk/latest" | jq '.version' > /tmp/sdk1.txt 4 | cat package.json | jq '.dependencies."@hop-protocol/sdk"' > /tmp/sdk2.txt 5 | diff /tmp/sdk1.txt /tmp/sdk2.txt || sleep 180 6 | -------------------------------------------------------------------------------- /packages/api/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import baseConfig from '../../eslint.config.mjs' 2 | export default baseConfig 3 | -------------------------------------------------------------------------------- /packages/api/jest.config.mjs: -------------------------------------------------------------------------------- 1 | import baseESMConfig from '../../jest.config.esm.mjs' 2 | export default baseESMConfig 3 | -------------------------------------------------------------------------------- /packages/api/src/index.ts: -------------------------------------------------------------------------------- 1 | import './server.js' 2 | -------------------------------------------------------------------------------- /packages/api/test/server.test.ts: -------------------------------------------------------------------------------- 1 | describe('test', () => { 2 | it('test', () => { 3 | // TODO 4 | }) 5 | }) 6 | -------------------------------------------------------------------------------- /packages/api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "rootDir": "./src", 5 | "outDir": "./dist" 6 | }, 7 | "include": [ 8 | "src" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /packages/explorer-backend/.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | Dockerfile 3 | *.env 4 | pgdata 5 | -------------------------------------------------------------------------------- /packages/explorer-backend/.gitignore: -------------------------------------------------------------------------------- 1 | #public 2 | node_modules 3 | dist 4 | *.env 5 | *.db 6 | *.db-journal 7 | pgdata 8 | docker_compose/ 9 | .npmignore -------------------------------------------------------------------------------- /packages/explorer-backend/.node-version: -------------------------------------------------------------------------------- 1 | 16 2 | -------------------------------------------------------------------------------- /packages/explorer-backend/.nvmrc: -------------------------------------------------------------------------------- 1 | 16 2 | -------------------------------------------------------------------------------- /packages/explorer-backend/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import baseConfig from '../../eslint.config.mjs' 2 | export default baseConfig 3 | -------------------------------------------------------------------------------- /packages/explorer-backend/jest.config.mjs: -------------------------------------------------------------------------------- 1 | import baseESMConfig from '../../jest.config.esm.mjs' 2 | export default baseESMConfig 3 | -------------------------------------------------------------------------------- /packages/explorer-backend/scripts/loadtest/bench.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if ! command -v wrk2 >/dev/null 2>&1; then 4 | if [ -f "/etc/arch-release" ]; then 5 | yay -S wrk2-git 6 | fi 7 | fi 8 | 9 | wrk2 -t5 -c200 -d30s -R2000 -s payload.lua "https://explorer-api.hop.exchange/v1/transfers?perPage=100&startDate=2022-06-01&endDate=2022-06-05" 10 | -------------------------------------------------------------------------------- /packages/explorer-backend/scripts/loadtest/payload.lua: -------------------------------------------------------------------------------- 1 | wrk.method = "GET" 2 | wrk.headers["Accept"] = "application/json" 3 | 4 | logfile = io.open("wrk.log", "w") 5 | 6 | response = function(status, header, body) 7 | str = "status:" .. status .. "\n" .. body .. "\n-------------------------------------------------\n" 8 | print(str) 9 | logfile:write(str); 10 | end 11 | -------------------------------------------------------------------------------- /packages/explorer-backend/scripts/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "scripts", 3 | "version": "1.0.0", 4 | "description": "", 5 | "license": "ISC", 6 | "author": "", 7 | "type": "commonjs", 8 | "main": "", 9 | "scripts": { 10 | "test": "echo \"Error: no test specified\" && exit 1" 11 | }, 12 | "devDependencies": { 13 | "chalk": "^3.0.0" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /packages/explorer-backend/scripts/select_transferIds_console.js: -------------------------------------------------------------------------------- 1 | copy(Array.from(document.querySelectorAll('.transferId a')) 2 | .map(element => element.getAttribute('data-clipboard-text')).filter(Boolean) 3 | .join(',')) 4 | -------------------------------------------------------------------------------- /packages/explorer-backend/src/cache.ts: -------------------------------------------------------------------------------- 1 | import mcache from 'memory-cache' 2 | 3 | const cache = new mcache.Cache() 4 | 5 | export { cache } 6 | -------------------------------------------------------------------------------- /packages/explorer-backend/src/index.ts: -------------------------------------------------------------------------------- 1 | import './server' 2 | -------------------------------------------------------------------------------- /packages/explorer-backend/src/utils/chainSlugToName.ts: -------------------------------------------------------------------------------- 1 | import { networks } from '../config' 2 | 3 | const chainSlugToNameMap :any = {} 4 | 5 | for (const chain in networks) { 6 | chainSlugToNameMap[chain] = (networks as any)[chain].name 7 | } 8 | 9 | export function chainSlugToName (chainSlug: string) { 10 | return chainSlugToNameMap[chainSlug] 11 | } 12 | -------------------------------------------------------------------------------- /packages/explorer-backend/src/utils/explorerLink.ts: -------------------------------------------------------------------------------- 1 | import { networks } from '../config' 2 | 3 | export function explorerLink (chain: string) { 4 | return (networks as any)[chain]?.explorerUrls?.[0] ?? '' 5 | } 6 | -------------------------------------------------------------------------------- /packages/explorer-backend/src/utils/explorerLinkAddress.ts: -------------------------------------------------------------------------------- 1 | import { explorerLink } from '../utils/explorerLink' 2 | 3 | export function explorerLinkAddress (chain: string, address: string) { 4 | const base = explorerLink(chain) 5 | return `${base}/address/${address || ''}` 6 | } 7 | -------------------------------------------------------------------------------- /packages/explorer-backend/src/utils/explorerLinkTx.ts: -------------------------------------------------------------------------------- 1 | import { explorerLink } from './explorerLink' 2 | 3 | export function explorerLinkTx (chain: string, transactionHash: string) { 4 | const base = explorerLink(chain) 5 | return `${base}/tx/${transactionHash || ''}` 6 | } 7 | -------------------------------------------------------------------------------- /packages/explorer-backend/src/utils/getChainLogo.ts: -------------------------------------------------------------------------------- 1 | export function getChainLogo (chainSlug: string) { 2 | return `https://assets.hop.exchange/logos/${chainSlug?.toLowerCase()}.svg` 3 | } 4 | -------------------------------------------------------------------------------- /packages/explorer-backend/src/utils/getDefaultRpcUrl.ts: -------------------------------------------------------------------------------- 1 | import { getNetwork, NetworkSlug } from '@hop-protocol/sdk' 2 | 3 | export function getDefaultRpcUrl (network: string, chain: string) { 4 | return (getNetwork(network as NetworkSlug)?.chains as any)?.[chain]?.publicRpcUrl 5 | } 6 | -------------------------------------------------------------------------------- /packages/explorer-backend/src/utils/getSupportedCctpChains.ts: -------------------------------------------------------------------------------- 1 | export function getSupportedCctpChains() { 2 | const supportedChains = ['ethereum', 'arbitrum', 'optimism', 'polygon', 'base'] 3 | return supportedChains 4 | } 5 | -------------------------------------------------------------------------------- /packages/explorer-backend/src/utils/getTokenLogo.ts: -------------------------------------------------------------------------------- 1 | export function getTokenLogo (tokenSymbol: string) { 2 | return `https://assets.hop.exchange/logos/${tokenSymbol?.toLowerCase()}.svg` 3 | } 4 | -------------------------------------------------------------------------------- /packages/explorer-backend/src/utils/integrationPartnerImage.ts: -------------------------------------------------------------------------------- 1 | import { integrationPartnerImageUrls } from '../config' 2 | 3 | export function integrationPartnerImage (slug: string) { 4 | return integrationPartnerImageUrls[slug] 5 | } 6 | -------------------------------------------------------------------------------- /packages/explorer-backend/src/utils/integrationPartnerName.ts: -------------------------------------------------------------------------------- 1 | import { integrationPartnerNames } from '../config' 2 | 3 | export function integrationPartnerName (slug: string) { 4 | return integrationPartnerNames[slug] 5 | } 6 | -------------------------------------------------------------------------------- /packages/explorer-backend/src/utils/padHex.ts: -------------------------------------------------------------------------------- 1 | import toHex from 'to-hex' 2 | 3 | export function padHex (hex: string) { 4 | return toHex(hex, { evenLength: true, addPrefix: true }) 5 | } 6 | -------------------------------------------------------------------------------- /packages/explorer-backend/src/utils/truncateAddress.ts: -------------------------------------------------------------------------------- 1 | import { truncateString } from './truncateString' 2 | 3 | export function truncateAddress (address :string) { 4 | return truncateString(address, 4) 5 | } 6 | -------------------------------------------------------------------------------- /packages/explorer-backend/src/utils/truncateHash.ts: -------------------------------------------------------------------------------- 1 | import { truncateString } from './truncateString' 2 | 3 | export function truncateHash (hash: string) { 4 | return truncateString(hash, 6) 5 | } 6 | -------------------------------------------------------------------------------- /packages/explorer-backend/src/utils/truncateString.ts: -------------------------------------------------------------------------------- 1 | export function truncateString (str: string, splitNum: number) { 2 | if (!str) return '' 3 | if (str.length < splitNum * 2) { 4 | return str 5 | } 6 | return str.substring(0, 2 + splitNum) + '…' + str.substring(str.length - splitNum, str.length) 7 | } 8 | -------------------------------------------------------------------------------- /packages/explorer-backend/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/explorer-backend/static/favicon.ico -------------------------------------------------------------------------------- /packages/explorer-backend/static/main.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/explorer-backend/static/main.js -------------------------------------------------------------------------------- /packages/explorer-backend/static/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | } 3 | 4 | -------------------------------------------------------------------------------- /packages/explorer-backend/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "module": "NodeNext", 5 | "moduleResolution": "NodeNext", 6 | "rootDir": "./src", 7 | "outDir": "./dist", 8 | "paths": { 9 | "src/*": ["./src/*"] 10 | } 11 | }, 12 | "include": ["src"] 13 | } 14 | -------------------------------------------------------------------------------- /packages/explorer-frontend/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import baseConfig from '../../eslint.config.mjs' 2 | export default baseConfig 3 | -------------------------------------------------------------------------------- /packages/explorer-frontend/netlify.toml: -------------------------------------------------------------------------------- 1 | [[plugins]] 2 | package = "@netlify/plugin-nextjs" 3 | 4 | [[redirects]] 5 | from = "/mainnet" 6 | to = "/" 7 | status = 301 8 | 9 | [[redirects]] 10 | from = "/_ipx/*" 11 | to = "/" 12 | status = 301 13 | -------------------------------------------------------------------------------- /packages/explorer-frontend/next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /packages/explorer-frontend/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | images: { 5 | domains: ['assets.hop.exchange'] 6 | }, 7 | } 8 | 9 | module.exports = nextConfig 10 | -------------------------------------------------------------------------------- /packages/explorer-frontend/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/explorer-frontend/public/favicon.ico -------------------------------------------------------------------------------- /packages/explorer-frontend/styles/Index.module.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/explorer-frontend/styles/Index.module.css -------------------------------------------------------------------------------- /packages/frontend/public/451.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Unavailable For Legal Reasons 6 | 7 | 8 |

Unavailable For Legal Reasons

9 | 10 | 11 | -------------------------------------------------------------------------------- /packages/frontend/public/airdrop/authereum/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/frontend/public/airdrop/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/frontend/public/airdrop/preview/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/frontend/public/airdrop/social-verify/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/frontend/public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/frontend/public/apple-touch-icon.png -------------------------------------------------------------------------------- /packages/frontend/public/authereum-verified/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/frontend/public/cachebust: -------------------------------------------------------------------------------- 1 | this file only exists to trigger a new ipfs build 2 | because github actions masks the output hash after if it's already seen it and that breaks other parts of the build. 3 | If you need to rebuild on github actions, just update the number below to trigger a diff. 4 | 5 | 017 6 | -------------------------------------------------------------------------------- /packages/frontend/public/claim/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/frontend/public/commit-transfers/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/frontend/public/convert/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/frontend/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/frontend/public/favicon.ico -------------------------------------------------------------------------------- /packages/frontend/public/health/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/frontend/public/images/hop_600x200.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/frontend/public/images/hop_600x200.jpg -------------------------------------------------------------------------------- /packages/frontend/public/images/hop_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/frontend/public/images/hop_logo.png -------------------------------------------------------------------------------- /packages/frontend/public/images/hop_logo_192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/frontend/public/images/hop_logo_192x192.png -------------------------------------------------------------------------------- /packages/frontend/public/logo16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/frontend/public/logo16.png -------------------------------------------------------------------------------- /packages/frontend/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/frontend/public/logo192.png -------------------------------------------------------------------------------- /packages/frontend/public/logo32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/frontend/public/logo32.png -------------------------------------------------------------------------------- /packages/frontend/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/frontend/public/logo512.png -------------------------------------------------------------------------------- /packages/frontend/public/pool/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/frontend/public/pools/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/frontend/public/relay/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/frontend/public/rewards/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/frontend/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Allow: / 4 | -------------------------------------------------------------------------------- /packages/frontend/public/send/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/frontend/public/site.webmanifest: -------------------------------------------------------------------------------- 1 | {"name":"","short_name":"","icons":[{"src":"/logo192.png","sizes":"192x192","type":"image/png"},{"src":"/logo512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} -------------------------------------------------------------------------------- /packages/frontend/public/social-verified/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/frontend/public/stake/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/frontend/public/stats/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/frontend/public/whitepaper.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/frontend/public/whitepaper.pdf -------------------------------------------------------------------------------- /packages/frontend/public/withdraw/index.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/frontend/src/abis/index.ts: -------------------------------------------------------------------------------- 1 | export * from './types/index.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/abis/types/index.ts: -------------------------------------------------------------------------------- 1 | /* Autogenerated file. Do not edit manually. */ 2 | /* tslint:disable */ 3 | 4 | export type { ENSToken } from './ENSToken' // eslint-disable-line n/no-missing-import 5 | 6 | export { ENSToken__factory } from './factories/ENSToken__factory.js' 7 | -------------------------------------------------------------------------------- /packages/frontend/src/assets/logos/metamask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/frontend/src/assets/logos/metamask.png -------------------------------------------------------------------------------- /packages/frontend/src/components/AccountDetails/index.tsx: -------------------------------------------------------------------------------- 1 | export { AccountDetails } from '#components/AccountDetails/AccountDetails.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/Alert/index.tsx: -------------------------------------------------------------------------------- 1 | export { Alert } from '#components/Alert/Alert.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/AmmDetails/index.tsx: -------------------------------------------------------------------------------- 1 | export { AmmDetails } from '#components/AmmDetails/AmmDetails.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/AmountSelectorCard/index.tsx: -------------------------------------------------------------------------------- 1 | export { AmountSelectorCard } from '#components/AmountSelectorCard/AmountSelectorCard.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/Banner/index.tsx: -------------------------------------------------------------------------------- 1 | export { Banner } from '#components/Banner/Banner.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/Button/ClipboardCopyButton/index.tsx: -------------------------------------------------------------------------------- 1 | export { ClipboardCopyButton } from '#components/Button/ClipboardCopyButton/ClipboardCopyButton.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/Button/index.tsx: -------------------------------------------------------------------------------- 1 | export { Button } from '#components/Button/Button.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/Footer/index.tsx: -------------------------------------------------------------------------------- 1 | export { Footer } from '#components/Footer/Footer.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/Grid/index.ts: -------------------------------------------------------------------------------- 1 | export * from '#components/Grid/Grid.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/Header/index.tsx: -------------------------------------------------------------------------------- 1 | export { Header } from '#components/Header/Header.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/InfoTooltip/index.ts: -------------------------------------------------------------------------------- 1 | export { InfoTooltip } from '#components/InfoTooltip/InfoTooltip.js' 2 | export { FeeDetails } from '#components/InfoTooltip/FeeDetails.js' 3 | -------------------------------------------------------------------------------- /packages/frontend/src/components/LargeTextField/index.tsx: -------------------------------------------------------------------------------- 1 | export { LargeTextField } from '#components/LargeTextField/LargeTextField.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/Link/index.ts: -------------------------------------------------------------------------------- 1 | export * from '#components/Link/Link.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/Loading/index.ts: -------------------------------------------------------------------------------- 1 | export { Loading } from '#components/Loading/Loading.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/Modal/index.tsx: -------------------------------------------------------------------------------- 1 | export { Modal } from '#components/Modal/Modal.js' 2 | export { StyledModal } from '#components/Modal/StyledModal.js' 3 | -------------------------------------------------------------------------------- /packages/frontend/src/components/NetworkSelector/index.ts: -------------------------------------------------------------------------------- 1 | export { NetworkSelector } from '#components/NetworkSelector/NetworkSelector.js' 2 | export { useNetworkSelectorStyles } from '#components/NetworkSelector/useNetworkSelectorStyles.js' 3 | -------------------------------------------------------------------------------- /packages/frontend/src/components/SmallTextField/index.tsx: -------------------------------------------------------------------------------- 1 | export { SmallTextField } from '#components/SmallTextField/SmallTextField.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/Table/index.ts: -------------------------------------------------------------------------------- 1 | export * from '#components/Table/Table.js' 2 | export * from '#components/Table/RightAlignedData.js' 3 | -------------------------------------------------------------------------------- /packages/frontend/src/components/Transaction/index.ts: -------------------------------------------------------------------------------- 1 | export { default as TxStatusTracker } from './TxStatusTracker.js' 2 | export { default as TransactionsList } from './TransactionsList.js' 3 | export { default as TransactionStatus } from './TransactionStatus.js' 4 | export { useTxStatusStyles } from './useTxStatusStyles.js' 5 | -------------------------------------------------------------------------------- /packages/frontend/src/components/Web3Modal/index.tsx: -------------------------------------------------------------------------------- 1 | export { Web3Modal } from './Web3Modal.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/slider/index.tsx: -------------------------------------------------------------------------------- 1 | export * from '#components/slider/Slider.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/txConfirm/index.tsx: -------------------------------------------------------------------------------- 1 | import TxConfirm from '#components/txConfirm/TxConfirm.js' 2 | 3 | export default TxConfirm 4 | -------------------------------------------------------------------------------- /packages/frontend/src/components/ui/Circle.tsx: -------------------------------------------------------------------------------- 1 | import Box, { BoxProps } from '@mui/material/Box' 2 | import styled from 'styled-components' 3 | 4 | export const Circle = styled(Box)` 5 | display: flex; 6 | align-items: center; 7 | overflow: hidden; 8 | border-radius: 50%; 9 | ` 10 | -------------------------------------------------------------------------------- /packages/frontend/src/config/index.ts: -------------------------------------------------------------------------------- 1 | export * from '#config/config.js' 2 | export * from '#config/addresses.js' 3 | export * from '#config/interfaces.js' 4 | export * from '#config/blocklist.js' 5 | -------------------------------------------------------------------------------- /packages/frontend/src/contexts/AppContext/index.tsx: -------------------------------------------------------------------------------- 1 | import AppContext from '#contexts/AppContext/AppContext.js' 2 | export * from '#contexts/AppContext/AppContext.js' 3 | 4 | export default AppContext 5 | -------------------------------------------------------------------------------- /packages/frontend/src/contexts/AppContext/useAccountDetails.tsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react' 2 | 3 | export type AccountDetails = { 4 | open: boolean 5 | show: (open: boolean) => void 6 | } 7 | 8 | export const useAccountDetails = (): AccountDetails => { 9 | const [open, show] = useState(false) 10 | 11 | return { 12 | open, 13 | show, 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /packages/frontend/src/hooks/useAsyncMemo.tsx: -------------------------------------------------------------------------------- 1 | import { useAsyncMemo } from 'use-async-memo' 2 | 3 | export default useAsyncMemo 4 | -------------------------------------------------------------------------------- /packages/frontend/src/logger/index.ts: -------------------------------------------------------------------------------- 1 | export { default, Logger } from '#logger/logger.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/Airdrop/AirdropPreview/index.ts: -------------------------------------------------------------------------------- 1 | export * from '#pages/Airdrop/AirdropPreview/AirdropPreview.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/Airdrop/AuthereumVerified/index.ts: -------------------------------------------------------------------------------- 1 | import { AuthereumVerified } from '#pages/Airdrop/AuthereumVerified/AuthereumVerified.js' 2 | 3 | export default AuthereumVerified 4 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/Airdrop/AuthereumVerify/index.ts: -------------------------------------------------------------------------------- 1 | import { AuthereumVerify } from '#pages/Airdrop/AuthereumVerify/AuthereumVerify.js' 2 | 3 | export default AuthereumVerify 4 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/Airdrop/SocialVerified/index.ts: -------------------------------------------------------------------------------- 1 | import { SocialVerified } from '#pages/Airdrop/SocialVerified/SocialVerified.js' 2 | 3 | export default SocialVerified 4 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/Airdrop/SocialVerify/index.ts: -------------------------------------------------------------------------------- 1 | import { SocialVerify } from '#pages/Airdrop/SocialVerify/SocialVerify.js' 2 | 3 | export default SocialVerify 4 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/Claim/index.ts: -------------------------------------------------------------------------------- 1 | export * from '#pages/Claim/ChooseDelegate.js' 2 | export * from '#pages/Claim/Claim.js' 3 | export * from '#pages/Claim/Claimed.js' 4 | export * from '#pages/Claim/Claiming.js' 5 | export * from '#pages/Claim/ClaimReview.js' 6 | export * from '#pages/Claim/ClaimStart.js' 7 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/CommitTransfers/index.tsx: -------------------------------------------------------------------------------- 1 | import { CommitTransfers } from './CommitTransfers.js' 2 | 3 | export default CommitTransfers 4 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/Convert/ConvertOption/index.tsx: -------------------------------------------------------------------------------- 1 | import ConvertOption from '#pages/Convert/ConvertOption/ConvertOption.js' 2 | 3 | export default ConvertOption 4 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/Convert/index.tsx: -------------------------------------------------------------------------------- 1 | import Convert from '#pages/Convert/Convert.js' 2 | import ConvertProvider from '#pages/Convert/ConvertContext.js' 3 | import React from 'react' 4 | 5 | const fc = () => ( 6 | 7 | 8 | 9 | ) 10 | export default fc 11 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/Faucet/index.tsx: -------------------------------------------------------------------------------- 1 | import Faucet from '#pages/Faucet/Faucet.js' 2 | import FaucetContext from '#pages/Faucet/FaucetContext.js' 3 | import React from 'react' 4 | 5 | const fc = () => ( 6 | 7 | 8 | 9 | ) 10 | export default fc 11 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/Health/index.tsx: -------------------------------------------------------------------------------- 1 | import Health from '#pages/Health/Health.js' 2 | 3 | export default Health 4 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/Pools/PoolDetails/index.tsx: -------------------------------------------------------------------------------- 1 | export { PoolDetails as default } from '#pages/Pools/PoolDetails/PoolDetails.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/Pools/PoolsOverview/index.tsx: -------------------------------------------------------------------------------- 1 | export { PoolsOverview as default } from '#pages/Pools/PoolsOverview/PoolsOverview.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/Pools/index.tsx: -------------------------------------------------------------------------------- 1 | import PoolDetails from '#pages/Pools/PoolDetails/index.js' 2 | import PoolsProvider from '#pages/Pools/PoolsContext.js' 3 | import React from 'react' 4 | 5 | const fc = () => ( 6 | 7 | 8 | 9 | ) 10 | export default fc 11 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/Relay/index.tsx: -------------------------------------------------------------------------------- 1 | import { Relay } from './Relay.js' 2 | 3 | export default Relay 4 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/Relay/relayer/types.ts: -------------------------------------------------------------------------------- 1 | export enum MessageDirection { 2 | L1_TO_L2 = 0, 3 | L2_TO_L1 = 1 4 | } 5 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/Rewards/index.tsx: -------------------------------------------------------------------------------- 1 | import { Rewards } from '#pages/Rewards/Rewards.js' 2 | 3 | export default Rewards 4 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/Send/index.tsx: -------------------------------------------------------------------------------- 1 | import Send from '#pages/Send/Send.js' 2 | 3 | export default Send 4 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/Stats/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import Stats from '#pages/Stats/Stats.js' 3 | import StatsProvider from '#pages/Stats/StatsContext.js' 4 | 5 | const fc = () => ( 6 | 7 | 8 | 9 | ) 10 | export default fc 11 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/Withdraw/index.tsx: -------------------------------------------------------------------------------- 1 | import { Withdraw } from '#pages/Withdraw/Withdraw.js' 2 | 3 | export default Withdraw 4 | -------------------------------------------------------------------------------- /packages/frontend/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/frontend/src/setupTests.ts: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom' 6 | -------------------------------------------------------------------------------- /packages/frontend/src/theme/index.ts: -------------------------------------------------------------------------------- 1 | export { default as ThemeProvider } from '#theme/ThemeProvider.js' 2 | -------------------------------------------------------------------------------- /packages/frontend/src/utils/bigNumberMax.ts: -------------------------------------------------------------------------------- 1 | import { BigNumber } from 'ethers' 2 | 3 | export function bigNumberMax(a: BigNumber, b: BigNumber) { 4 | if (!a) { 5 | return b 6 | } 7 | if (!b) { 8 | return a 9 | } 10 | 11 | return a?.gt(b) ? a : b 12 | } 13 | -------------------------------------------------------------------------------- /packages/frontend/src/utils/bigNumberMin.ts: -------------------------------------------------------------------------------- 1 | import { BigNumber } from 'ethers' 2 | 3 | export function bigNumberMin(a: BigNumber, b: BigNumber) { 4 | if (!a) { 5 | return b 6 | } 7 | if (!b) { 8 | return a 9 | } 10 | 11 | return a?.lt(b) ? a : b 12 | } 13 | -------------------------------------------------------------------------------- /packages/frontend/src/utils/bridges.ts: -------------------------------------------------------------------------------- 1 | import find from 'lodash/find' 2 | import { HopBridge } from '@hop-protocol/sdk' 3 | 4 | export function findMatchingBridge(bridges: HopBridge[], tokenSymbol?: string) { 5 | return find(bridges, b => b.getTokenSymbol() === tokenSymbol) 6 | } 7 | -------------------------------------------------------------------------------- /packages/frontend/src/utils/capitalize.ts: -------------------------------------------------------------------------------- 1 | import capitalize from 'lodash/capitalize' 2 | 3 | export { capitalize } 4 | -------------------------------------------------------------------------------- /packages/frontend/src/utils/chainIdToHex.ts: -------------------------------------------------------------------------------- 1 | export function chainIdToHex (chainId: number) { 2 | if (!chainId) { 3 | throw new Error('chainIdToHex: chainId is required') 4 | } 5 | 6 | return `0x${chainId.toString(16)}` 7 | } 8 | -------------------------------------------------------------------------------- /packages/frontend/src/utils/getBaseExplorerUrl.ts: -------------------------------------------------------------------------------- 1 | import { networks } from '#config/index.js' 2 | 3 | export const getBaseExplorerUrl = (slug: string) => { 4 | for (const key in networks) { 5 | const v = networks[key] 6 | if (key === slug) { 7 | return v.explorerUrl.replace(/\/$/, '') 8 | } 9 | } 10 | 11 | return '' 12 | } 13 | -------------------------------------------------------------------------------- /packages/frontend/src/utils/getNativeTokenSymbol.ts: -------------------------------------------------------------------------------- 1 | import { ChainSlug, NetworkSlug, getChain } from '@hop-protocol/sdk' 2 | 3 | export function getNativeTokenSymbol (chainSlug: string) { 4 | // The native token is the same on all networks so default to Ethereum 5 | const chain = getChain(NetworkSlug.Mainnet, chainSlug as ChainSlug) 6 | return chain.nativeTokenSymbol 7 | } 8 | -------------------------------------------------------------------------------- /packages/frontend/src/utils/getTransferTimeSeconds.ts: -------------------------------------------------------------------------------- 1 | import { transferTimes } from '#config/index.js' 2 | 3 | export function getTransferTimeSeconds (fromChainSlug: string, toChainSlug: string) { 4 | if (!(fromChainSlug && toChainSlug)) { 5 | return 0 6 | } 7 | const minutes = transferTimes?.[fromChainSlug]?.[toChainSlug] ?? 60 8 | return minutes * 60 9 | } 10 | -------------------------------------------------------------------------------- /packages/frontend/src/utils/prettifyErrorMessage.ts: -------------------------------------------------------------------------------- 1 | export const prettifyErrorMessage = (str: string = ''): string => { 2 | if (!str) { 3 | return '' 4 | } 5 | return str.replace(/.*\[ethjs-query\].*"message":"(.*)"\}.*/, '$1') 6 | } 7 | -------------------------------------------------------------------------------- /packages/frontend/src/utils/shiftBNDecimals.ts: -------------------------------------------------------------------------------- 1 | import { BigNumber } from 'ethers' 2 | 3 | export function shiftBNDecimals(bn: BigNumber, shiftAmount: number): BigNumber { 4 | if (shiftAmount < 0) throw new Error('shiftAmount must be positive') 5 | return bn.mul(BigNumber.from(10).pow(shiftAmount)) 6 | } 7 | -------------------------------------------------------------------------------- /packages/frontend/src/utils/timings.ts: -------------------------------------------------------------------------------- 1 | export function isOlderThanOneHour(timestampMs: number) { 2 | return (Date.now() - (60 * 60 * 1000)) > timestampMs 3 | } 4 | -------------------------------------------------------------------------------- /packages/frontend/src/utils/wait.ts: -------------------------------------------------------------------------------- 1 | export const wait = async (t: number) => { 2 | return new Promise(resolve => setTimeout(() => resolve(null), t)) 3 | } 4 | -------------------------------------------------------------------------------- /packages/frontend/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/frontend/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "include": ["vite.config.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/hop-node/.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | Dockerfile 3 | *.env 4 | *.tsbuildinfo -------------------------------------------------------------------------------- /packages/hop-node/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | dist 3 | yarn.lock 4 | secret.json 5 | .env 6 | *.env 7 | .env* 8 | docker/arbitrum/data 9 | docker/arbitrum/docker-compose.yml 10 | src/scripts 11 | *.dump 12 | *.log 13 | .build-info.json 14 | provider_calls.json 15 | prometheus_pass.txt 16 | *.txt 17 | *.tsbuildinfo 18 | cctp_db_data* 19 | .npmignore 20 | db_data* -------------------------------------------------------------------------------- /packages/hop-node/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.9' 2 | 3 | services: 4 | bonder: 5 | image: hopprotocol/hop-node:latest 6 | env_file: 7 | - docker.env 8 | restart: unless-stopped 9 | logging: 10 | driver: awslogs 11 | options: 12 | awslogs-region: us-east-1 13 | awslogs-group: HopNode 14 | awslogs-create-group: 'true' 15 | -------------------------------------------------------------------------------- /packages/hop-node/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import baseConfig from '../../eslint.config.mjs' 2 | import tseslint from 'typescript-eslint' 3 | 4 | export default tseslint.config( 5 | ...baseConfig 6 | ) -------------------------------------------------------------------------------- /packages/hop-node/jest.config.mjs: -------------------------------------------------------------------------------- 1 | import baseESMConfig from '../../jest.config.esm.mjs' 2 | export default baseESMConfig 3 | -------------------------------------------------------------------------------- /packages/hop-node/src/aws/index.ts: -------------------------------------------------------------------------------- 1 | export * from './AwsSigner.js' 2 | export * from './cloudWatch.js' 3 | export * from './KmsSigner.js' 4 | export * from './LambdaSigner.js' 5 | export * from './parameterStore.js' 6 | export * from './s3Upload.js' -------------------------------------------------------------------------------- /packages/hop-node/src/chains/Chains/arbitrum/ArbitrumFinalityService.ts: -------------------------------------------------------------------------------- 1 | import { AbstractFinalityService, type IFinalityService } from '../../Services/AbstractFinalityService.js' 2 | 3 | export class ArbitrumFinalityService extends AbstractFinalityService implements IFinalityService {} 4 | -------------------------------------------------------------------------------- /packages/hop-node/src/chains/Chains/gnosis/GnosisFinalityService.ts: -------------------------------------------------------------------------------- 1 | import { AbstractFinalityService, type IFinalityService } from '../../Services/AbstractFinalityService.js' 2 | 3 | export class GnosisFinalityService extends AbstractFinalityService implements IFinalityService {} 4 | -------------------------------------------------------------------------------- /packages/hop-node/src/chains/Chains/linea/LineaFinalityService.ts: -------------------------------------------------------------------------------- 1 | import { AbstractFinalityService, type IFinalityService } from '../../Services/AbstractFinalityService.js' 2 | 3 | export class LineaFinalityService extends AbstractFinalityService implements IFinalityService {} 4 | -------------------------------------------------------------------------------- /packages/hop-node/src/chains/Chains/polygon/PolygonFinalityService.ts: -------------------------------------------------------------------------------- 1 | import { AbstractFinalityService, type IFinalityService } from '../../Services/AbstractFinalityService.js' 2 | 3 | export class PolygonFinalityService extends AbstractFinalityService implements IFinalityService {} 4 | -------------------------------------------------------------------------------- /packages/hop-node/src/chains/Chains/scroll/ScrollFinalityService.ts: -------------------------------------------------------------------------------- 1 | import { AbstractFinalityService, type IFinalityService } from '../../Services/AbstractFinalityService.js' 2 | 3 | export class ScrollFinalityService extends AbstractFinalityService implements IFinalityService {} 4 | -------------------------------------------------------------------------------- /packages/hop-node/src/chains/Chains/zksync/ZkSyncFinalityService.ts: -------------------------------------------------------------------------------- 1 | import { AbstractFinalityService, type IFinalityService } from '../../Services/AbstractFinalityService.js' 2 | 3 | export class ZkSyncFinalityService extends AbstractFinalityService implements IFinalityService {} 4 | -------------------------------------------------------------------------------- /packages/hop-node/src/chains/index.ts: -------------------------------------------------------------------------------- 1 | export * from './getChainBridge.js' 2 | export * from './IChainBridge.js' 3 | export { 4 | MessageUnknownError, 5 | MessageInFlightError, 6 | MessageRelayedError, 7 | MessageInvalidError, 8 | } from './Services/AbstractMessageService.js' -------------------------------------------------------------------------------- /packages/hop-node/src/cli/index.ts: -------------------------------------------------------------------------------- 1 | import './cli.js' 2 | -------------------------------------------------------------------------------- /packages/hop-node/src/cli/shared/art.ts: -------------------------------------------------------------------------------- 1 | export const hopArt = ` 2 | __ __ 3 | / / / /___ ____ 4 | / /_/ / __ \\/ __ \\ 5 | / __ / /_/ / /_/ / 6 | /_/ /_/\\____/ .___/ 7 | /_/ 8 | ` 9 | 10 | export const printHopArt = () => console.log(hopArt) 11 | -------------------------------------------------------------------------------- /packages/hop-node/src/cli/shared/index.ts: -------------------------------------------------------------------------------- 1 | export * from './shared.js' 2 | -------------------------------------------------------------------------------- /packages/hop-node/src/cli/showConfig.ts: -------------------------------------------------------------------------------- 1 | import { actionHandler, root } from './shared/index.js' 2 | 3 | root 4 | .command('show-config') 5 | .description('Update config file') 6 | .action(actionHandler(main)) 7 | 8 | async function main (source: any) { 9 | const { config } = source 10 | console.log(JSON.stringify(config, null, 2)) 11 | } 12 | -------------------------------------------------------------------------------- /packages/hop-node/src/config/index.ts: -------------------------------------------------------------------------------- 1 | export * from './config.js' 2 | export { type SignerConfig, CoreEnvironment } from './coreConfig.js' -------------------------------------------------------------------------------- /packages/hop-node/src/constants/index.ts: -------------------------------------------------------------------------------- 1 | export * from './constants.js' 2 | export * from './preRegenesisRootsCommitted.js' 3 | export * from './chainBalanceArchiveData.js' 4 | -------------------------------------------------------------------------------- /packages/hop-node/src/contracts/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './contracts.js' 2 | -------------------------------------------------------------------------------- /packages/hop-node/src/db/index.ts: -------------------------------------------------------------------------------- 1 | export * from './db.js' 2 | -------------------------------------------------------------------------------- /packages/hop-node/src/finality/IFinalityService.ts: -------------------------------------------------------------------------------- 1 | import type { IFinalityStrategy } from './strategies/IFinalityStrategy.js' 2 | 3 | export interface IFinalityService extends IFinalityStrategy { 4 | isCustomBlockNumberImplemented(): boolean 5 | } 6 | -------------------------------------------------------------------------------- /packages/hop-node/src/finality/index.ts: -------------------------------------------------------------------------------- 1 | export * from './FinalityService.js' -------------------------------------------------------------------------------- /packages/hop-node/src/finality/strategies/bonder/ArbitrumStrategy.ts: -------------------------------------------------------------------------------- 1 | import { FinalityStrategy } from '../FinalityStrategy.js' 2 | import type { IFinalityStrategy } from '../IFinalityStrategy.js' 3 | 4 | export class ArbitrumStrategy extends FinalityStrategy implements IFinalityStrategy {} 5 | -------------------------------------------------------------------------------- /packages/hop-node/src/finality/strategies/bonder/EthereumStrategy.ts: -------------------------------------------------------------------------------- 1 | import { FinalityStrategy } from '../FinalityStrategy.js' 2 | import type { IFinalityStrategy } from '../IFinalityStrategy.js' 3 | 4 | export class EthereumStrategy extends FinalityStrategy implements IFinalityStrategy {} 5 | -------------------------------------------------------------------------------- /packages/hop-node/src/finality/strategies/bonder/GnosisStrategy.ts: -------------------------------------------------------------------------------- 1 | import { FinalityStrategy } from '../FinalityStrategy.js' 2 | import type { IFinalityStrategy } from '../IFinalityStrategy.js' 3 | 4 | export class GnosisStrategy extends FinalityStrategy implements IFinalityStrategy {} 5 | -------------------------------------------------------------------------------- /packages/hop-node/src/finality/strategies/collateralized/EthereumStrategy.ts: -------------------------------------------------------------------------------- 1 | import { FinalityStrategy } from '../FinalityStrategy.js' 2 | import type { IFinalityStrategy } from '../IFinalityStrategy.js' 3 | 4 | export class EthereumStrategy extends FinalityStrategy implements IFinalityStrategy {} 5 | -------------------------------------------------------------------------------- /packages/hop-node/src/finality/strategies/default/ArbitrumStrategy.ts: -------------------------------------------------------------------------------- 1 | import { FinalityStrategy } from '../FinalityStrategy.js' 2 | import type { IFinalityStrategy } from '../IFinalityStrategy.js' 3 | 4 | export class ArbitrumStrategy extends FinalityStrategy implements IFinalityStrategy {} 5 | -------------------------------------------------------------------------------- /packages/hop-node/src/finality/strategies/default/EthereumStrategy.ts: -------------------------------------------------------------------------------- 1 | import { FinalityStrategy } from '../FinalityStrategy.js' 2 | import type { IFinalityStrategy } from '../IFinalityStrategy.js' 3 | 4 | export class EthereumStrategy extends FinalityStrategy implements IFinalityStrategy {} 5 | -------------------------------------------------------------------------------- /packages/hop-node/src/finality/strategies/default/GnosisStrategy.ts: -------------------------------------------------------------------------------- 1 | import { FinalityStrategy } from '../FinalityStrategy.js' 2 | import type { IFinalityStrategy } from '../IFinalityStrategy.js' 3 | 4 | export class GnosisStrategy extends FinalityStrategy implements IFinalityStrategy {} 5 | -------------------------------------------------------------------------------- /packages/hop-node/src/finality/strategies/default/OptimismStrategy.ts: -------------------------------------------------------------------------------- 1 | import { FinalityStrategy } from '../FinalityStrategy.js' 2 | import type { IFinalityStrategy } from '../IFinalityStrategy.js' 3 | 4 | export class OptimismStrategy extends FinalityStrategy implements IFinalityStrategy {} 5 | -------------------------------------------------------------------------------- /packages/hop-node/src/finality/strategies/threshold/EthereumStrategy.ts: -------------------------------------------------------------------------------- 1 | import { FinalityStrategy } from '../FinalityStrategy.js' 2 | import type { IFinalityStrategy } from '../IFinalityStrategy.js' 3 | 4 | export class EthereumStrategy extends FinalityStrategy implements IFinalityStrategy {} 5 | -------------------------------------------------------------------------------- /packages/hop-node/src/gasboost/Store.ts: -------------------------------------------------------------------------------- 1 | export interface Store { 2 | update: (key: string, value: any) => Promise 3 | getItem: (key: string) => Promise 4 | deleteItem: (key: string) => Promise 5 | } 6 | -------------------------------------------------------------------------------- /packages/hop-node/src/gasboost/constants.ts: -------------------------------------------------------------------------------- 1 | export const MAX_PRIORITY_FEE_CONFIDENCE_LEVEL = 95 2 | export const INITIAL_TX_GAS_PRICE_MULTIPLIER = 1 3 | export const MAX_GAS_PRICE_MULTIPLIER = 1.25 4 | export const PRIORITY_FEE_PER_GAS_CAP = 20 5 | -------------------------------------------------------------------------------- /packages/hop-node/src/gasboost/index.ts: -------------------------------------------------------------------------------- 1 | export * from './GasBoostSigner.js' 2 | export * from './GasBoostTransaction.js' -------------------------------------------------------------------------------- /packages/hop-node/src/keystore/entropyToMnemonic.ts: -------------------------------------------------------------------------------- 1 | import * as bip39 from 'bip39' 2 | 3 | export const entropyToMnemonic = (entropy: Buffer): string => { 4 | return bip39.entropyToMnemonic(entropy) 5 | } 6 | -------------------------------------------------------------------------------- /packages/hop-node/src/keystore/index.ts: -------------------------------------------------------------------------------- 1 | export * from './entropyToMnemonic.js' 2 | export * from './keystore.js' 3 | -------------------------------------------------------------------------------- /packages/hop-node/src/logger/index.ts: -------------------------------------------------------------------------------- 1 | export { Logger, setLogLevel } from './Logger.js' 2 | -------------------------------------------------------------------------------- /packages/hop-node/src/metrics/index.ts: -------------------------------------------------------------------------------- 1 | export * from './MetricsServer.js' 2 | export * from './metrics.js' 3 | -------------------------------------------------------------------------------- /packages/hop-node/src/notifier/index.ts: -------------------------------------------------------------------------------- 1 | export * from './notifier.js' 2 | -------------------------------------------------------------------------------- /packages/hop-node/src/notifier/interfaces.ts: -------------------------------------------------------------------------------- 1 | export abstract class Notifier { 2 | error (message: string) {} 3 | info (message: string) {} 4 | log (message: string) {} 5 | success (message: string) {} 6 | warn (message: string) {} 7 | } 8 | -------------------------------------------------------------------------------- /packages/hop-node/src/notifier/notifier.ts: -------------------------------------------------------------------------------- 1 | export { SlackClient as Notifier } from './slack.js' 2 | -------------------------------------------------------------------------------- /packages/hop-node/src/prompt/index.ts: -------------------------------------------------------------------------------- 1 | export * from './promptPassphrase.js' 2 | -------------------------------------------------------------------------------- /packages/hop-node/src/provider/index.ts: -------------------------------------------------------------------------------- 1 | export * from './provider.js' 2 | -------------------------------------------------------------------------------- /packages/hop-node/src/swap/index.ts: -------------------------------------------------------------------------------- 1 | export * from './swap.js' 2 | -------------------------------------------------------------------------------- /packages/hop-node/src/swap/types.ts: -------------------------------------------------------------------------------- 1 | export type SwapInput = { 2 | chain: string 3 | fromToken: string 4 | toToken: string 5 | amount: number 6 | max?: boolean 7 | slippage: number 8 | recipient: string 9 | dryMode: boolean 10 | deadline?: number 11 | } 12 | -------------------------------------------------------------------------------- /packages/hop-node/src/swap/uniswap/index.ts: -------------------------------------------------------------------------------- 1 | export * from './uniswap.js' 2 | -------------------------------------------------------------------------------- /packages/hop-node/src/theGraph/getTransferRootsCount.ts: -------------------------------------------------------------------------------- 1 | import getTransferRoots from './getTransferRoots.js' 2 | 3 | async function getTransferRootsCount ( 4 | chain: string, 5 | token: string 6 | ) { 7 | const transferRoots = await getTransferRoots(chain, token) 8 | return transferRoots.length 9 | } 10 | 11 | export default getTransferRootsCount 12 | -------------------------------------------------------------------------------- /packages/hop-node/src/theGraph/getTransfersCount.ts: -------------------------------------------------------------------------------- 1 | import getTransferIds from './getTransferIds.js' 2 | 3 | async function getTransfersCount ( 4 | chain: string, 5 | token: string 6 | ) { 7 | const transferIds = await getTransferIds(chain, token) 8 | return transferIds.length 9 | } 10 | 11 | export default getTransfersCount 12 | -------------------------------------------------------------------------------- /packages/hop-node/src/types/index.ts: -------------------------------------------------------------------------------- 1 | export * from './error.js' 2 | export * from './types.js' -------------------------------------------------------------------------------- /packages/hop-node/src/types/types.ts: -------------------------------------------------------------------------------- 1 | import type { CallOverrides, Event as EthersEvent } from 'ethers' 2 | 3 | export type Event = EthersEvent & { 4 | blockNumber?: number 5 | } 6 | 7 | // Use an interface so that intellisense doesn't ignore our type definition 8 | // https://github.com/microsoft/TypeScript/issues/31940 9 | export interface TxOverrides extends CallOverrides {} -------------------------------------------------------------------------------- /packages/hop-node/src/utils/bigNumberMax.ts: -------------------------------------------------------------------------------- 1 | import type { BigNumber } from 'ethers' 2 | 3 | export function bigNumberMax (a: BigNumber, b: BigNumber): BigNumber { 4 | if (!a) { 5 | return b 6 | } 7 | if (!b) { 8 | return a 9 | } 10 | return a?.gt(b) ? a : b 11 | } 12 | -------------------------------------------------------------------------------- /packages/hop-node/src/utils/bigNumberMin.ts: -------------------------------------------------------------------------------- 1 | import type { BigNumber } from 'ethers' 2 | 3 | export function bigNumberMin (a: BigNumber, b: BigNumber): BigNumber { 4 | if (!a) { 5 | return b 6 | } 7 | if (!b) { 8 | return a 9 | } 10 | return a?.lt(b) ? a : b 11 | } 12 | -------------------------------------------------------------------------------- /packages/hop-node/src/utils/chainSlugToId.ts: -------------------------------------------------------------------------------- 1 | import { config as globalConfig } from '#config/index.js' 2 | 3 | export const chainSlugToId = (network: string): number => { 4 | const chainId = (globalConfig as any).networks[network]?.chainId 5 | if (!chainId) { 6 | throw new Error(`chain ID for ${network} not found`) 7 | } 8 | return chainId 9 | } 10 | -------------------------------------------------------------------------------- /packages/hop-node/src/utils/getBumpedBN.ts: -------------------------------------------------------------------------------- 1 | import { utils } from 'ethers' 2 | import type { BigNumber } from 'ethers' 3 | 4 | export const getBumpedBN = (value: BigNumber, multiplier: number = 1) => { 5 | return value.mul(utils.parseUnits(multiplier.toString(), 100)).div(utils.parseUnits('1', 100)) 6 | } 7 | -------------------------------------------------------------------------------- /packages/hop-node/src/utils/getBumpedGasPrice.ts: -------------------------------------------------------------------------------- 1 | import { getBumpedBN } from './getBumpedBN.js' 2 | import type { BigNumber } from 'ethers' 3 | 4 | export const getBumpedGasPrice = (gasPrice: BigNumber, multiplier: number) => { 5 | return getBumpedBN(gasPrice, multiplier) 6 | } 7 | -------------------------------------------------------------------------------- /packages/hop-node/src/utils/getExponentialBackoffDelayMs.ts: -------------------------------------------------------------------------------- 1 | export const getExponentialBackoffDelayMs = (backoffIndex: number): number => { 2 | // Used for tx retries. Must be long enough for a tx to be processed and confirmed onchain. 3 | return (1 << backoffIndex) * 30 * 1000 4 | } 5 | -------------------------------------------------------------------------------- /packages/hop-node/src/utils/getTransferRootId.ts: -------------------------------------------------------------------------------- 1 | import { utils } from 'ethers' 2 | import type { BigNumber } from 'ethers' 3 | 4 | const getTransferRootId = (rootHash: string, totalAmount: BigNumber) => { 5 | return utils.solidityKeccak256( 6 | ['bytes32', 'uint256'], 7 | [rootHash, totalAmount] 8 | ) 9 | } 10 | 11 | export default getTransferRootId 12 | -------------------------------------------------------------------------------- /packages/hop-node/src/utils/isFetchBadResponseError.ts: -------------------------------------------------------------------------------- 1 | export function isFetchBadResponseError (errMsg: string): boolean { 2 | const badResponseErrorRegex = /(bad response|response error|missing response|processing response error|invalid json response body|FetchError)/i 3 | return badResponseErrorRegex.test(errMsg) 4 | } 5 | -------------------------------------------------------------------------------- /packages/hop-node/src/utils/isFetchConnectionError.ts: -------------------------------------------------------------------------------- 1 | export function isFetchConnectionError (errMsg: string): boolean { 2 | const connectionErrorRegex = /(ETIMEDOUT|ENETUNREACH|ECONNRESET|ECONNREFUSED|SERVER_ERROR|EPROTO|EHOSTUNREACH)/i 3 | return connectionErrorRegex.test(errMsg) 4 | } 5 | -------------------------------------------------------------------------------- /packages/hop-node/src/utils/isFetchExecutionError.ts: -------------------------------------------------------------------------------- 1 | export function isFetchExecutionError (errMsg: string): boolean { 2 | const executionErrorRegex = /(The execution failed due to an exception|execution reverted|VM execution error)/i 3 | return executionErrorRegex.test(errMsg) 4 | } 5 | -------------------------------------------------------------------------------- /packages/hop-node/src/utils/isFetchRateLimitError.ts: -------------------------------------------------------------------------------- 1 | export function isFetchRateLimitError (errMsg: string): boolean { 2 | const rateLimitErrorRegex = /(rate limit|too many concurrent requests|exceeded|socket hang up)/i 3 | return rateLimitErrorRegex.test(errMsg) 4 | } 5 | -------------------------------------------------------------------------------- /packages/hop-node/src/utils/isFetchTimeoutError.ts: -------------------------------------------------------------------------------- 1 | export function isFetchTimeoutError (errMsg: string): boolean { 2 | const timeoutErrorRegex = /(timeout|time-out|time out|timedout|timed out)/i 3 | return timeoutErrorRegex.test(errMsg) 4 | } 5 | -------------------------------------------------------------------------------- /packages/hop-node/src/utils/isHToken.ts: -------------------------------------------------------------------------------- 1 | const hTokens = new Set(['hUSDC', 'hUSDT', 'hDAI', 'hMATIC', 'hETH', 'hHOP', 'hSNX', 'hsUSD', 'hrETH', 'hUNI', 'hMAGIC']) 2 | 3 | function isHToken (tokenSymbol: string) { 4 | return hTokens.has(tokenSymbol) 5 | } 6 | 7 | export default isHToken 8 | -------------------------------------------------------------------------------- /packages/hop-node/src/utils/isL1.ts: -------------------------------------------------------------------------------- 1 | import { ChainSlug } from '@hop-protocol/sdk' 2 | 3 | export const isL1 = (network: string) => { 4 | return network === ChainSlug.Ethereum 5 | } 6 | -------------------------------------------------------------------------------- /packages/hop-node/src/utils/isL1ChainId.ts: -------------------------------------------------------------------------------- 1 | const l1Chains: Record = { 2 | 1: true, 3 | 5: true, 4 | 42: true, 5 | 11155111: true 6 | } 7 | 8 | export const isL1ChainId = (chainId: number | string) => { 9 | return l1Chains[chainId.toString()] ?? false 10 | } 11 | -------------------------------------------------------------------------------- /packages/hop-node/src/utils/isNativeToken.ts: -------------------------------------------------------------------------------- 1 | import { getChainNativeTokenSymbol } from '@hop-protocol/sdk' 2 | 3 | export function isNativeToken (chainId: string, token: string): boolean { 4 | const nativeTokenSymbol = getChainNativeTokenSymbol(chainId) 5 | return nativeTokenSymbol === token 6 | } 7 | -------------------------------------------------------------------------------- /packages/hop-node/src/utils/objectDepth.ts: -------------------------------------------------------------------------------- 1 | const objectDepth = (o: any): number => { 2 | return Object(o) === o ? 1 + Math.max(-1, ...Object.values(o).map(objectDepth)) : 0 3 | } 4 | 5 | export default objectDepth 6 | -------------------------------------------------------------------------------- /packages/hop-node/src/utils/padHex.ts: -------------------------------------------------------------------------------- 1 | import toHex from 'to-hex' 2 | 3 | export function padHex (hex: string) { 4 | return toHex(hex, { evenLength: true, addPrefix: true }) 5 | } 6 | -------------------------------------------------------------------------------- /packages/hop-node/src/utils/wait.ts: -------------------------------------------------------------------------------- 1 | export async function wait (t: number) { 2 | return new Promise(resolve => setTimeout(() => resolve(null), t)) 3 | } 4 | -------------------------------------------------------------------------------- /packages/hop-node/src/wallets/index.ts: -------------------------------------------------------------------------------- 1 | export * from './wallets.js' 2 | -------------------------------------------------------------------------------- /packages/hop-node/src/watchers/classes/IBaseWatcher.ts: -------------------------------------------------------------------------------- 1 | export interface IBaseWatcher { 2 | pollCheck(): Promise 3 | prePollHandler(): boolean 4 | pollHandler(): Promise 5 | postPollHandler(): Promise 6 | 7 | start(): Promise 8 | stop(): Promise 9 | } 10 | -------------------------------------------------------------------------------- /packages/hop-node/test/getBumpedBN.test.ts: -------------------------------------------------------------------------------- 1 | import { BigNumber } from 'ethers' 2 | import { getBumpedBN } from '#utils/getBumpedBN.js' 3 | 4 | test('getBumpedBN', () => { 5 | expect(getBumpedBN(BigNumber.from('20'), 1.5).toString()).toBe(BigNumber.from('30').toString()) 6 | expect(getBumpedBN(BigNumber.from('20'), 2.23456789).toString()).toBe(BigNumber.from('44').toString()) 7 | }) 8 | -------------------------------------------------------------------------------- /packages/hop-node/test/getSubgraphUrl.test.ts: -------------------------------------------------------------------------------- 1 | import getSubgraphUrl from '#utils/getSubgraphUrl.js' 2 | import { ChainSlug } from '@hop-protocol/sdk' 3 | 4 | test('getSubgraphUrl', async () => { 5 | const url = getSubgraphUrl(ChainSlug.Ethereum) 6 | expect(url).toBeTruthy() 7 | }) 8 | -------------------------------------------------------------------------------- /packages/hop-node/test/utils/expectDefined.ts: -------------------------------------------------------------------------------- 1 | export default function expectDefined (arg: T): asserts arg is NonNullable { 2 | expect(arg).toBeDefined() 3 | } 4 | -------------------------------------------------------------------------------- /packages/hop-node/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "rootDir": "./src", 5 | "outDir": "./dist" 6 | }, 7 | "include": ["src"] 8 | } -------------------------------------------------------------------------------- /packages/metabase/.gitignore: -------------------------------------------------------------------------------- 1 | metabase-db 2 | sqlite3.db 3 | db 4 | .npmignore -------------------------------------------------------------------------------- /packages/metabase/docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.9' 2 | services: 3 | metabase: 4 | image: metabase/metabase:latest 5 | container_name: metabase 6 | hostname: metabase 7 | restart: unless-stopped 8 | volumes: 9 | - ./metabase-db:/metabase.db 10 | - ./db/sqlite3.db:/sqlite3.db 11 | ports: 12 | - 3000:3000 13 | -------------------------------------------------------------------------------- /packages/sdk-demo/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/sdk-demo/public/favicon.ico -------------------------------------------------------------------------------- /packages/sdk-demo/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/sdk-demo/public/logo192.png -------------------------------------------------------------------------------- /packages/sdk-demo/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/sdk-demo/public/logo512.png -------------------------------------------------------------------------------- /packages/sdk-demo/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /packages/sdk-demo/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/sdk-demo/src/setupTests.ts: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom' 6 | -------------------------------------------------------------------------------- /packages/sdk-demo/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/sdk-demo/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "include": ["vite.config.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/sdk/.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | -------------------------------------------------------------------------------- /packages/sdk/docs/.nojekyll: -------------------------------------------------------------------------------- 1 | TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. -------------------------------------------------------------------------------- /packages/sdk/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import baseConfig from '../../eslint.config.mjs' 2 | export default baseConfig 3 | -------------------------------------------------------------------------------- /packages/sdk/example/example.js: -------------------------------------------------------------------------------- 1 | const { Hop } = require('../') 2 | const hop = new Hop() 3 | console.log(hop.version) 4 | -------------------------------------------------------------------------------- /packages/sdk/jest.config.mjs: -------------------------------------------------------------------------------- 1 | import baseConfig from '../../jest.config.base.mjs' 2 | export default baseConfig 3 | -------------------------------------------------------------------------------- /packages/sdk/scripts/.gitignore: -------------------------------------------------------------------------------- 1 | *.png 2 | -------------------------------------------------------------------------------- /packages/sdk/src/chains/utils/getMinGasLimit.ts: -------------------------------------------------------------------------------- 1 | import type { ChainSlug, NetworkSlug } from '../types.js' 2 | import { getChain } from '../index.js' 3 | 4 | export function getMinGasLimit (network: NetworkSlug, chain: ChainSlug): number | undefined { 5 | return getChain(network, chain).txOverrides?.minGasLimit 6 | } 7 | -------------------------------------------------------------------------------- /packages/sdk/src/chains/utils/getMinGasPrice.ts: -------------------------------------------------------------------------------- 1 | import type { ChainSlug, NetworkSlug } from '../types.js' 2 | import { getChain } from '../index.js' 3 | 4 | export function getMinGasPrice (network: NetworkSlug, chain: ChainSlug): number | undefined { 5 | return getChain(network, chain).txOverrides?.minGasPrice 6 | } 7 | -------------------------------------------------------------------------------- /packages/sdk/src/chains/utils/getSlugFromChainId.ts: -------------------------------------------------------------------------------- 1 | import type { ChainSlug } from '../types.js' 2 | import { getChainSlug } from '../index.js' 3 | 4 | export function getSlugFromChainId(chainId: string): ChainSlug { 5 | return getChainSlug(chainId) 6 | } 7 | -------------------------------------------------------------------------------- /packages/sdk/src/chains/utils/isValidChainSlug.ts: -------------------------------------------------------------------------------- 1 | import { ChainSlug } from '../types.js' 2 | 3 | // Return a type predicate 4 | // https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates 5 | 6 | export function isValidChainSlug(slug: ChainSlug | string): slug is ChainSlug { 7 | return Object.values(ChainSlug).includes(slug as ChainSlug) 8 | } 9 | -------------------------------------------------------------------------------- /packages/sdk/src/chains/utils/isValidNetworkSlug.ts: -------------------------------------------------------------------------------- 1 | import { NetworkSlug } from '../types.js' 2 | 3 | // Return a type predicate 4 | // https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates 5 | 6 | export function isValidNetworkSlug(slug: NetworkSlug | string): slug is NetworkSlug { 7 | return Object.values(NetworkSlug).includes(slug as NetworkSlug) 8 | } -------------------------------------------------------------------------------- /packages/sdk/src/models/index.ts: -------------------------------------------------------------------------------- 1 | export { TokenModel } from './Token.js' 2 | -------------------------------------------------------------------------------- /packages/sdk/src/multicall/index.ts: -------------------------------------------------------------------------------- 1 | export { Multicall } from './Multicall.js' 2 | -------------------------------------------------------------------------------- /packages/sdk/src/networks/index.ts: -------------------------------------------------------------------------------- 1 | export enum HToken { 2 | hETH = 'hETH', 3 | hMATIC = 'hMATIC', 4 | hUSDC = 'hUSDC', 5 | hUSDT = 'hUSDT', 6 | hDAI = 'hDAI', 7 | hHop = 'hHOP', 8 | hrETH = 'hrETH', 9 | hUNI = 'hUNI', 10 | hMAGIC = 'hMAGIC' 11 | } 12 | -------------------------------------------------------------------------------- /packages/sdk/src/priceFeed/index.ts: -------------------------------------------------------------------------------- 1 | export { PriceFeed, type PriceFeedApiKeys } from './PriceFeed.js' 2 | export { PriceFeedFromS3 } from './PriceFeedFromS3.js' 3 | -------------------------------------------------------------------------------- /packages/sdk/src/provider/index.ts: -------------------------------------------------------------------------------- 1 | export { FallbackProvider } from './Provider.js' 2 | export { RetryProvider } from './Provider.js' 3 | export { rpcProviders } from './metadata.js' 4 | export { type RpcProvider, RpcProviderSlug } from './types.js' 5 | -------------------------------------------------------------------------------- /packages/sdk/src/relayerFee/AbstractRelayerFee.ts: -------------------------------------------------------------------------------- 1 | export abstract class AbstractRelayerFee { 2 | readonly network: string 3 | readonly chain: string 4 | readonly token: string 5 | 6 | constructor (network: string, chain: string, token: string) { 7 | this.network = network 8 | this.chain = chain 9 | this.token = token 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /packages/sdk/src/relayerFee/IRelayerFee.ts: -------------------------------------------------------------------------------- 1 | import { BigNumber } from 'ethers' 2 | 3 | export interface IRelayerFee { 4 | getRelayCost(): Promise 5 | } 6 | -------------------------------------------------------------------------------- /packages/sdk/src/relayerFee/index.ts: -------------------------------------------------------------------------------- 1 | export { RelayerFee } from './RelayerFee.js' 2 | -------------------------------------------------------------------------------- /packages/sdk/src/tokens/utils/getTokenDecimals.ts: -------------------------------------------------------------------------------- 1 | import type { TokenSymbol } from '../types.js' 2 | import { getToken } from '../index.js' 3 | 4 | export const getTokenDecimals = (symbol: TokenSymbol): number => { 5 | return getToken(symbol).decimals 6 | } 7 | -------------------------------------------------------------------------------- /packages/sdk/src/tokens/utils/index.ts: -------------------------------------------------------------------------------- 1 | export { getTokenDecimals } from './getTokenDecimals.js' 2 | export { isValidTokenSymbol } from './isValidTokenSymbol.js' 3 | -------------------------------------------------------------------------------- /packages/sdk/src/utils/getProviderFromUrl.ts: -------------------------------------------------------------------------------- 1 | import { providers } from 'ethers' 2 | import { getProviderWithFallbacks } from '#utils/getProviderWithFallbacks.js' 3 | 4 | export function getProviderFromUrl (rpcUrl: string | string[]): providers.Provider { 5 | const rpcUrls = Array.isArray(rpcUrl) ? rpcUrl : [rpcUrl] 6 | return getProviderWithFallbacks(rpcUrls) 7 | } 8 | -------------------------------------------------------------------------------- /packages/sdk/src/utils/getSubgraphUrl.ts: -------------------------------------------------------------------------------- 1 | import { sdkConfig } from '#config/index.js' 2 | 3 | export function getSubgraphUrl (networkSlug: string, chainSlug: string): string { 4 | const url = sdkConfig[networkSlug]?.chains?.[chainSlug]?.subgraphUrl 5 | if (!url) { 6 | throw new Error(`subgraph url not found for chain ${chainSlug}`) 7 | } 8 | 9 | return url 10 | } 11 | -------------------------------------------------------------------------------- /packages/sdk/src/utils/shiftBNDecimals.ts: -------------------------------------------------------------------------------- 1 | import { BigNumber } from 'ethers' 2 | 3 | export function shiftBNDecimals (bn: BigNumber, shiftAmount: number): BigNumber { 4 | if (shiftAmount < 0) throw new Error('shiftAmount must be positive') 5 | return bn.mul(BigNumber.from(10).pow(shiftAmount)) 6 | } 7 | -------------------------------------------------------------------------------- /packages/sdk/src/utils/wait.ts: -------------------------------------------------------------------------------- 1 | export const wait = async (t: number) => { 2 | return new Promise(resolve => setTimeout(() => resolve(null), t)) 3 | } 4 | -------------------------------------------------------------------------------- /packages/sdk/test/addresses.test.ts: -------------------------------------------------------------------------------- 1 | import * as addresses from '#addresses/index.js' 2 | 3 | test('addresses', () => { 4 | expect(addresses.mainnet.bridges.ETH!.ethereum!.l1Bridge).toBeTruthy() 5 | }) 6 | -------------------------------------------------------------------------------- /packages/sdk/tsconfig.cjs.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "dist/cjs", 5 | "tsBuildInfoFile": "./tsconfig.cjs.tsbuildinfo" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/sdk/tsconfig.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "dist/esm", 5 | "module": "ESNext", 6 | "moduleResolution": "Bundler", 7 | "tsBuildInfoFile": "./tsconfig.esm.tsbuildinfo" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/sdk/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "rootDir": "./src", 5 | "outDir": "./dist" 6 | }, 7 | "include": ["src"] 8 | } -------------------------------------------------------------------------------- /packages/stats-worker/.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | Dockerfile 3 | *.env 4 | -------------------------------------------------------------------------------- /packages/stats-worker/.gitignore: -------------------------------------------------------------------------------- 1 | *.env 2 | dist 3 | build 4 | yarn.lock 5 | _data 6 | generated 7 | sqlite3.db 8 | *.csv 9 | .npmignore -------------------------------------------------------------------------------- /packages/stats-worker/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import baseConfig from '../../eslint.config.mjs' 2 | export default baseConfig 3 | -------------------------------------------------------------------------------- /packages/stats-worker/jest.config.mjs: -------------------------------------------------------------------------------- 1 | import baseConfig from '../../jest.config.base.mjs' 2 | export default baseConfig 3 | -------------------------------------------------------------------------------- /packages/stats-worker/metabase_queries/eth_total.sql: -------------------------------------------------------------------------------- 1 | -- ETH Bonder Total Profit 2 | 3 | select 4 | result3 as profit 5 | from bonder_balances 6 | where 7 | token = 'ETH' 8 | order by timestamp desc 9 | limit 1 10 | -------------------------------------------------------------------------------- /packages/stats-worker/metabase_queries/usdc_total.sql: -------------------------------------------------------------------------------- 1 | select 2 | result3 as profit 3 | from bonder_balances 4 | where 5 | token = 'USDC' 6 | order by timestamp desc 7 | limit 1 8 | -------------------------------------------------------------------------------- /packages/stats-worker/metabase_queries/usdt_total.sql: -------------------------------------------------------------------------------- 1 | select 2 | result3 as profit 3 | from bonder_balances 4 | where 5 | token = 'USDT' 6 | order by timestamp desc 7 | limit 1 8 | -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Bonder Stats/DAI: -------------------------------------------------------------------------------- 1 | select 'DAI' -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Bonder Stats/DAI Bonder Fees - 0x305933e09871D4043b5036e09af794FACB3f6170: -------------------------------------------------------------------------------- 1 | select total_fees_amount as fees, strftime('%m - %d - %Y', datetime(timestamp, 'unixepoch', 'utc')) as day from bonder_fees where token = 'DAI' AND strftime('%Y-%m-%d', datetime(timestamp, 'unixepoch', 'utc')) >= '2022-01-01' -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Bonder Stats/DAI Bonder Tx Fees Spent USD - 0x305933e09871D4043b5036e09af794FACB3f6170: -------------------------------------------------------------------------------- 1 | select total_tx_fees as usd, strftime('%m - %d - %Y', datetime(timestamp, 'unixepoch', 'utc')) as day from bonder_tx_fees where token = 'DAI' AND strftime('%Y-%m-%d', datetime(timestamp, 'unixepoch', 'utc')) >= '2022-01-01' 2 | -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Bonder Stats/ETH: -------------------------------------------------------------------------------- 1 | select 'ETH' -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Bonder Stats/ETH Bonder Fees - 0x710bDa329b2a6224E4B44833DE30F38E7f81d564: -------------------------------------------------------------------------------- 1 | select total_fees_amount as fees, strftime('%m - %d - %Y', datetime(timestamp, 'unixepoch', 'utc')) as day from bonder_fees where token = 'ETH' AND strftime('%Y-%m-%d', datetime(timestamp, 'unixepoch', 'utc')) >= '2022-01-01' -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Bonder Stats/ETH Bonder Tx Fees Spent USD - 0x710bDa329b2a6224E4B44833DE30F38E7f81d564: -------------------------------------------------------------------------------- 1 | select total_tx_fees as usd, strftime('%m - %d - %Y', datetime(timestamp, 'unixepoch', 'utc')) as day from bonder_tx_fees where token = 'ETH' AND strftime('%Y-%m-%d', datetime(timestamp, 'unixepoch', 'utc')) >= '2022-01-01' 2 | -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Bonder Stats/MATIC: -------------------------------------------------------------------------------- 1 | select 'MATIC' -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Bonder Stats/MATIC Bonder APR - 0xd8781ca9163e9f132a4d8392332e64115688013a: -------------------------------------------------------------------------------- 1 | select 2 | ((result * 365) / 6026000.00) as apr 3 | from bonder_balances 4 | where 5 | token = 'MATIC' 6 | order by timestamp desc 7 | limit 1 -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Bonder Stats/MATIC Bonder Fees - 0xd8781ca9163e9f132a4d8392332e64115688013a: -------------------------------------------------------------------------------- 1 | select total_fees_amount as fees, strftime('%m - %d - %Y', datetime(timestamp, 'unixepoch', 'utc')) as day from bonder_fees where token = 'MATIC' AND strftime('%Y-%m-%d', datetime(timestamp, 'unixepoch', 'utc')) >= '2022-01-01' -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Bonder Stats/MATIC Bonder Tx Spent USD - 0xd8781ca9163e9f132a4d8392332e64115688013a: -------------------------------------------------------------------------------- 1 | select total_tx_fees as usd, strftime('%m - %d - %Y', datetime(timestamp, 'unixepoch', 'utc')) as day from bonder_tx_fees where token = 'MATIC' AND strftime('%Y-%m-%d', datetime(timestamp, 'unixepoch', 'utc')) >= '2022-01-01' 2 | -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Bonder Stats/USDC: -------------------------------------------------------------------------------- 1 | select 'USDT' -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Bonder Stats/USDC Bonder Fees - 0xa6a688F107851131F0E1dce493EbBebFAf99203e: -------------------------------------------------------------------------------- 1 | select total_fees_amount as fees, strftime('%m - %d - %Y', datetime(timestamp, 'unixepoch', 'utc')) as day from bonder_fees where token = 'USDC' AND strftime('%Y-%m-%d', datetime(timestamp, 'unixepoch', 'utc')) >= '2022-01-01' -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Bonder Stats/USDC Bonder Tx Fees Spent USD - 0xa6a688F107851131F0E1dce493EbBebFAf99203e: -------------------------------------------------------------------------------- 1 | select total_tx_fees as usd, strftime('%m - %d - %Y', datetime(timestamp, 'unixepoch', 'utc')) as day from bonder_tx_fees where token = 'USDC' AND strftime('%Y-%m-%d', datetime(timestamp, 'unixepoch', 'utc')) >= '2022-01-01' 2 | -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Bonder Stats/USDT Bonder Fees - 0x15ec4512516d980090050fe101de21832c8edfee: -------------------------------------------------------------------------------- 1 | select total_fees_amount as fees, strftime('%m - %d - %Y', datetime(timestamp, 'unixepoch', 'utc')) as day from bonder_fees where token = 'USDT' AND strftime('%Y-%m-%d', datetime(timestamp, 'unixepoch', 'utc')) >= '2022-01-27' -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Bonder Stats/USDT Bonder Tx Fees Spent USD - 0x15ec4512516d980090050fe101de21832c8edfee: -------------------------------------------------------------------------------- 1 | select total_tx_fees as usd, strftime('%m - %d - %Y', datetime(timestamp, 'unixepoch', 'utc')) as day from bonder_tx_fees where token = 'USDT' AND strftime('%Y-%m-%d', datetime(timestamp, 'unixepoch', 'utc')) >= '2022-01-27' 2 | -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/DAI Bonder Stats/DAI Bonder Profit - 0x305933e09871D4043b5036e09af794FACB3f6170: -------------------------------------------------------------------------------- 1 | select 2 | result3 as result 3 | from bonder_balances 4 | where 5 | token = 'DAI' 6 | order by timestamp desc 7 | limit 1 -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/ETH Bonder Stats/ETH Bonder Profit - 0x710bDa329b2a6224E4B44833DE30F38E7f81d564: -------------------------------------------------------------------------------- 1 | select 2 | result3 as profit 3 | from bonder_balances 4 | where 5 | token = 'ETH' 6 | order by timestamp desc 7 | limit 1 8 | -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Arbitrum: -------------------------------------------------------------------------------- 1 | select "Arbitrum" -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Arbitrum DAI Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'arbitrum' and token = 'DAI' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Arbitrum ETH Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'arbitrum' and token = 'ETH' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Arbitrum TVL: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as sum_usd from (select amount_usd from tvl_pool_stats where chain = 'arbitrum' and token in ('USDC', 'USDT', 'DAI', 'ETH') order by timestamp desc limit 4); -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Arbitrum Token TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, token from tvl_pool_stats where chain = 'arbitrum' and token in ('USDC', 'USDT', 'DAI', 'ETH') order by timestamp desc limit 4 -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Arbitrum USDC Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'arbitrum' and token = 'USDC' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Arbitrum USDT Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'arbitrum' and token = 'USDT' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Ethereum: -------------------------------------------------------------------------------- 1 | select "Ethereum" -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Ethereum DAI Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'ethereum' and token = 'DAI' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Ethereum ETH Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'ethereum' and token = 'ETH' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Ethereum MATIC Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'ethereum' and token = 'MATIC' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Ethereum TVL: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as sum_usd from (select amount_usd from tvl_pool_stats where chain = 'ethereum' and token in ('USDC', 'USDT', 'DAI', 'MATIC', 'ETH') order by timestamp desc limit 5); -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Ethereum Token TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, token from tvl_pool_stats where chain = 'ethereum' and token in ('USDC', 'USDT', 'DAI', 'MATIC', 'ETH') order by timestamp desc limit 5 -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Ethereum USDC Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'ethereum' and token = 'USDC' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Ethereum USDT Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'ethereum' and token = 'USDT' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Gnosis: -------------------------------------------------------------------------------- 1 | select "Gnosis" -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/GnosisChain DAI Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'gnosis' and token = 'DAI' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/GnosisChain ETH Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'gnosis' and token = 'ETH' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/GnosisChain MATIC Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'gnosis' and token = 'MATIC' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/GnosisChain TVL: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as sum_usd from (select amount_usd from tvl_pool_stats where chain = 'gnosis' and token in ('USDC', 'USDT', 'DAI', 'MATIC', 'ETH') order by timestamp desc limit 5); -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/GnosisChain Token TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, token from tvl_pool_stats where chain = 'gnosis' and token in ('USDC', 'USDT', 'DAI', 'MATIC', 'ETH') order by timestamp desc limit 5 -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/GnosisChain USDC Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'gnosis' and token = 'USDC' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/GnosisChain USDT Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'gnosis' and token = 'USDT' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Optimism: -------------------------------------------------------------------------------- 1 | select "Optimism" -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Optimism DAI Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'optimism' and token = 'DAI' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Optimism ETH Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'optimism' and token = 'ETH' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Optimism TVL: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as sum_usd from (select amount_usd from tvl_pool_stats where chain = 'optimism' and token in ('USDC', 'USDT', 'DAI', 'ETH') order by timestamp desc limit 4); -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Optimism Token TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, token from tvl_pool_stats where chain = 'optimism' and token in ('USDC', 'USDT', 'DAI', 'ETH') order by timestamp desc limit 4 -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Optimism USDC Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'optimism' and token = 'USDC' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Optimism USDT Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'optimism' and token = 'USDT' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Polygon: -------------------------------------------------------------------------------- 1 | select "Polygon" -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Polygon DAI Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'polygon' and token = 'DAI' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Polygon ETH Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'polygon' and token = 'ETH' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Polygon MATIC Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'polygon' and token = 'MATIC' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Polygon TVL: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as sum_usd from (select amount_usd from tvl_pool_stats where chain = 'polygon' and token in ('USDC', 'USDT', 'DAI', 'MATIC', 'ETH') order by timestamp desc limit 5); -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Polygon Token TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, token from tvl_pool_stats where chain = 'polygon' and token in ('USDC', 'USDT', 'DAI', 'MATIC', 'ETH') order by timestamp desc limit 5 -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Polygon USDC Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'polygon' and token = 'USDC' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/TVL Stats/Polygon USDT Historical TVL: -------------------------------------------------------------------------------- 1 | select amount_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from tvl_pool_stats where timestamp > 1623826800 and chain = 'polygon' and token = 'USDT' order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats (Arbitrum Odyssey)/Accounts Bridging ETH into Arbitrum (Arbitrum Odyssey Week): -------------------------------------------------------------------------------- 1 | select DISTINCT account_address from transfers where "timestamp" > 1655830800 and timestamp < 1656349140 and token = 'ETH' and destination_chain_slug = 'arbitrum' order by account_address -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats (Arbitrum Odyssey)/Daily Volume USD (Arbitrum Odyssey Week): -------------------------------------------------------------------------------- 1 | select date_trunc('day', to_timestamp("timestamp")) as date, sum(amount_usd) as USD from transfers where "timestamp" > 1655830800 and timestamp < 1656349140 group by date_trunc('day', to_timestamp("timestamp")) -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats (Arbitrum Odyssey)/Daily Volume by Token (Arbitrum Odyssey Week): -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as USD, date_trunc('day', to_timestamp("timestamp")) as date from transfers where "timestamp" > 1655830800 and timestamp < 1656349140 group by (token, date_trunc('day', to_timestamp("timestamp"))) -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats (Arbitrum Odyssey)/ETH Total Volume (Arbitrum Odyssey Week): -------------------------------------------------------------------------------- 1 | select sum(amount_formatted) as amount_transferred from transfers where "timestamp" > 1655830800 and timestamp < 1656349140 and token = 'ETH' -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats (Arbitrum Odyssey)/ETH Total Volume USD (Arbitrum Odyssey Week): -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as amount_transferred from transfers where "timestamp" > 1655830800 and timestamp < 1656349140 and token = 'ETH' -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats (Arbitrum Odyssey)/ETH Total Volume from Ethereum to Arbitrum (Arbitrum Odyssey Week): -------------------------------------------------------------------------------- 1 | select sum(amount_formatted) as amount_transferred from transfers where "timestamp" > 1655830800 and timestamp < 1656349140 and token = 'ETH' and source_chain_slug = 'ethereum' and destination_chain_slug = 'arbitrum' -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats (Arbitrum Odyssey)/ETH Total Volume into Arbitrum (Arbitrum Odyssey Week): -------------------------------------------------------------------------------- 1 | select sum(amount_formatted) as amount_transferred from transfers where "timestamp" > 1655830800 and timestamp < 1656349140 and token = 'ETH' and destination_chain_slug = 'arbitrum' -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats (Arbitrum Odyssey)/ETH Total Volume leaving Arbitrum (Arbitrum Odyssey Week): -------------------------------------------------------------------------------- 1 | select sum(amount_formatted) as amount_transferred from transfers where "timestamp" > 1655830800 and timestamp < 1656349140 and token = 'ETH' and source_chain_slug = 'arbitrum' -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats (Arbitrum Odyssey)/ETH Transfers Daily USD Total: -------------------------------------------------------------------------------- 1 | select date_trunc('day', to_timestamp("timestamp")) as date, sum(amount_usd) as USD from transfers where token = 'ETH' group by date_trunc('day', to_timestamp("timestamp")) order by date_trunc('day', to_timestamp("timestamp")) asc -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats (Arbitrum Odyssey)/Lifetime Transfers Count: -------------------------------------------------------------------------------- 1 | select count(*) from transfers; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats (Arbitrum Odyssey)/Spent Daily on Bonder Fees USD (Arbitrum Odyssey Week): -------------------------------------------------------------------------------- 1 | select date_trunc('day', to_timestamp("timestamp")) as date, sum(bonder_fee_usd) as bonder_Fees from transfers where "timestamp" > 1655830800 and timestamp < 1656349140 group by date_trunc('day', to_timestamp("timestamp")) -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats (Arbitrum Odyssey)/Spent on Bonder Fees USD (Arbitrum Odyssey Week): -------------------------------------------------------------------------------- 1 | select sum(bonder_fee_usd) as bonder_fees from transfers where "timestamp" > 1655830800 and timestamp < 1656349140 -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats (Arbitrum Odyssey)/Total Volume USD (Arbitrum Odyssey Week): -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as amount_transferred from transfers where "timestamp" > 1655830800 and timestamp < 1656349140 -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats (Arbitrum Odyssey)/Transfers Count (Arbitrum Odyssey Week): -------------------------------------------------------------------------------- 1 | select count(*) from transfers where "timestamp" > 1655830800 and timestamp < 1656349140 -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats (Arbitrum Odyssey)/Transfers Count by Token (Arbitrum Odyssey Week): -------------------------------------------------------------------------------- 1 | select token, count(*) from transfers where "timestamp" > 1655830800 and timestamp < 1656349140 group by token -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats (Arbitrum Odyssey)/Transfers Daily Count: -------------------------------------------------------------------------------- 1 | select date_trunc('day', to_timestamp("timestamp")) as date, count(*) as "count" from transfers group by date_trunc('day', to_timestamp("timestamp")) order by date_trunc('day', to_timestamp("timestamp")) asc -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats (Arbitrum Odyssey)/Transfers into Arbitrum Count (Arbitrum Odyssey Week): -------------------------------------------------------------------------------- 1 | select source_chain_slug, count(*) as "count" from transfers where "timestamp" > 1655830800 and timestamp < 1656349140 group by (source_chain_slug, destination_chain_slug) having (destination_chain_slug = 'arbitrum') -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Count/Daily Transfers Count in Last 7 Days: -------------------------------------------------------------------------------- 1 | select count(*) as "count", date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Count/Lifetime Transfers Count: -------------------------------------------------------------------------------- 1 | select count(*) from transfers; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Count/Lifetime Transfers Count by Source Chain: -------------------------------------------------------------------------------- 1 | select source_chain_slug, count(*) as "count" from transfers group by source_chain_slug; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Count/Lifetime Transfers Count by Token: -------------------------------------------------------------------------------- 1 | select token, count(*) as "count" from transfers group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Count/Monthly Transfers Count: -------------------------------------------------------------------------------- 1 | select count(*) as "count", date_trunc('month', to_timestamp(timestamp)) as month from transfers where to_timestamp(timestamp) > now() - INTERVAL '24 month' group by month order by month; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Count/Weekly Transfers Count in Last 6 Months: -------------------------------------------------------------------------------- 1 | select count(*) as "count", date_trunc('week', to_timestamp(timestamp)) as week from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 month' group by week order by week; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total from transfers; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD By Destination Chain: -------------------------------------------------------------------------------- 1 | select destination_chain_slug, sum(amount_usd) as total_usd from transfers group by destination_chain_slug; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD By Source Chain: -------------------------------------------------------------------------------- 1 | select source_chain_slug, sum(amount_usd) as total_usd from transfers group by source_chain_slug; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD By Source Chain from MetaMask Portfolio: -------------------------------------------------------------------------------- 1 | select source_chain_slug, sum(amount_usd) as total_usd from transfers where integration_partner = 'metamask' group by source_chain_slug -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD By Source Chain from Socket: -------------------------------------------------------------------------------- 1 | select source_chain_slug, sum(amount_usd) as total_usd from transfers where integration_partner = 'socket' group by source_chain_slug -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD From Arbitrum to Destination Chain: -------------------------------------------------------------------------------- 1 | select destination_chain_slug, sum(amount_usd) as total_usd from transfers where source_chain_slug = 'arbitrum' group by destination_chain_slug; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD From Ethereum to Destination Chain: -------------------------------------------------------------------------------- 1 | select destination_chain_slug, sum(amount_usd) as total_usd from transfers where source_chain_slug = 'ethereum' group by destination_chain_slug; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD From Gnosis Chain to Destination Chain: -------------------------------------------------------------------------------- 1 | select destination_chain_slug, sum(amount_usd) as total_usd from transfers where source_chain_slug = 'gnosis' group by destination_chain_slug; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD From Optimism to Destination Chain: -------------------------------------------------------------------------------- 1 | select destination_chain_slug, sum(amount_usd) as total_usd from transfers where source_chain_slug = 'optimism' group by destination_chain_slug; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD From Polygon to Destination Chain: -------------------------------------------------------------------------------- 1 | select destination_chain_slug, sum(amount_usd) as total_usd from transfers where source_chain_slug = 'polygon' group by destination_chain_slug; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD by Token: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD by Token by Arbitrum as Destination Chain: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where destination_chain_slug = 'arbitrum' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD by Token by Arbitrum as Source Chain: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where source_chain_slug = 'arbitrum' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD by Token by Ethereum as Destination Chain: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where destination_chain_slug = 'ethereum' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD by Token by Ethereum as Source Chain: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where source_chain_slug = 'ethereum' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD by Token by Gnosis Chain as Destination Chain: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where destination_chain_slug = 'gnosis' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD by Token by Gnosis Chain as Source Chain: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where source_chain_slug = 'gnosis' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD by Token by Optimism as Destination Chain: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where destination_chain_slug = 'optimism' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD by Token by Optimism as Source Chain: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where source_chain_slug = 'optimism' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD by Token by Polygon as Destination Chain: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where destination_chain_slug = 'polygon' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD by Token by Polygon as Source Chain: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where source_chain_slug = 'polygon' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD by Token from MetaMask Portfolio: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where integration_partner = 'metamask' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Cumulative Volume/Transfers Cumulative Volume USD by Token from Socket: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where integration_partner = 'socket' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Daily Volume/Sum Chain Daily Volume Last 7 Days: -------------------------------------------------------------------------------- 1 | select chain, sum(amount_usd) as total_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from volume_stats where datetime(timestamp, 'unixepoch', 'utc') > DATETIME('now', '-7 day') group by chain, timestamp order by timestamp; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Daily Volume/Transfers Daily Volume USD Historical Bar Chart: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 month' group by token, day order by day -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Daily Volume/Transfers Daily Volume USD by Arbitrum as Source Chain in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where source_chain_slug = 'arbitrum' and to_timestamp(timestamp) > now() - INTERVAL '6 day' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Daily Volume/Transfers Daily Volume USD by DAI Token in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' and token = 'DAI' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Daily Volume/Transfers Daily Volume USD by Destination Chain in Last 7 Days: -------------------------------------------------------------------------------- 1 | select destination_chain_slug, sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' group by destination_chain_slug, day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Daily Volume/Transfers Daily Volume USD by ETH Token in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' and token = 'ETH' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Daily Volume/Transfers Daily Volume USD by Ethereum as Source Chain in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where source_chain_slug = 'ethereum' and to_timestamp(timestamp) > now() - INTERVAL '6 day' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Daily Volume/Transfers Daily Volume USD by Gnosis Chain as Source Chain in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where source_chain_slug = 'gnosis' and to_timestamp(timestamp) > now() - INTERVAL '6 day' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Daily Volume/Transfers Daily Volume USD by HOP Token in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' and token = 'HOP' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Daily Volume/Transfers Daily Volume USD by MATIC Token in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' and token = 'MATIC' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Daily Volume/Transfers Daily Volume USD by Optimism as Source Chain in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where source_chain_slug = 'optimism' and to_timestamp(timestamp) > now() - INTERVAL '6 day' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Daily Volume/Transfers Daily Volume USD by Polygon as Source Chain in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where source_chain_slug = 'polygon' and to_timestamp(timestamp) > now() - INTERVAL '6 day' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Daily Volume/Transfers Daily Volume USD by SNX Token in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' and token = 'SNX' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Daily Volume/Transfers Daily Volume USD by Source Chain in Last 7 Days: -------------------------------------------------------------------------------- 1 | select source_chain_slug, sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' group by source_chain_slug, day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Daily Volume/Transfers Daily Volume USD by Token in Last 7 Days: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' group by token, day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Daily Volume/Transfers Daily Volume USD by USDC Token in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' and token = 'USDC' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Daily Volume/Transfers Daily Volume USD by USDT Token in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' and token = 'USDT' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Daily Volume/Transfers Daily Volume USD in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Integration Partners/Daily Volume USD by Token from MetaMask Portfolio: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as USD, date_trunc('day', to_timestamp("timestamp")) as date from transfers where integration_partner = 'metamask' and "timestamp" > 1667894400 group by (token, date_trunc('day', to_timestamp("timestamp"))) -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Integration Partners/Daily Volume USD by Token from Socket: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as USD, date_trunc('day', to_timestamp("timestamp")) as date from transfers where integration_partner = 'socket' and "timestamp" > 1667894400 group by (token, date_trunc('day', to_timestamp("timestamp"))) -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Integration Partners/Transfers Cumulative Volume USD By Integration Partners Pie Chart: -------------------------------------------------------------------------------- 1 | select integration_partner, sum(amount_usd) as total_usd from transfers where timestamp > 1667894400 and integration_partner IS NOT NULL and integration_partner != '' group by integration_partner -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Integration Partners/Transfers Cumulative Volume USD By Source Chain from MetaMask Portfolio: -------------------------------------------------------------------------------- 1 | select source_chain_slug, sum(amount_usd) as total_usd from transfers where integration_partner = 'metamask' group by source_chain_slug -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Integration Partners/Transfers Cumulative Volume USD By Source Chain from Socket: -------------------------------------------------------------------------------- 1 | select source_chain_slug, sum(amount_usd) as total_usd from transfers where integration_partner = 'socket' group by source_chain_slug -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Integration Partners/Transfers Cumulative Volume USD by Token from MetaMask Portfolio: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where integration_partner = 'metamask' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Integration Partners/Transfers Cumulative Volume USD by Token from Socket: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where integration_partner = 'socket' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Integration Partners/Transfers Daily Volume USD from MetaMask Portfolio in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where integration_partner = 'metamask' and to_timestamp(timestamp) > now() - INTERVAL '6 day' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Integration Partners/Transfers Daily Volume USD from Socket in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where integration_partner = 'socket' and to_timestamp(timestamp) > now() - INTERVAL '6 day' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Monthly Volume/Transfers Monthly Volume USD: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('month', to_timestamp(timestamp)) as month from transfers where to_timestamp(timestamp) > now() - INTERVAL '24 month' group by month order by month; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Monthly Volume/Transfers Monthly Volume USD by DAI Token: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('month', to_timestamp(timestamp)) as month from transfers where token = 'DAI' and to_timestamp(timestamp) > now() - INTERVAL '24 month' group by month order by month; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Monthly Volume/Transfers Monthly Volume USD by ETH Token: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('month', to_timestamp(timestamp)) as month from transfers where token = 'ETH' and to_timestamp(timestamp) > now() - INTERVAL '24 month' group by month order by month; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Monthly Volume/Transfers Monthly Volume USD by HOP Token: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('month', to_timestamp(timestamp)) as month from transfers where token = 'HOP' and to_timestamp(timestamp) > now() - INTERVAL '24 month' group by month order by month; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Monthly Volume/Transfers Monthly Volume USD by MATIC Token: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('month', to_timestamp(timestamp)) as month from transfers where token = 'MATIC' and to_timestamp(timestamp) > now() - INTERVAL '24 month' group by month order by month; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Monthly Volume/Transfers Monthly Volume USD by SNX Token: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('month', to_timestamp(timestamp)) as month from transfers where token = 'SNX' and to_timestamp(timestamp) > now() - INTERVAL '24 month' group by month order by month; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Monthly Volume/Transfers Monthly Volume USD by USDC Token: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('month', to_timestamp(timestamp)) as month from transfers where token = 'USDC' and to_timestamp(timestamp) > now() - INTERVAL '24 month' group by month order by month; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Monthly Volume/Transfers Monthly Volume USD by USDT Token: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('month', to_timestamp(timestamp)) as month from transfers where token = 'USDT' and to_timestamp(timestamp) > now() - INTERVAL '24 month' group by month order by month; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Weekly Volume/Transfers Weekly Volume USD by DAI Token in Last 6 Months: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('week', to_timestamp(timestamp)) as week from transfers where token = 'DAI' and to_timestamp(timestamp) > now() - INTERVAL '6 month' group by week order by week; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Weekly Volume/Transfers Weekly Volume USD by ETH Token in Last 6 Months: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('week', to_timestamp(timestamp)) as week from transfers where token = 'ETH' and to_timestamp(timestamp) > now() - INTERVAL '6 month' group by week order by week; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Weekly Volume/Transfers Weekly Volume USD by HOP Token in Last 6 Months: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('week', to_timestamp(timestamp)) as week from transfers where token = 'HOP' and to_timestamp(timestamp) > now() - INTERVAL '6 month' group by week order by week; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Weekly Volume/Transfers Weekly Volume USD by MATIC Token in Last 6 Months: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('week', to_timestamp(timestamp)) as week from transfers where token = 'MATIC' and to_timestamp(timestamp) > now() - INTERVAL '6 month' group by week order by week; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Weekly Volume/Transfers Weekly Volume USD by SNX Token Last 6 Months: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('week', to_timestamp(timestamp)) as week from transfers where token = 'SNX' and to_timestamp(timestamp) > now() - INTERVAL '6 month' group by week order by week; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Weekly Volume/Transfers Weekly Volume USD by USDC Token in Last 6 Months: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('week', to_timestamp(timestamp)) as week from transfers where token = 'USDC' and to_timestamp(timestamp) > now() - INTERVAL '6 month' group by week order by week; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Weekly Volume/Transfers Weekly Volume USD by USDT Token in Last 6 Months: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('week', to_timestamp(timestamp)) as week from transfers where token = 'USDT' and to_timestamp(timestamp) > now() - INTERVAL '6 month' group by week order by week; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats - Weekly Volume/Transfers Weekly Volume USD in Last 6 Months: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('week', to_timestamp(timestamp)) as week from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 month' group by week order by week; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Daily Transfers Count in Last 7 Days: -------------------------------------------------------------------------------- 1 | select count(*) as "count", date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Daily Volume USD by Source Chain from LI.FI: -------------------------------------------------------------------------------- 1 | select source_chain_slug, sum(amount_usd) as USD, date_trunc('day', to_timestamp("timestamp")) as date from transfers where integration_partner = 'lifi' and "timestamp" > 1667894400 group by (source_chain_slug, date_trunc('day', to_timestamp("timestamp"))) -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Daily Volume USD by Source Chain from MetaMask Portfolio: -------------------------------------------------------------------------------- 1 | select source_chain_slug, sum(amount_usd) as USD, date_trunc('day', to_timestamp("timestamp")) as date from transfers where integration_partner = 'metamask' and "timestamp" > 1667894400 group by (source_chain_slug, date_trunc('day', to_timestamp("timestamp"))) -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Daily Volume USD by Source Chain from Socket: -------------------------------------------------------------------------------- 1 | select source_chain_slug, sum(amount_usd) as USD, date_trunc('day', to_timestamp("timestamp")) as date from transfers where integration_partner = 'socket' and "timestamp" > 1667894400 group by (source_chain_slug, date_trunc('day', to_timestamp("timestamp"))) -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Daily Volume USD by Token from MetaMask Portfolio: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as USD, date_trunc('day', to_timestamp("timestamp")) as date from transfers where integration_partner = 'metamask' and "timestamp" > 1667894400 group by (token, date_trunc('day', to_timestamp("timestamp"))) -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Daily Volume USD by Token from Socket: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as USD, date_trunc('day', to_timestamp("timestamp")) as date from transfers where integration_partner = 'socket' and "timestamp" > 1667894400 group by (token, date_trunc('day', to_timestamp("timestamp"))) -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Lifetime Transfers Count: -------------------------------------------------------------------------------- 1 | select count(*) from transfers; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Lifetime Transfers Count by Source Chain: -------------------------------------------------------------------------------- 1 | select source_chain_slug, count(*) as "count" from transfers group by source_chain_slug; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Lifetime Transfers Count by Token: -------------------------------------------------------------------------------- 1 | select token, count(*) as "count" from transfers group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Monthly Transfers Count: -------------------------------------------------------------------------------- 1 | select count(*) as "count", date_trunc('month', to_timestamp(timestamp)) as month from transfers where to_timestamp(timestamp) > now() - INTERVAL '24 month' group by month order by month; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total from transfers; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD By Destination Chain: -------------------------------------------------------------------------------- 1 | select destination_chain_slug, sum(amount_usd) as total_usd from transfers group by destination_chain_slug; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD By Source Chain: -------------------------------------------------------------------------------- 1 | select source_chain_slug, sum(amount_usd) as total_usd from transfers group by source_chain_slug; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD By Source Chain from MetaMask Portfolio: -------------------------------------------------------------------------------- 1 | select source_chain_slug, sum(amount_usd) as total_usd from transfers where integration_partner = 'metamask' group by source_chain_slug -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD By Source Chain from Socket: -------------------------------------------------------------------------------- 1 | select source_chain_slug, sum(amount_usd) as total_usd from transfers where integration_partner = 'socket' group by source_chain_slug -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD From Arbitrum to Destination Chain: -------------------------------------------------------------------------------- 1 | select destination_chain_slug, sum(amount_usd) as total_usd from transfers where source_chain_slug = 'arbitrum' group by destination_chain_slug; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD From Ethereum to Destination Chain: -------------------------------------------------------------------------------- 1 | select destination_chain_slug, sum(amount_usd) as total_usd from transfers where source_chain_slug = 'ethereum' group by destination_chain_slug; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD From Gnosis Chain to Destination Chain: -------------------------------------------------------------------------------- 1 | select destination_chain_slug, sum(amount_usd) as total_usd from transfers where source_chain_slug = 'gnosis' group by destination_chain_slug; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD From Optimism to Destination Chain: -------------------------------------------------------------------------------- 1 | select destination_chain_slug, sum(amount_usd) as total_usd from transfers where source_chain_slug = 'optimism' group by destination_chain_slug; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD From Polygon to Destination Chain: -------------------------------------------------------------------------------- 1 | select destination_chain_slug, sum(amount_usd) as total_usd from transfers where source_chain_slug = 'polygon' group by destination_chain_slug; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD by Token: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD by Token by Arbitrum as Destination Chain: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where destination_chain_slug = 'arbitrum' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD by Token by Arbitrum as Source Chain: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where source_chain_slug = 'arbitrum' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD by Token by Ethereum as Destination Chain: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where destination_chain_slug = 'ethereum' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD by Token by Ethereum as Source Chain: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where source_chain_slug = 'ethereum' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD by Token by Gnosis Chain as Destination Chain: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where destination_chain_slug = 'gnosis' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD by Token by Gnosis Chain as Source Chain: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where source_chain_slug = 'gnosis' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD by Token by Optimism as Destination Chain: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where destination_chain_slug = 'optimism' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD by Token by Optimism as Source Chain: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where source_chain_slug = 'optimism' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD by Token by Polygon as Destination Chain: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where destination_chain_slug = 'polygon' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD by Token by Polygon as Source Chain: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where source_chain_slug = 'polygon' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD by Token from MetaMask Portfolio: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where integration_partner = 'metamask' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Cumulative Volume USD by Token from Socket: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from transfers where integration_partner = 'socket' group by token; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD by Arbitrum as Source Chain in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where source_chain_slug = 'arbitrum' and to_timestamp(timestamp) > now() - INTERVAL '6 day' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD by DAI Token in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' and token = 'DAI' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD by Destination Chain in Last 7 Days: -------------------------------------------------------------------------------- 1 | select destination_chain_slug, sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' group by destination_chain_slug, day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD by ETH Token in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' and token = 'ETH' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD by Ethereum as Source Chain in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where source_chain_slug = 'ethereum' and to_timestamp(timestamp) > now() - INTERVAL '6 day' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD by Gnosis Chain as Source Chain in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where source_chain_slug = 'gnosis' and to_timestamp(timestamp) > now() - INTERVAL '6 day' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD by HOP Token in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' and token = 'HOP' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD by MATIC Token in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' and token = 'MATIC' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD by Optimism as Source Chain in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where source_chain_slug = 'optimism' and to_timestamp(timestamp) > now() - INTERVAL '6 day' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD by Polygon as Source Chain in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where source_chain_slug = 'polygon' and to_timestamp(timestamp) > now() - INTERVAL '6 day' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD by SNX Token in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' and token = 'SNX' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD by Source Chain in Last 7 Days: -------------------------------------------------------------------------------- 1 | select source_chain_slug, sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' group by source_chain_slug, day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD by Token By Arbitrum as Source Chain in Last 6 Months: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where source_chain_slug = 'arbitrum' and to_timestamp(timestamp) > now() - INTERVAL '5 month' group by token, day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD by Token By Ethereum as Source Chain in Last 6 Months: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where source_chain_slug = 'ethereum' and to_timestamp(timestamp) > now() - INTERVAL '5 month' group by token, day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD by Token By Gnosis Chain as Source Chain in Last 6 Months: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where source_chain_slug = 'gnosis' and to_timestamp(timestamp) > now() - INTERVAL '5 month' group by token, day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD by Token By Optimism as Source Chain in Last 6 Months: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where source_chain_slug = 'optimism' and to_timestamp(timestamp) > now() - INTERVAL '5 month' group by token, day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD by Token By Polygon as Source Chain in Last 6 Months: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where source_chain_slug = 'polygon' and to_timestamp(timestamp) > now() - INTERVAL '5 month' group by token, day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD by Token in Last 6 Months: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '5 month' group by token, day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD by Token in Last 7 Days: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' group by token, day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD by USDC Token in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' and token = 'USDC' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD by USDT Token in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' and token = 'USDT' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD from MetaMask Portfolio in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where integration_partner = 'metamask' and to_timestamp(timestamp) > now() - INTERVAL '6 day' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD from Socket in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where integration_partner = 'socket' and to_timestamp(timestamp) > now() - INTERVAL '6 day' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Daily Volume USD in Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('day', to_timestamp(timestamp)) as day from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 day' group by day order by day; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Monthly Volume USD: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('month', to_timestamp(timestamp)) as month from transfers where to_timestamp(timestamp) > now() - INTERVAL '24 month' group by month order by month; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Monthly Volume USD by DAI Token: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('month', to_timestamp(timestamp)) as month from transfers where token = 'DAI' and to_timestamp(timestamp) > now() - INTERVAL '24 month' group by month order by month; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Monthly Volume USD by ETH Token: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('month', to_timestamp(timestamp)) as month from transfers where token = 'ETH' and to_timestamp(timestamp) > now() - INTERVAL '24 month' group by month order by month; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Monthly Volume USD by HOP Token: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('month', to_timestamp(timestamp)) as month from transfers where token = 'HOP' and to_timestamp(timestamp) > now() - INTERVAL '24 month' group by month order by month; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Monthly Volume USD by MATIC Token: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('month', to_timestamp(timestamp)) as month from transfers where token = 'MATIC' and to_timestamp(timestamp) > now() - INTERVAL '24 month' group by month order by month; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Monthly Volume USD by SNX Token: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('month', to_timestamp(timestamp)) as month from transfers where token = 'SNX' and to_timestamp(timestamp) > now() - INTERVAL '24 month' group by month order by month; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Monthly Volume USD by USDC Token: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('month', to_timestamp(timestamp)) as month from transfers where token = 'USDC' and to_timestamp(timestamp) > now() - INTERVAL '24 month' group by month order by month; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Monthly Volume USD by USDT Token: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('month', to_timestamp(timestamp)) as month from transfers where token = 'USDT' and to_timestamp(timestamp) > now() - INTERVAL '24 month' group by month order by month; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Weekly Volume USD by DAI Token in Last 6 Months: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('week', to_timestamp(timestamp)) as week from transfers where token = 'DAI' and to_timestamp(timestamp) > now() - INTERVAL '6 month' group by week order by week; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Weekly Volume USD by ETH Token in Last 6 Months: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('week', to_timestamp(timestamp)) as week from transfers where token = 'ETH' and to_timestamp(timestamp) > now() - INTERVAL '6 month' group by week order by week; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Weekly Volume USD by HOP Token in Last 6 Months: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('week', to_timestamp(timestamp)) as week from transfers where token = 'HOP' and to_timestamp(timestamp) > now() - INTERVAL '6 month' group by week order by week; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Weekly Volume USD by MATIC Token in Last 6 Months: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('week', to_timestamp(timestamp)) as week from transfers where token = 'MATIC' and to_timestamp(timestamp) > now() - INTERVAL '6 month' group by week order by week; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Weekly Volume USD by USDC Token in Last 6 Months: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('week', to_timestamp(timestamp)) as week from transfers where token = 'USDC' and to_timestamp(timestamp) > now() - INTERVAL '6 month' group by week order by week; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Weekly Volume USD by USDT Token in Last 6 Months: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('week', to_timestamp(timestamp)) as week from transfers where token = 'USDT' and to_timestamp(timestamp) > now() - INTERVAL '6 month' group by week order by week; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Transfers Weekly Volume USD in Last 6 Months: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, date_trunc('week', to_timestamp(timestamp)) as week from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 month' group by week order by week; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Transfer Stats/Weekly Transfers Count in Last 6 Months: -------------------------------------------------------------------------------- 1 | select count(*) as "count", date_trunc('week', to_timestamp(timestamp)) as week from transfers where to_timestamp(timestamp) > now() - INTERVAL '6 month' group by week order by week; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/USDC Bonder Stats/USDC Bonder Profit - 0xa6a688F107851131F0E1dce493EbBebFAf99203e: -------------------------------------------------------------------------------- 1 | select 2 | result3 as profit 3 | from bonder_balances 4 | where 5 | token = 'USDC' 6 | order by timestamp desc 7 | limit 1 8 | -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/USDT Bonder Stats/USDT Bonder Profit 0x15ec4512516d980090050fe101de21832c8edfee: -------------------------------------------------------------------------------- 1 | select 2 | result3 as profit 3 | from bonder_balances 4 | where 5 | token = 'USDT' 6 | order by timestamp desc 7 | limit 1 8 | -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Arbitrum: -------------------------------------------------------------------------------- 1 | select "Arbitrum" -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Arbitrum Token Cumulative Volume: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from volume_stats where chain = 'arbitrum' group by token order by timestamp; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Chain Cumulative Volume: -------------------------------------------------------------------------------- 1 | select chain, sum(amount_usd) as total_usd from volume_stats group by chain order by timestamp; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Cumulative: -------------------------------------------------------------------------------- 1 | select "Cumulative" -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Cumulative Volume: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd from volume_stats order by timestamp; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Cumulative Volume Chart: -------------------------------------------------------------------------------- 1 | select day, total_usd from (select timestamp, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day, sum(amount_usd) OVER (order by timestamp asc) as total_usd from volume_stats order by timestamp desc) group by day order by timestamp asc; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Daily: -------------------------------------------------------------------------------- 1 | select "Daily" -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/ETH Sum Daily Volume Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from volume_stats where token = 'ETH' and datetime(timestamp, 'unixepoch', 'utc') > DATETIME('now', '-7 day') group by day, timestamp order by timestamp; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/ETH Sum Weekly Volume: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as week from volume_stats where token = 'ETH' group by strftime('%W', datetime(timestamp, 'unixepoch', 'utc')) order by timestamp; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Ethereum: -------------------------------------------------------------------------------- 1 | select "Ethereum" -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Ethereum Token Cumulative Volume: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from volume_stats where chain = 'mainnet' group by token order by timestamp; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Gnosis: -------------------------------------------------------------------------------- 1 | select "Gnosis" -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/GnosisChain Token Cumulative Volume: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from volume_stats where chain = 'gnosis' group by token order by timestamp; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Historical Token Daily Volume: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from volume_stats where datetime(timestamp, 'unixepoch', 'utc') >= date('now','start of month','-6 months') group by token, timestamp order by timestamp -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Monthly: -------------------------------------------------------------------------------- 1 | select "Monthly" -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Optimism: -------------------------------------------------------------------------------- 1 | select "Optimism" -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Optimism Token Cumulative Volume: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from volume_stats where chain = 'optimism' group by token order by timestamp; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Polygon: -------------------------------------------------------------------------------- 1 | select "Polygon" -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Polygon Sum Token Daily Volume Last 7 Days: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from volume_stats where datetime(timestamp, 'unixepoch', 'utc') > DATETIME('now', '-7 day') and chain = 'polygon' group by token, timestamp order by timestamp; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Polygon Token Cumulative Volume: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from volume_stats where chain = 'polygon' group by token order by timestamp; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Sum Chain Daily Volume Last 7 Days: -------------------------------------------------------------------------------- 1 | select chain, sum(amount_usd) as total_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from volume_stats where datetime(timestamp, 'unixepoch', 'utc') > DATETIME('now', '-7 day') group by chain, timestamp order by timestamp; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Sum Daily Volume Last 7 Days: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from volume_stats where datetime(timestamp, 'unixepoch', 'utc') > DATETIME('now', '-7 day') group by day, timestamp order by timestamp; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Sum Monthly Volume: -------------------------------------------------------------------------------- 1 | select sum(amount_usd) as total_usd, strftime('%m-%Y ', datetime(timestamp, 'unixepoch', 'utc')) as month from volume_stats where datetime(timestamp, 'unixepoch', 'utc') >= date('now','start of month','-12 months') group by strftime('%m-%Y', datetime(timestamp, 'unixepoch', 'utc')) order by timestamp; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Sum Token Daily Volume Last 7 Days: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd, strftime('%m - %d - %Y ', datetime(timestamp, 'unixepoch', 'utc')) as day from volume_stats where datetime(timestamp, 'unixepoch', 'utc') > DATETIME('now', '-7 day') group by token, timestamp order by timestamp; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Token Cumulative Volume: -------------------------------------------------------------------------------- 1 | select token, sum(amount_usd) as total_usd from volume_stats group by token order by timestamp; -------------------------------------------------------------------------------- /packages/stats-worker/scripts/downloaded_dashboard_queries/Volume Stats/Weekly: -------------------------------------------------------------------------------- 1 | select "Weekly" -------------------------------------------------------------------------------- /packages/stats-worker/src/data/weth_addresses.json: -------------------------------------------------------------------------------- 1 | { 2 | "wethAddresses": { 3 | "arbitrum": "0x82af49447d8a07e3bd95bd0d56f35241523fbab1" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /packages/stats-worker/src/utils/getDefaultRpcProvider.ts: -------------------------------------------------------------------------------- 1 | import { mainnet as mainnetAddresses } from '@hop-protocol/sdk/addresses' 2 | 3 | export function getDefaultRpcUrl (chain: string) { 4 | return (mainnetAddresses as any)?.[chain]?.publicRpcUrl 5 | } 6 | -------------------------------------------------------------------------------- /packages/stats-worker/src/utils/getEtherscanApiUrl.ts: -------------------------------------------------------------------------------- 1 | import { getChain, NetworkSlug, ChainSlug } from '@hop-protocol/sdk' 2 | 3 | export function getEtherscanApiUrl (chain: string) { 4 | return getChain(NetworkSlug.Mainnet, chain as ChainSlug)?.etherscanApiUrl 5 | } 6 | -------------------------------------------------------------------------------- /packages/stats-worker/src/utils/sumAmounts.ts: -------------------------------------------------------------------------------- 1 | import { BigNumber } from 'ethers' 2 | 3 | export function sumAmounts (items: any) { 4 | let sum = BigNumber.from(0) 5 | for (const item of items) { 6 | const amount = BigNumber.from(item.amount) 7 | sum = sum.add(amount) 8 | } 9 | return sum 10 | } 11 | -------------------------------------------------------------------------------- /packages/stats-worker/src/utils/wait.ts: -------------------------------------------------------------------------------- 1 | export const wait = async (t: number) => { 2 | return new Promise(resolve => setTimeout(() => resolve(null), t)) 3 | } 4 | -------------------------------------------------------------------------------- /packages/stats-worker/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "rootDir": "./src", 5 | "outDir": "./dist", 6 | "paths": { 7 | "src/*": ["./src/*"] 8 | } 9 | }, 10 | "include": [ 11 | "src", 12 | "src/**/*.json" // Required to include JSON files specifically 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /packages/v2-explorer-backend/.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | Dockerfile 3 | *.env 4 | -------------------------------------------------------------------------------- /packages/v2-explorer-backend/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | build 3 | dist 4 | .env 5 | *.env 6 | .env* 7 | src/scripts 8 | *.dump 9 | *.log 10 | .build-info.json 11 | test-db 12 | .npmignore -------------------------------------------------------------------------------- /packages/v2-explorer-backend/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import baseConfig from '../../eslint.config.mjs' 2 | export default baseConfig 3 | -------------------------------------------------------------------------------- /packages/v2-explorer-backend/jest.config.mjs: -------------------------------------------------------------------------------- 1 | import baseConfig from '../../jest.config.base.mjs' 2 | export default baseConfig 3 | -------------------------------------------------------------------------------- /packages/v2-explorer-backend/src/cli/index.ts: -------------------------------------------------------------------------------- 1 | import './cli.js' 2 | -------------------------------------------------------------------------------- /packages/v2-explorer-backend/src/config/index.ts: -------------------------------------------------------------------------------- 1 | export * from './config.js' 2 | -------------------------------------------------------------------------------- /packages/v2-explorer-backend/src/controller/index.ts: -------------------------------------------------------------------------------- 1 | export { Controller } from './Controller.js' 2 | -------------------------------------------------------------------------------- /packages/v2-explorer-backend/src/db/index.ts: -------------------------------------------------------------------------------- 1 | export { db } from './db.js' 2 | -------------------------------------------------------------------------------- /packages/v2-explorer-backend/src/db/syncStateDb/index.ts: -------------------------------------------------------------------------------- 1 | export * from './SyncStateDb.js' 2 | -------------------------------------------------------------------------------- /packages/v2-explorer-backend/src/index.ts: -------------------------------------------------------------------------------- 1 | export { Worker } from '#worker/index.js' 2 | -------------------------------------------------------------------------------- /packages/v2-explorer-backend/src/indexer/index.ts: -------------------------------------------------------------------------------- 1 | export { Indexer } from './indexer.js' 2 | -------------------------------------------------------------------------------- /packages/v2-explorer-backend/src/pgDb/index.ts: -------------------------------------------------------------------------------- 1 | export * from './pgDb.js' 2 | -------------------------------------------------------------------------------- /packages/v2-explorer-backend/src/server/index.ts: -------------------------------------------------------------------------------- 1 | export * from './server.js' 2 | -------------------------------------------------------------------------------- /packages/v2-explorer-backend/src/utils/truncateString.ts: -------------------------------------------------------------------------------- 1 | export function truncateString (str: string, splitNum: number = 2) { 2 | if (!str) return '' 3 | return str.substring(0, 2 + splitNum) + '…' + str.substring(str.length - splitNum, str.length) 4 | } 5 | -------------------------------------------------------------------------------- /packages/v2-explorer-backend/src/utils/wait.ts: -------------------------------------------------------------------------------- 1 | export async function wait (t: number) { 2 | return new Promise(resolve => setTimeout(() => resolve(null), t)) 3 | } 4 | -------------------------------------------------------------------------------- /packages/v2-explorer-backend/src/worker/index.ts: -------------------------------------------------------------------------------- 1 | export * from './worker.js' 2 | -------------------------------------------------------------------------------- /packages/v2-explorer-backend/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "rootDir": "./src", 5 | "outDir": "./dist" 6 | }, 7 | "include": ["src"] 8 | } 9 | -------------------------------------------------------------------------------- /packages/v2-explorer-frontend/.nvmrc: -------------------------------------------------------------------------------- 1 | 16 2 | -------------------------------------------------------------------------------- /packages/v2-explorer-frontend/netlify.toml: -------------------------------------------------------------------------------- 1 | [[redirects]] 2 | from = "/*" 3 | to = "/index.html" 4 | status = 200 5 | -------------------------------------------------------------------------------- /packages/v2-explorer-frontend/public/_headers: -------------------------------------------------------------------------------- 1 | /* 2 | Access-Control-Allow-Origin: * 3 | -------------------------------------------------------------------------------- /packages/v2-explorer-frontend/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/v2-explorer-frontend/public/favicon.ico -------------------------------------------------------------------------------- /packages/v2-explorer-frontend/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/v2-explorer-frontend/public/logo192.png -------------------------------------------------------------------------------- /packages/v2-explorer-frontend/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hop-protocol/hop/8b48f0ea8315912ca46de011c813c9743e8629b5/packages/v2-explorer-frontend/public/logo512.png -------------------------------------------------------------------------------- /packages/v2-explorer-frontend/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /packages/v2-explorer-frontend/src/components/Footer.tsx: -------------------------------------------------------------------------------- 1 | import Box from '@mui/material/Box' 2 | import React from 'react' 3 | 4 | export function Footer () { 5 | return ( 6 | 7 | Github 8 | 9 | ) 10 | } 11 | -------------------------------------------------------------------------------- /packages/v2-explorer-frontend/src/config.ts: -------------------------------------------------------------------------------- 1 | export const apiUrl = process.env.REACT_APP_API_URL || 'http://localhost:8000' 2 | -------------------------------------------------------------------------------- /packages/v2-explorer-frontend/src/pages/NotFound.tsx: -------------------------------------------------------------------------------- 1 | import Box from '@mui/material/Box' 2 | import React from 'react' 3 | import { SiteWrapper } from '../components/SiteWrapper' 4 | 5 | export function NotFound () { 6 | return ( 7 | 8 | 9 |

Not Found

10 |
11 |
12 | ) 13 | } 14 | -------------------------------------------------------------------------------- /packages/v2-explorer-frontend/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/v2-explorer-frontend/src/setupTests.ts: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom' 6 | -------------------------------------------------------------------------------- /packages/v2-explorer-frontend/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/v2-explorer-frontend/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true 8 | }, 9 | "include": ["vite.config.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /packages/v2-hop-node/.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | Dockerfile 3 | *.env 4 | *.tsbuildinfo -------------------------------------------------------------------------------- /packages/v2-hop-node/.gitignore: -------------------------------------------------------------------------------- 1 | build 2 | dist 3 | yarn.lock 4 | secret.json 5 | .env 6 | *.env 7 | .env* 8 | docker/arbitrum/data 9 | docker/arbitrum/docker-compose.yml 10 | src/scripts 11 | *.dump 12 | *.log 13 | .build-info.json 14 | provider_calls.json 15 | prometheus_pass.txt 16 | *.txt 17 | *.tsbuildinfo 18 | cctp_db_data* 19 | .npmignore 20 | db_data* -------------------------------------------------------------------------------- /packages/v2-hop-node/README.md: -------------------------------------------------------------------------------- 1 | # V2 Hop Node 2 | 3 | The V2 Hop Node for Hop Protocol. 4 | 5 | ## License 6 | 7 | [MIT](LICENSE) 8 | -------------------------------------------------------------------------------- /packages/v2-hop-node/jest.config.mjs: -------------------------------------------------------------------------------- 1 | import baseESMConfig from '../../jest.config.esm.mjs' 2 | export default baseESMConfig 3 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/chains/Chains/arbitrum/ArbitrumFinalityService.ts: -------------------------------------------------------------------------------- 1 | import { AbstractFinalityService, type IFinalityService } from '../../Services/AbstractFinalityService.js' 2 | 3 | export class ArbitrumFinalityService extends AbstractFinalityService implements IFinalityService {} 4 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/chains/Chains/gnosis/GnosisFinalityService.ts: -------------------------------------------------------------------------------- 1 | import { AbstractFinalityService, type IFinalityService } from '../../Services/AbstractFinalityService.js' 2 | 3 | export class GnosisFinalityService extends AbstractFinalityService implements IFinalityService {} 4 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/chains/Chains/linea/LineaFinalityService.ts: -------------------------------------------------------------------------------- 1 | import { AbstractFinalityService, type IFinalityService } from '../../Services/AbstractFinalityService.js' 2 | 3 | export class LineaFinalityService extends AbstractFinalityService implements IFinalityService {} 4 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/chains/Chains/polygon/PolygonFinalityService.ts: -------------------------------------------------------------------------------- 1 | import { AbstractFinalityService, type IFinalityService } from '../../Services/AbstractFinalityService.js' 2 | 3 | export class PolygonFinalityService extends AbstractFinalityService implements IFinalityService {} 4 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/chains/Chains/scroll/ScrollFinalityService.ts: -------------------------------------------------------------------------------- 1 | import { AbstractFinalityService, type IFinalityService } from '../../Services/AbstractFinalityService.js' 2 | 3 | export class ScrollFinalityService extends AbstractFinalityService implements IFinalityService {} 4 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/chains/Chains/zksync/ZkSyncFinalityService.ts: -------------------------------------------------------------------------------- 1 | import { AbstractFinalityService, type IFinalityService } from '../../Services/AbstractFinalityService.js' 2 | 3 | export class ZkSyncFinalityService extends AbstractFinalityService implements IFinalityService {} 4 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/chains/index.ts: -------------------------------------------------------------------------------- 1 | export * from './getChainBridge.js' 2 | export * from './IChainBridge.js' 3 | export { 4 | MessageUnknownError, 5 | MessageInFlightError, 6 | MessageRelayedError, 7 | MessageInvalidError, 8 | } from './Services/AbstractMessageService.js' -------------------------------------------------------------------------------- /packages/v2-hop-node/src/cli/index.ts: -------------------------------------------------------------------------------- 1 | import './cli.js' 2 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/cli/shared/art.ts: -------------------------------------------------------------------------------- 1 | export const hopArt = ` 2 | __ __ 3 | / / / /___ ____ 4 | / /_/ / __ \\/ __ \\ 5 | / __ / /_/ / /_/ / 6 | /_/ /_/\\____/ .___/ 7 | /_/ 8 | ` 9 | 10 | export const printHopArt = () => console.log(hopArt) 11 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/cli/shared/index.ts: -------------------------------------------------------------------------------- 1 | export * from './shared.js' 2 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/config/constants.ts: -------------------------------------------------------------------------------- 1 | import os from 'node:os' 2 | 3 | const CONFIG_DIR = `${os.homedir()}/.hop` 4 | export const DEFAULT_CONFIG_PATH = `${CONFIG_DIR}/default-config.json` 5 | export const USER_CONFIG_PATH = `${CONFIG_DIR}/config.json` 6 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/config/types.ts: -------------------------------------------------------------------------------- 1 | import type{ ISharedConfig } from './configs/SharedConfig.js' 2 | import type { ISignerConfig } from './configs/SignerConfig.js' 3 | 4 | export interface IConfig { 5 | shared: ISharedConfig 6 | signer: ISignerConfig 7 | } 8 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/constants/index.ts: -------------------------------------------------------------------------------- 1 | export * from './constants.js' 2 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/data-provider/IDataProvider.ts: -------------------------------------------------------------------------------- 1 | export interface IDataProvider { 2 | // Initialization 3 | start (): void 4 | init (): Promise 5 | 6 | // Node events 7 | on (event: string, listener: (...args: any[]) => void): void 8 | 9 | // Public methods 10 | fetchItem(key: T, value: U): Promise 11 | } -------------------------------------------------------------------------------- /packages/v2-hop-node/src/db/constants.ts: -------------------------------------------------------------------------------- 1 | export const DATA_PUT_EVENT = 'DATA_PUT_EVENT' 2 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/finality/IFinalityService.ts: -------------------------------------------------------------------------------- 1 | import type { IFinalityStrategy } from './strategies/IFinalityStrategy.js' 2 | 3 | export interface IFinalityService extends IFinalityStrategy { 4 | isCustomBlockNumberImplemented(): boolean 5 | } 6 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/finality/index.ts: -------------------------------------------------------------------------------- 1 | export * from './FinalityService.js' -------------------------------------------------------------------------------- /packages/v2-hop-node/src/finality/strategies/bonder/ArbitrumStrategy.ts: -------------------------------------------------------------------------------- 1 | import { FinalityStrategy } from '../FinalityStrategy.js' 2 | import type { IFinalityStrategy } from '../IFinalityStrategy.js' 3 | 4 | export class ArbitrumStrategy extends FinalityStrategy implements IFinalityStrategy {} 5 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/finality/strategies/bonder/EthereumStrategy.ts: -------------------------------------------------------------------------------- 1 | import { FinalityStrategy } from '../FinalityStrategy.js' 2 | import type { IFinalityStrategy } from '../IFinalityStrategy.js' 3 | 4 | export class EthereumStrategy extends FinalityStrategy implements IFinalityStrategy {} 5 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/finality/strategies/bonder/GnosisStrategy.ts: -------------------------------------------------------------------------------- 1 | import { FinalityStrategy } from '../FinalityStrategy.js' 2 | import type { IFinalityStrategy } from '../IFinalityStrategy.js' 3 | 4 | export class GnosisStrategy extends FinalityStrategy implements IFinalityStrategy {} 5 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/finality/strategies/collateralized/EthereumStrategy.ts: -------------------------------------------------------------------------------- 1 | import { FinalityStrategy } from '../FinalityStrategy.js' 2 | import type { IFinalityStrategy } from '../IFinalityStrategy.js' 3 | 4 | export class EthereumStrategy extends FinalityStrategy implements IFinalityStrategy {} 5 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/finality/strategies/default/ArbitrumStrategy.ts: -------------------------------------------------------------------------------- 1 | import { FinalityStrategy } from '../FinalityStrategy.js' 2 | import type { IFinalityStrategy } from '../IFinalityStrategy.js' 3 | 4 | export class ArbitrumStrategy extends FinalityStrategy implements IFinalityStrategy {} 5 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/finality/strategies/default/EthereumStrategy.ts: -------------------------------------------------------------------------------- 1 | import { FinalityStrategy } from '../FinalityStrategy.js' 2 | import type { IFinalityStrategy } from '../IFinalityStrategy.js' 3 | 4 | export class EthereumStrategy extends FinalityStrategy implements IFinalityStrategy {} 5 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/finality/strategies/default/GnosisStrategy.ts: -------------------------------------------------------------------------------- 1 | import { FinalityStrategy } from '../FinalityStrategy.js' 2 | import type { IFinalityStrategy } from '../IFinalityStrategy.js' 3 | 4 | export class GnosisStrategy extends FinalityStrategy implements IFinalityStrategy {} 5 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/finality/strategies/default/OptimismStrategy.ts: -------------------------------------------------------------------------------- 1 | import { FinalityStrategy } from '../FinalityStrategy.js' 2 | import type { IFinalityStrategy } from '../IFinalityStrategy.js' 3 | 4 | export class OptimismStrategy extends FinalityStrategy implements IFinalityStrategy {} 5 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/finality/strategies/threshold/EthereumStrategy.ts: -------------------------------------------------------------------------------- 1 | import { FinalityStrategy } from '../FinalityStrategy.js' 2 | import type { IFinalityStrategy } from '../IFinalityStrategy.js' 3 | 4 | export class EthereumStrategy extends FinalityStrategy implements IFinalityStrategy {} 5 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/gasboost/Store.ts: -------------------------------------------------------------------------------- 1 | export interface Store { 2 | update: (key: string, value: any) => Promise 3 | getItem: (key: string) => Promise 4 | deleteItem: (key: string) => Promise 5 | } 6 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/gasboost/index.ts: -------------------------------------------------------------------------------- 1 | export * from './GasBoostSigner.js' 2 | export * from './GasBoostTransaction.js' -------------------------------------------------------------------------------- /packages/v2-hop-node/src/indexer/constants.ts: -------------------------------------------------------------------------------- 1 | export const DATA_STORED_EVENT = 'DATA_STORED_EVENT' 2 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/keystore/entropyToMnemonic.ts: -------------------------------------------------------------------------------- 1 | import * as bip39 from 'bip39' 2 | 3 | export const entropyToMnemonic = (entropy: Buffer): string => { 4 | return bip39.entropyToMnemonic(entropy) 5 | } 6 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/keystore/index.ts: -------------------------------------------------------------------------------- 1 | export * from './entropyToMnemonic.js' 2 | export * from './keystore.js' 3 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/logger/index.ts: -------------------------------------------------------------------------------- 1 | export { Logger, setLogLevel } from './Logger.js' 2 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/provider/index.ts: -------------------------------------------------------------------------------- 1 | export * from './provider.js' 2 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/state-machine/IStateMachine.ts: -------------------------------------------------------------------------------- 1 | export interface IStateMachine { 2 | // Initialization 3 | init (): Promise 4 | start (): void 5 | } 6 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/types/index.ts: -------------------------------------------------------------------------------- 1 | export * from './error.js' 2 | export * from './types.js' -------------------------------------------------------------------------------- /packages/v2-hop-node/src/utils/bigNumberMax.ts: -------------------------------------------------------------------------------- 1 | import type { BigNumber } from 'ethers' 2 | 3 | export function bigNumberMax (a: BigNumber, b: BigNumber): BigNumber { 4 | return a.gt(b) ? a : b 5 | } 6 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/utils/bigNumberMin.ts: -------------------------------------------------------------------------------- 1 | import type { BigNumber } from 'ethers' 2 | 3 | export function bigNumberMin (a: BigNumber, b: BigNumber): BigNumber { 4 | return a.lt(b) ? a : b 5 | } 6 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/utils/getBumpedBN.ts: -------------------------------------------------------------------------------- 1 | import { utils } from 'ethers' 2 | import type { BigNumber } from 'ethers' 3 | 4 | export const getBumpedBN = (value: BigNumber, multiplier: number = 1) => { 5 | return value.mul(utils.parseUnits(multiplier.toString(), 100)).div(utils.parseUnits('1', 100)) 6 | } 7 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/utils/getBumpedGasPrice.ts: -------------------------------------------------------------------------------- 1 | import { getBumpedBN } from './getBumpedBN.js' 2 | import type { BigNumber } from 'ethers' 3 | 4 | export const getBumpedGasPrice = (gasPrice: BigNumber, multiplier: number) => { 5 | return getBumpedBN(gasPrice, multiplier) 6 | } 7 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/utils/wait.ts: -------------------------------------------------------------------------------- 1 | export async function wait (t: number) { 2 | return new Promise(resolve => setTimeout(() => resolve(null), t)) 3 | } 4 | -------------------------------------------------------------------------------- /packages/v2-hop-node/src/wallets/index.ts: -------------------------------------------------------------------------------- 1 | export * from './wallets.js' 2 | -------------------------------------------------------------------------------- /packages/v2-hop-node/test/cctp.test.ts: -------------------------------------------------------------------------------- 1 | import { MessageState } from '#cctp/types.js' 2 | 3 | // eslint-disable-next-line jest/no-disabled-tests 4 | describe.skip('CCTP', () => { 5 | 6 | it('Test', async () => { 7 | const state = MessageState.Sent 8 | expect(state).toBe(MessageState.Sent) 9 | }) 10 | }) 11 | -------------------------------------------------------------------------------- /packages/v2-hop-node/test/utils/expectDefined.ts: -------------------------------------------------------------------------------- 1 | export default function expectDefined (arg: T): asserts arg is NonNullable { 2 | expect(arg).toBeDefined() 3 | } 4 | -------------------------------------------------------------------------------- /packages/v2-sdk-demo/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | *.tsbuildinfo 4 | *.env 5 | -------------------------------------------------------------------------------- /packages/v2-sdk-demo/README.md: -------------------------------------------------------------------------------- 1 | Coming soon. Development in progress under private repo. 2 | -------------------------------------------------------------------------------- /packages/v2-sdk/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | *.tsbuildinfo 4 | *.env 5 | docs-ui 6 | docs 7 | -------------------------------------------------------------------------------- /packages/v2-sdk/README.md: -------------------------------------------------------------------------------- 1 | Coming soon. Development in progress under private repo. 2 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - 'packages/*' -------------------------------------------------------------------------------- /tsconfig.eslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json" 3 | } --------------------------------------------------------------------------------