From d227bc389bef4b2f84544a73732a61782e3dca16 Mon Sep 17 00:00:00 2001 From: kumaryash90 Date: Fri, 15 Aug 2025 22:33:20 +0000 Subject: [PATCH] Dashboard, SDK: ERC20 assets (#7321) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ## PR-Codex overview This PR focuses on enhancing the `thirdweb` package by introducing new functionalities and updates for managing ERC20 assets, including the implementation of various events, functions, and utility methods for asset deployment and interaction. ### Detailed summary - Added `initialize` functions to various asset-related contracts. - Introduced event handling for `AssetDistributed`, `RouterUpdated`, and `RewardLockerUpdated`. - Implemented methods for checking router and reward locker support. - Enhanced the `distributeToken` function to handle multiple recipients. - Updated ABI files for new function signatures and events. - Improved utility functions for encoding parameters and transaction preparation. > The following files were skipped due to too many changes: `packages/thirdweb/src/extensions/assets/__generated__/AssetEntrypointERC20/write/initialize.ts`, `packages/thirdweb/src/extensions/assets/__generated__/FeeManager/write/initialize.ts`, `packages/thirdweb/src/extensions/assets/__generated__/AssetEntrypointERC20/write/listAsset.ts`, `packages/thirdweb/src/extensions/assets/__generated__/AssetEntrypointERC20/write/distributeAsset.ts`, `packages/thirdweb/src/extensions/assets/__generated__/AssetEntrypointERC20/write/createAsset.ts`, `packages/thirdweb/src/extensions/assets/__generated__/AssetEntrypointERC20/write/sellAsset.ts`, `packages/thirdweb/src/extensions/assets/__generated__/AssetEntrypointERC20/write/buyAsset.ts`, `packages/thirdweb/src/extensions/assets/__generated__/ERC20Asset/write/initialize.ts`, `packages/thirdweb/src/extensions/assets/__generated__/AssetEntrypointERC20/write/addImplementation.ts`, `packages/thirdweb/src/extensions/assets/__generated__/AssetEntrypointERC20/write/createAssetById.ts`, `packages/thirdweb/src/extensions/assets/__generated__/AssetInfraDeployer/write/deployInfraProxyDeterministic.ts`, `packages/thirdweb/package.json`, `packages/thirdweb/src/extensions/assets/__generated__/AssetEntrypointERC20/write/createAssetByImplementationConfig.ts`, `packages/thirdweb/src/assets/bootstrap.ts` > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` ## Summary by CodeRabbit * **New Features** * Added on-page Rewards workflow (Claim Rewards page, UI, and sidebar link) and expanded token creation flows for ERC20 assets with dedicated sale/airdrop options. * **UI / UX** * Improved token sale & distribution UIs, grouped recent transfers, loading placeholders, styling tweaks, chain prioritization in network selectors, customizable wallet fallback icon, and chart legend/value display. * **API / Props** * Several component props and callbacks updated to include chain/contract info and router availability. * **Chores** * Release metadata added for an ERC20 assets patch. --- .changeset/young-carrots-burn.md | 5 + apps/dashboard/src/@/analytics/report.ts | 21 +- .../@/components/blocks/NetworkSelectors.tsx | 50 ++- .../src/@/components/blocks/TokenSelector.tsx | 2 +- .../components/blocks/distribution-chart.tsx | 43 +- .../multi-step-status/multi-step-status.tsx | 6 +- .../@/components/blocks/wallet-address.tsx | 20 +- .../tables/contract-table.tsx | 1 + .../src/@/components/ui/CopyAddressButton.tsx | 1 + apps/dashboard/src/@/components/ui/tabs.tsx | 8 +- .../src/@/contexts/error-handler.tsx | 1 - .../src/@/hooks/project-contracts.ts | 7 +- .../_utils/getContractPageMetadata.ts | 1 + .../_utils/getContractPageMetadataSetup.ts | 37 ++ .../_utils/getContractPageSidebarLinks.ts | 6 + .../erc20/_components/RecentTransfers.tsx | 195 ++++++--- .../create/_apis/create-token-on-bridge.ts | 23 ++ .../tokens/create/_common/SocialUrls.tsx | 2 +- .../tokens/create/_common/step-card.tsx | 2 +- .../nft-collection-info-fieldset.tsx | 3 +- .../tokens/create/token/_common/form.ts | 74 +++- .../create/token/create-token-page-impl.tsx | 391 +++++++++++------- .../create/token/create-token-page.client.tsx | 167 ++++++-- .../token/create-token-page.stories.tsx | 69 ++-- .../distribution/drop-erc20-token-sale.tsx | 177 ++++++++ .../token/distribution/token-airdrop.tsx | 8 +- .../token/distribution/token-distribution.tsx | 74 ++-- .../create/token/distribution/token-sale.tsx | 315 ++++++++++---- .../create/token/launch/launch-token.tsx | 164 +++++--- .../token/token-info/token-info-fieldset.tsx | 25 +- .../create/token/utils/calculate-tick.ts | 17 + .../components/claim-rewards-page.stories.tsx | 96 +++++ .../rewards/components/claim-rewards-page.tsx | 322 +++++++++++++++ .../[contractAddress]/rewards/page.tsx | 83 ++++ .../rewards/utils/rewards.ts | 23 ++ .../rewards/utils/unclaimed-fees.ts | 88 ++++ packages/thirdweb/package.json | 8 + .../generate/abis/tokens/ContractFactory.json | 40 ++ .../generate/abis/tokens/ERC20Asset.json | 49 +++ .../generate/abis/tokens/ERC20Entrypoint.json | 76 ++++ .../generate/abis/tokens/FeeManager.json | 47 +++ .../generate/abis/tokens/PoolRouter.json | 64 +++ .../generate/abis/tokens/RewardLocker.json | 32 ++ packages/thirdweb/src/exports/tokens.ts | 28 ++ .../events/ContractDeployed.ts | 25 ++ .../ContractFactory/events/NonceUsed.ts | 24 ++ .../events/OwnershipHandoverCanceled.ts | 42 ++ .../events/OwnershipHandoverRequested.ts | 42 ++ .../events/OwnershipTransferred.ts | 49 +++ .../ContractFactory/events/ProxyDeployed.ts | 25 ++ .../ContractFactory/events/RolesUpdated.ts | 47 +++ .../read/computeDeployAddress.ts | 169 ++++++++ .../read/computeProxyAddress.ts | 167 ++++++++ .../ContractFactory/read/getDeployment.ts | 133 ++++++ .../ContractFactory/read/hasAllRoles.ts | 133 ++++++ .../ContractFactory/read/hasAnyRole.ts | 133 ++++++ .../ContractFactory/read/owner.ts | 70 ++++ .../read/ownershipHandoverExpiresAt.ts | 135 ++++++ .../ContractFactory/read/rolesOf.ts | 122 ++++++ .../write/cancelOwnershipHandover.ts | 52 +++ .../write/completeOwnershipHandover.ts | 148 +++++++ .../ContractFactory/write/deployContract.ts | 207 ++++++++++ .../write/deployContractWithSignature.ts | 205 +++++++++ .../ContractFactory/write/deployProxy.ts | 207 ++++++++++ .../write/deployProxyWithSignature.ts | 205 +++++++++ .../ContractFactory/write/grantRoles.ts | 147 +++++++ .../write/renounceOwnership.ts | 50 +++ .../ContractFactory/write/renounceRoles.ts | 139 +++++++ .../write/requestOwnershipHandover.ts | 52 +++ .../ContractFactory/write/revokeRoles.ts | 147 +++++++ .../write/transferOwnership.ts | 141 +++++++ .../ERC20Asset/events/Approval.ts | 47 +++ .../ERC20Asset/events/ContractURIUpdated.ts | 24 ++ .../ERC20Asset/events/Initialized.ts | 24 ++ .../events/OwnershipHandoverCanceled.ts | 42 ++ .../events/OwnershipHandoverRequested.ts | 42 ++ .../ERC20Asset/events/OwnershipTransferred.ts | 49 +++ .../ERC20Asset/events/Transfer.ts | 47 +++ .../ERC20Asset/read/DOMAIN_SEPARATOR.ts | 70 ++++ .../ERC20Asset/read/allowance.ts | 134 ++++++ .../ERC20Asset/read/balanceOf.ts | 126 ++++++ .../ERC20Asset/read/contractURI.ts | 69 ++++ .../__generated__/ERC20Asset/read/decimals.ts | 69 ++++ .../__generated__/ERC20Asset/read/name.ts | 69 ++++ .../__generated__/ERC20Asset/read/nonces.ts | 122 ++++++ .../__generated__/ERC20Asset/read/owner.ts | 70 ++++ .../read/ownershipHandoverExpiresAt.ts | 135 ++++++ .../ERC20Asset/read/supportsInterface.ts | 130 ++++++ .../__generated__/ERC20Asset/read/symbol.ts | 69 ++++ .../ERC20Asset/read/totalSupply.ts | 70 ++++ .../__generated__/ERC20Asset/write/approve.ts | 149 +++++++ .../__generated__/ERC20Asset/write/burn.ts | 137 ++++++ .../ERC20Asset/write/burnFrom.ts | 145 +++++++ .../write/cancelOwnershipHandover.ts | 52 +++ .../write/completeOwnershipHandover.ts | 148 +++++++ .../ERC20Asset/write/initialize.ts | 189 +++++++++ .../__generated__/ERC20Asset/write/permit.ts | 201 +++++++++ .../ERC20Asset/write/renounceOwnership.ts | 50 +++ .../write/requestOwnershipHandover.ts | 52 +++ .../ERC20Asset/write/setContractURI.ts | 142 +++++++ .../ERC20Asset/write/transfer.ts | 149 +++++++ .../ERC20Asset/write/transferFrom.ts | 167 ++++++++ .../ERC20Asset/write/transferOwnership.ts | 141 +++++++ .../ERC20Entrypoint/events/AirdropUpdated.ts | 24 ++ .../ERC20Entrypoint/events/Created.ts | 47 +++ .../ERC20Entrypoint/events/Distributed.ts | 25 ++ .../events/ImplementationAdded.ts | 43 ++ .../ERC20Entrypoint/events/Initialized.ts | 24 ++ .../ERC20Entrypoint/events/NonceUsed.ts | 24 ++ .../events/OwnershipHandoverCanceled.ts | 42 ++ .../events/OwnershipHandoverRequested.ts | 42 ++ .../events/OwnershipTransferred.ts | 49 +++ .../events/PoolRouterUpdated.ts | 24 ++ .../ERC20Entrypoint/events/RewardClaimed.ts | 24 ++ .../events/RewardLockerUpdated.ts | 24 ++ .../ERC20Entrypoint/events/RolesUpdated.ts | 47 +++ .../events/SwapRouterUpdated.ts | 24 ++ .../ERC20Entrypoint/events/Upgraded.ts | 40 ++ .../ERC20Entrypoint/read/getAirdrop.ts | 70 ++++ .../ERC20Entrypoint/read/getImplementation.ts | 153 +++++++ .../ERC20Entrypoint/read/getPoolRouter.ts | 70 ++++ .../ERC20Entrypoint/read/getRewards.ts | 151 +++++++ .../ERC20Entrypoint/read/getSwapRouter.ts | 70 ++++ .../ERC20Entrypoint/read/guardSalt.ts | 165 ++++++++ .../ERC20Entrypoint/read/hasAllRoles.ts | 133 ++++++ .../ERC20Entrypoint/read/hasAnyRole.ts | 133 ++++++ .../ERC20Entrypoint/read/owner.ts | 70 ++++ .../read/ownershipHandoverExpiresAt.ts | 135 ++++++ .../ERC20Entrypoint/read/predictAddress.ts | 176 ++++++++ .../read/predictAddressByConfig.ts | 211 ++++++++++ .../ERC20Entrypoint/read/proxiableUUID.ts | 69 ++++ .../ERC20Entrypoint/read/rolesOf.ts | 122 ++++++ .../write/addImplementation.ts | 181 ++++++++ .../write/addImplementationWithSignature.ts | 212 ++++++++++ .../write/cancelOwnershipHandover.ts | 52 +++ .../ERC20Entrypoint/write/claimRewards.ts | 139 +++++++ .../write/completeOwnershipHandover.ts | 148 +++++++ .../ERC20Entrypoint/write/create.ts | 180 ++++++++ .../ERC20Entrypoint/write/createById.ts | 198 +++++++++ .../write/createByImplementationConfig.ts | 233 +++++++++++ .../ERC20Entrypoint/write/distribute.ts | 164 ++++++++ .../ERC20Entrypoint/write/grantRoles.ts | 147 +++++++ .../ERC20Entrypoint/write/initialize.ts | 176 ++++++++ .../write/renounceOwnership.ts | 50 +++ .../ERC20Entrypoint/write/renounceRoles.ts | 139 +++++++ .../write/requestOwnershipHandover.ts | 52 +++ .../ERC20Entrypoint/write/revokeRoles.ts | 147 +++++++ .../ERC20Entrypoint/write/setAirdrop.ts | 139 +++++++ .../ERC20Entrypoint/write/setPoolRouter.ts | 142 +++++++ .../ERC20Entrypoint/write/setSwapRouter.ts | 142 +++++++ .../ERC20Entrypoint/write/swap.ts | 193 +++++++++ .../write/transferOwnership.ts | 141 +++++++ .../ERC20Entrypoint/write/upgradeToAndCall.ts | 153 +++++++ .../ERC20Entrypoint/write/withdraw.ts | 145 +++++++ .../FeeManager/events/FeeConfigUpdated.ts | 49 +++ .../events/FeeConfigUpdatedBySignature.ts | 55 +++ .../FeeManager/events/FeeRecipientUpdated.ts | 24 ++ .../events/OwnershipHandoverCanceled.ts | 42 ++ .../events/OwnershipHandoverRequested.ts | 42 ++ .../FeeManager/events/OwnershipTransferred.ts | 49 +++ .../FeeManager/events/RolesUpdated.ts | 47 +++ .../FeeManager/read/ROLE_FEE_MANAGER.ts | 69 ++++ .../FeeManager/read/calculateFee.ts | 167 ++++++++ .../FeeManager/read/domainSeparator.ts | 69 ++++ .../FeeManager/read/eip712Domain.ts | 94 +++++ .../FeeManager/read/feeConfigs.ts | 142 +++++++ .../FeeManager/read/feeRecipient.ts | 69 ++++ .../FeeManager/read/getFeeConfig.ts | 148 +++++++ .../FeeManager/read/hasAllRoles.ts | 133 ++++++ .../FeeManager/read/hasAnyRole.ts | 133 ++++++ .../__generated__/FeeManager/read/owner.ts | 70 ++++ .../read/ownershipHandoverExpiresAt.ts | 135 ++++++ .../__generated__/FeeManager/read/rolesOf.ts | 122 ++++++ .../FeeManager/read/usedNonces.ts | 129 ++++++ .../write/cancelOwnershipHandover.ts | 52 +++ .../write/completeOwnershipHandover.ts | 148 +++++++ .../FeeManager/write/grantRoles.ts | 147 +++++++ .../FeeManager/write/renounceOwnership.ts | 50 +++ .../FeeManager/write/renounceRoles.ts | 139 +++++++ .../write/requestOwnershipHandover.ts | 52 +++ .../FeeManager/write/revokeRoles.ts | 147 +++++++ .../FeeManager/write/setFeeConfig.ts | 163 ++++++++ .../write/setFeeConfigBySignature.ts | 222 ++++++++++ .../FeeManager/write/setFeeRecipient.ts | 142 +++++++ .../FeeManager/write/setTargetFeeConfig.ts | 188 +++++++++ .../FeeManager/write/transferOwnership.ts | 141 +++++++ .../PoolRouter/events/AdapterDisabled.ts | 24 ++ .../PoolRouter/events/AdapterEnabled.ts | 24 ++ .../PoolRouter/events/Initialized.ts | 24 ++ .../PoolRouter/events/NonceUsed.ts | 24 ++ .../events/OwnershipHandoverCanceled.ts | 42 ++ .../events/OwnershipHandoverRequested.ts | 42 ++ .../PoolRouter/events/OwnershipTransferred.ts | 49 +++ .../PoolRouter/events/RewardClaimed.ts | 25 ++ .../PoolRouter/events/RolesUpdated.ts | 47 +++ .../PoolRouter/events/Upgraded.ts | 40 ++ .../PoolRouter/read/getAdapter.ts | 139 +++++++ .../PoolRouter/read/getRewardLocker.ts | 129 ++++++ .../PoolRouter/read/getRewardPosition.ts | 165 ++++++++ .../PoolRouter/read/getRewardPositions.ts | 154 +++++++ .../PoolRouter/read/hasAllRoles.ts | 133 ++++++ .../PoolRouter/read/hasAnyRole.ts | 133 ++++++ .../__generated__/PoolRouter/read/owner.ts | 70 ++++ .../read/ownershipHandoverExpiresAt.ts | 135 ++++++ .../PoolRouter/read/proxiableUUID.ts | 69 ++++ .../__generated__/PoolRouter/read/rolesOf.ts | 122 ++++++ .../write/cancelOwnershipHandover.ts | 52 +++ .../PoolRouter/write/claimRewards.ts | 139 +++++++ .../write/completeOwnershipHandover.ts | 148 +++++++ .../PoolRouter/write/createPool.ts | 221 ++++++++++ .../PoolRouter/write/disableAdapter.ts | 142 +++++++ .../PoolRouter/write/enableAdapter.ts | 169 ++++++++ .../write/enableAdapterWithSignature.ts | 185 +++++++++ .../PoolRouter/write/grantRoles.ts | 147 +++++++ .../PoolRouter/write/initialize.ts | 147 +++++++ .../PoolRouter/write/renounceOwnership.ts | 50 +++ .../PoolRouter/write/renounceRoles.ts | 139 +++++++ .../write/requestOwnershipHandover.ts | 52 +++ .../PoolRouter/write/revokeRoles.ts | 147 +++++++ .../PoolRouter/write/transferOwnership.ts | 141 +++++++ .../PoolRouter/write/upgradeToAndCall.ts | 153 +++++++ .../PoolRouter/write/withdraw.ts | 145 +++++++ .../events/OwnershipHandoverCanceled.ts | 42 ++ .../events/OwnershipHandoverRequested.ts | 42 ++ .../events/OwnershipTransferred.ts | 49 +++ .../RewardLocker/events/PositionLocked.ts | 41 ++ .../RewardLocker/events/RewardCollected.ts | 43 ++ .../RewardLocker/read/feeManager.ts | 69 ++++ .../__generated__/RewardLocker/read/owner.ts | 70 ++++ .../read/ownershipHandoverExpiresAt.ts | 135 ++++++ .../RewardLocker/read/position.ts | 153 +++++++ .../RewardLocker/read/positionManager.ts | 69 ++++ .../write/cancelOwnershipHandover.ts | 52 +++ .../RewardLocker/write/collectReward.ts | 164 ++++++++ .../write/completeOwnershipHandover.ts | 148 +++++++ .../RewardLocker/write/lockPosition.ts | 205 +++++++++ .../RewardLocker/write/renounceOwnership.ts | 50 +++ .../write/requestOwnershipHandover.ts | 52 +++ .../RewardLocker/write/transferOwnership.ts | 141 +++++++ .../RewardLocker/write/withdraw.ts | 145 +++++++ packages/thirdweb/src/tokens/constants.ts | 29 ++ packages/thirdweb/src/tokens/create-token.ts | 64 +++ .../thirdweb/src/tokens/distribute-token.ts | 26 ++ .../src/tokens/get-entrypoint-erc20.ts | 121 ++++++ .../thirdweb/src/tokens/is-router-enabled.ts | 48 +++ .../thirdweb/src/tokens/token-utils.test.ts | 46 +++ packages/thirdweb/src/tokens/token-utils.ts | 157 +++++++ packages/thirdweb/src/tokens/types.ts | 49 +++ pnpm-lock.yaml | 2 +- 249 files changed, 23376 insertions(+), 503 deletions(-) create mode 100644 .changeset/young-carrots-burn.md create mode 100644 apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/_apis/create-token-on-bridge.ts create mode 100644 apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/token/distribution/drop-erc20-token-sale.tsx create mode 100644 apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/token/utils/calculate-tick.ts create mode 100644 apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/contract/[chainIdOrSlug]/[contractAddress]/rewards/components/claim-rewards-page.stories.tsx create mode 100644 apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/contract/[chainIdOrSlug]/[contractAddress]/rewards/components/claim-rewards-page.tsx create mode 100644 apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/contract/[chainIdOrSlug]/[contractAddress]/rewards/page.tsx create mode 100644 apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/contract/[chainIdOrSlug]/[contractAddress]/rewards/utils/rewards.ts create mode 100644 apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/contract/[chainIdOrSlug]/[contractAddress]/rewards/utils/unclaimed-fees.ts create mode 100644 packages/thirdweb/scripts/generate/abis/tokens/ContractFactory.json create mode 100644 packages/thirdweb/scripts/generate/abis/tokens/ERC20Asset.json create mode 100644 packages/thirdweb/scripts/generate/abis/tokens/ERC20Entrypoint.json create mode 100644 packages/thirdweb/scripts/generate/abis/tokens/FeeManager.json create mode 100644 packages/thirdweb/scripts/generate/abis/tokens/PoolRouter.json create mode 100644 packages/thirdweb/scripts/generate/abis/tokens/RewardLocker.json create mode 100644 packages/thirdweb/src/exports/tokens.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/events/ContractDeployed.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/events/NonceUsed.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/events/OwnershipHandoverCanceled.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/events/OwnershipHandoverRequested.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/events/OwnershipTransferred.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/events/ProxyDeployed.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/events/RolesUpdated.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/read/computeDeployAddress.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/read/computeProxyAddress.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/read/getDeployment.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/read/hasAllRoles.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/read/hasAnyRole.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/read/owner.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/read/ownershipHandoverExpiresAt.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/read/rolesOf.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/write/cancelOwnershipHandover.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/write/completeOwnershipHandover.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/write/deployContract.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/write/deployContractWithSignature.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/write/deployProxy.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/write/deployProxyWithSignature.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/write/grantRoles.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/write/renounceOwnership.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/write/renounceRoles.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/write/requestOwnershipHandover.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/write/revokeRoles.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ContractFactory/write/transferOwnership.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/events/Approval.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/events/ContractURIUpdated.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/events/Initialized.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/events/OwnershipHandoverCanceled.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/events/OwnershipHandoverRequested.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/events/OwnershipTransferred.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/events/Transfer.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/read/DOMAIN_SEPARATOR.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/read/allowance.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/read/balanceOf.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/read/contractURI.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/read/decimals.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/read/name.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/read/nonces.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/read/owner.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/read/ownershipHandoverExpiresAt.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/read/supportsInterface.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/read/symbol.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/read/totalSupply.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/write/approve.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/write/burn.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/write/burnFrom.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/write/cancelOwnershipHandover.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/write/completeOwnershipHandover.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/write/initialize.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/write/permit.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/write/renounceOwnership.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/write/requestOwnershipHandover.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/write/setContractURI.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/write/transfer.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/write/transferFrom.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Asset/write/transferOwnership.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/events/AirdropUpdated.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/events/Created.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/events/Distributed.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/events/ImplementationAdded.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/events/Initialized.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/events/NonceUsed.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/events/OwnershipHandoverCanceled.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/events/OwnershipHandoverRequested.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/events/OwnershipTransferred.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/events/PoolRouterUpdated.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/events/RewardClaimed.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/events/RewardLockerUpdated.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/events/RolesUpdated.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/events/SwapRouterUpdated.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/events/Upgraded.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/read/getAirdrop.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/read/getImplementation.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/read/getPoolRouter.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/read/getRewards.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/read/getSwapRouter.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/read/guardSalt.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/read/hasAllRoles.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/read/hasAnyRole.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/read/owner.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/read/ownershipHandoverExpiresAt.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/read/predictAddress.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/read/predictAddressByConfig.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/read/proxiableUUID.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/read/rolesOf.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/addImplementation.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/addImplementationWithSignature.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/cancelOwnershipHandover.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/claimRewards.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/completeOwnershipHandover.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/create.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/createById.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/createByImplementationConfig.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/distribute.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/grantRoles.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/initialize.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/renounceOwnership.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/renounceRoles.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/requestOwnershipHandover.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/revokeRoles.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/setAirdrop.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/setPoolRouter.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/setSwapRouter.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/swap.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/transferOwnership.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/upgradeToAndCall.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/ERC20Entrypoint/write/withdraw.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/events/FeeConfigUpdated.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/events/FeeConfigUpdatedBySignature.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/events/FeeRecipientUpdated.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/events/OwnershipHandoverCanceled.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/events/OwnershipHandoverRequested.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/events/OwnershipTransferred.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/events/RolesUpdated.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/read/ROLE_FEE_MANAGER.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/read/calculateFee.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/read/domainSeparator.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/read/eip712Domain.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/read/feeConfigs.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/read/feeRecipient.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/read/getFeeConfig.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/read/hasAllRoles.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/read/hasAnyRole.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/read/owner.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/read/ownershipHandoverExpiresAt.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/read/rolesOf.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/read/usedNonces.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/write/cancelOwnershipHandover.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/write/completeOwnershipHandover.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/write/grantRoles.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/write/renounceOwnership.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/write/renounceRoles.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/write/requestOwnershipHandover.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/write/revokeRoles.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/write/setFeeConfig.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/write/setFeeConfigBySignature.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/write/setFeeRecipient.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/write/setTargetFeeConfig.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/FeeManager/write/transferOwnership.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/events/AdapterDisabled.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/events/AdapterEnabled.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/events/Initialized.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/events/NonceUsed.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/events/OwnershipHandoverCanceled.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/events/OwnershipHandoverRequested.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/events/OwnershipTransferred.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/events/RewardClaimed.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/events/RolesUpdated.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/events/Upgraded.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/read/getAdapter.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/read/getRewardLocker.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/read/getRewardPosition.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/read/getRewardPositions.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/read/hasAllRoles.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/read/hasAnyRole.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/read/owner.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/read/ownershipHandoverExpiresAt.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/read/proxiableUUID.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/read/rolesOf.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/write/cancelOwnershipHandover.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/write/claimRewards.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/write/completeOwnershipHandover.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/write/createPool.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/write/disableAdapter.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/write/enableAdapter.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/write/enableAdapterWithSignature.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/write/grantRoles.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/write/initialize.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/write/renounceOwnership.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/write/renounceRoles.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/write/requestOwnershipHandover.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/write/revokeRoles.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/write/transferOwnership.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/write/upgradeToAndCall.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/PoolRouter/write/withdraw.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/RewardLocker/events/OwnershipHandoverCanceled.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/RewardLocker/events/OwnershipHandoverRequested.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/RewardLocker/events/OwnershipTransferred.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/RewardLocker/events/PositionLocked.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/RewardLocker/events/RewardCollected.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/RewardLocker/read/feeManager.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/RewardLocker/read/owner.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/RewardLocker/read/ownershipHandoverExpiresAt.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/RewardLocker/read/position.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/RewardLocker/read/positionManager.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/RewardLocker/write/cancelOwnershipHandover.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/RewardLocker/write/collectReward.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/RewardLocker/write/completeOwnershipHandover.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/RewardLocker/write/lockPosition.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/RewardLocker/write/renounceOwnership.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/RewardLocker/write/requestOwnershipHandover.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/RewardLocker/write/transferOwnership.ts create mode 100644 packages/thirdweb/src/extensions/tokens/__generated__/RewardLocker/write/withdraw.ts create mode 100644 packages/thirdweb/src/tokens/constants.ts create mode 100644 packages/thirdweb/src/tokens/create-token.ts create mode 100644 packages/thirdweb/src/tokens/distribute-token.ts create mode 100644 packages/thirdweb/src/tokens/get-entrypoint-erc20.ts create mode 100644 packages/thirdweb/src/tokens/is-router-enabled.ts create mode 100644 packages/thirdweb/src/tokens/token-utils.test.ts create mode 100644 packages/thirdweb/src/tokens/token-utils.ts create mode 100644 packages/thirdweb/src/tokens/types.ts diff --git a/.changeset/young-carrots-burn.md b/.changeset/young-carrots-burn.md new file mode 100644 index 00000000000..d5edf4799bf --- /dev/null +++ b/.changeset/young-carrots-burn.md @@ -0,0 +1,5 @@ +--- +"thirdweb": patch +--- + +ERC20 assets diff --git a/apps/dashboard/src/@/analytics/report.ts b/apps/dashboard/src/@/analytics/report.ts index 849149dc0b2..21dd3a67e57 100644 --- a/apps/dashboard/src/@/analytics/report.ts +++ b/apps/dashboard/src/@/analytics/report.ts @@ -224,7 +224,11 @@ export function reportChainConfigurationAdded(properties: { // ASSETS // ---------------------------- -type AssetContractType = "DropERC20" | "DropERC1155" | "DropERC721"; +type AssetContractType = + | "DropERC20" + | "DropERC1155" + | "DropERC721" + | "ERC20Asset"; /** * ### Why do we need to report this event? @@ -334,6 +338,15 @@ export function reportAssetCreationSuccessful(properties: { }); } +type CoinCreationStep = + | "erc20-asset:deploy-contract" + | "erc20-asset:airdrop-tokens" + | "erc20-asset:approve-airdrop-tokens" + | "drop-erc20:deploy-contract" + | "drop-erc20:set-claim-conditions" + | "drop-erc20:mint-tokens" + | "drop-erc20:airdrop-tokens"; + /** * ### Why do we need to report this event? * - To track number of failed asset creations @@ -355,11 +368,7 @@ export function reportAssetCreationFailed( } | { assetType: "coin"; - step: - | "deploy-contract" - | "set-claim-conditions" - | "mint-tokens" - | "airdrop-tokens"; + step: CoinCreationStep; } ), ) { diff --git a/apps/dashboard/src/@/components/blocks/NetworkSelectors.tsx b/apps/dashboard/src/@/components/blocks/NetworkSelectors.tsx index e6507f45d6d..c3dd895db25 100644 --- a/apps/dashboard/src/@/components/blocks/NetworkSelectors.tsx +++ b/apps/dashboard/src/@/components/blocks/NetworkSelectors.tsx @@ -29,16 +29,18 @@ export function MultiNetworkSelector(props: { client: ThirdwebClient; chainIds?: number[]; }) { - let { allChains, idToChain } = useAllChainsData(); - - if (props.chainIds && props.chainIds.length > 0) { - allChains = allChains.filter((chain) => - props.chainIds?.includes(chain.chainId), - ); - } + const { allChains, idToChain } = useAllChainsData(); const options = useMemo(() => { - let sortedChains = allChains; + let chains = allChains.filter((chain) => chain.status !== "deprecated"); + + if (props.chainIds && props.chainIds.length > 0) { + chains = allChains.filter((chain) => + props.chainIds?.includes(chain.chainId), + ); + } + + let sortedChains = chains; if (props.priorityChains) { const priorityChainsSet = new Set(); @@ -69,7 +71,13 @@ export function MultiNetworkSelector(props: { value: String(chain.chainId), }; }); - }, [allChains, props.priorityChains, idToChain, props.hideTestnets]); + }, [ + allChains, + props.priorityChains, + idToChain, + props.hideTestnets, + props.chainIds, + ]); const searchFn = useCallback( (option: Option, searchValue: string) => { @@ -155,16 +163,38 @@ export function SingleNetworkSelector(props: { disableDeprecated?: boolean; placeholder?: string; client: ThirdwebClient; + priorityChains?: number[]; }) { const { allChains, idToChain } = useAllChainsData(); const chainsToShow = useMemo(() => { let chains = allChains; + chains = chains.filter((chain) => chain.status !== "deprecated"); + if (props.disableTestnets) { chains = chains.filter((chain) => !chain.testnet); } + if (props.priorityChains) { + const priorityChainsSet = new Set(); + for (const chainId of props.priorityChains || []) { + priorityChainsSet.add(chainId); + } + + const priorityChains = (props.priorityChains || []) + .map((chainId) => { + return idToChain.get(chainId); + }) + .filter((v) => !!v); + + const otherChains = allChains.filter( + (chain) => !priorityChainsSet.has(chain.chainId), + ); + + chains = [...priorityChains, ...otherChains]; + } + if (props.chainIds) { const chainIdSet = new Set(props.chainIds); chains = chains.filter((chain) => chainIdSet.has(chain.chainId)); @@ -180,6 +210,8 @@ export function SingleNetworkSelector(props: { props.chainIds, props.disableTestnets, props.disableDeprecated, + props.priorityChains, + idToChain, ]); const options = useMemo(() => { diff --git a/apps/dashboard/src/@/components/blocks/TokenSelector.tsx b/apps/dashboard/src/@/components/blocks/TokenSelector.tsx index a85978aec36..e6145bf8660 100644 --- a/apps/dashboard/src/@/components/blocks/TokenSelector.tsx +++ b/apps/dashboard/src/@/components/blocks/TokenSelector.tsx @@ -204,7 +204,7 @@ export function TokenSelector(props: { searchPlaceholder="Search by name or symbol" showCheck={props.showCheck} side={props.side} - value={selectedValue} + value={tokensQuery.isPending ? undefined : selectedValue} /> ); } diff --git a/apps/dashboard/src/@/components/blocks/distribution-chart.tsx b/apps/dashboard/src/@/components/blocks/distribution-chart.tsx index 8abb8373679..b34094aadda 100644 --- a/apps/dashboard/src/@/components/blocks/distribution-chart.tsx +++ b/apps/dashboard/src/@/components/blocks/distribution-chart.tsx @@ -3,12 +3,15 @@ import { cn } from "@/lib/utils"; export type Segment = { label: string; percent: number; + value: string; color: string; }; type DistributionBarChartProps = { segments: Segment[]; - title: string; + title?: string; + titleClassName?: string; + barClassName?: string; }; export function DistributionBarChart(props: DistributionBarChartProps) { @@ -21,24 +24,36 @@ export function DistributionBarChart(props: DistributionBarChartProps) { return (
-
-

{props.title}

-
- Total: {totalPercentage}% + {props.title && ( +
+

+ {props.title} +

+
+ Total: {totalPercentage}% +
-
+ )} {/* Bar */} -
+
{props.segments.map((segment) => { return (
0 && "border-r-2 border-background", + )} key={segment.label} style={{ backgroundColor: segment.color, @@ -67,7 +82,7 @@ export function DistributionBarChart(props: DistributionBarChartProps) { "text-destructive-text", )} > - {segment.label}: {segment.percent}% + {segment.label}: {segment.value}

); diff --git a/apps/dashboard/src/@/components/blocks/multi-step-status/multi-step-status.tsx b/apps/dashboard/src/@/components/blocks/multi-step-status/multi-step-status.tsx index 33b6002e809..4ca36385f1e 100644 --- a/apps/dashboard/src/@/components/blocks/multi-step-status/multi-step-status.tsx +++ b/apps/dashboard/src/@/components/blocks/multi-step-status/multi-step-status.tsx @@ -34,7 +34,7 @@ export function MultiStepStatus(props: { }) { return ( -
+
{props.steps.map((step) => (
{step.status.type === "completed" ? ( @@ -46,7 +46,7 @@ export function MultiStepStatus(props: { ) : ( )} -
+

(props: { {step.status.type === "error" ? props.renderError?.(step, step.status.message) || (

-

+

{step.status.message}

+ + + + +
))} @@ -183,6 +222,34 @@ function RecentTransfersUI(props: { ); } +function timestamp(block_timestamp: string) { + return formatDistanceToNow( + new Date( + block_timestamp.endsWith("Z") ? block_timestamp : `${block_timestamp}Z`, + ), + { + addSuffix: true, + }, + ); +} + +function TokenAmount(props: { + amount: string; + decimals: number; + symbol: string; +}) { + return ( +
+ + {tokenAmountFormatter.format( + Number(toTokens(BigInt(props.amount), props.decimals)), + )} + + {props.symbol} +
+ ); +} + function SkeletonRow() { return ( @@ -199,7 +266,7 @@ function SkeletonRow() { - + ); diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/_apis/create-token-on-bridge.ts b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/_apis/create-token-on-bridge.ts new file mode 100644 index 00000000000..2d7eee9fef3 --- /dev/null +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/_apis/create-token-on-bridge.ts @@ -0,0 +1,23 @@ +import type { ThirdwebClient } from "thirdweb"; +import { isProd } from "@/constants/env-utils"; + +export async function createTokenOnUniversalBridge(params: { + chainId: number; + tokenAddress: string; + client: ThirdwebClient; +}) { + const domain = isProd ? "thirdweb.com" : "thirdweb-dev.com"; + const res = await fetch(`https://bridge.${domain}/v1/tokens`, { + body: JSON.stringify({ + chainId: params.chainId.toString(), + tokenAddress: params.tokenAddress, + }), + headers: { + "Content-Type": "application/json", + "x-client-id": params.client.clientId, + }, + method: "POST", + }); + + return res; +} diff --git a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/_common/SocialUrls.tsx b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/_common/SocialUrls.tsx index 9990f1718c7..cb9e8c18494 100644 --- a/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/_common/SocialUrls.tsx +++ b/apps/dashboard/src/app/(app)/team/[team_slug]/[project_slug]/(sidebar)/tokens/create/_common/SocialUrls.tsx @@ -34,7 +34,7 @@ export function SocialUrlsFieldset(props: {

Social URLs

{fields.length > 0 && ( -
+
{fields.map((field, index) => (
+
{props.prevButton && (