├── .babelrc ├── .env.sample ├── .eslintignore ├── .eslintrc.json ├── .github └── workflows │ └── ci-main-tests.yml ├── .gitignore ├── .husky ├── .gitignore └── pre-commit ├── .nvmrc ├── .prettierignore ├── .prettierrc ├── .vscode ├── deploy.txt └── extensions.json ├── .yarnrc ├── .yarnrc.yml ├── 0.png ├── @types ├── buffer-layout.d.ts ├── index.d.ts └── types.ts ├── DriftStakeVoterPlugin ├── DriftVoterClient.ts ├── components │ ├── DriftDeposit.tsx │ └── DriftVotingPower.tsx ├── constants.ts ├── driftSdk.ts └── idl │ ├── drift.ts │ └── driftStakeVoter.ts ├── GatewayPlugin ├── config.ts └── sdk │ └── api.ts ├── HeliumVotePlugin ├── components │ ├── ClaimUnreleasedPositions.tsx │ ├── DelegateTokensModal.tsx │ ├── LockCommunityTokensBtn.tsx │ ├── LockTokensAccount.tsx │ ├── LockTokensModal.tsx │ ├── PositionCard.tsx │ ├── PromptModal.tsx │ ├── TransferTokensModal.tsx │ ├── VotingPowerBox.tsx │ └── VotingPowerCard.tsx ├── hooks │ ├── useClaimDelegatedPositionRewards.ts │ ├── useClosePosition.ts │ ├── useCreatePosition.ts │ ├── useDelegatePosition.ts │ ├── useExtendPosition.ts │ ├── useFlipPositionLockupKind.ts │ ├── useHeliumVsrStore.ts │ ├── useSplitPosition.ts │ ├── useSubDaos.ts │ ├── useTransferPosition.ts │ └── useUndelegatePosition.ts ├── sdk │ ├── client.ts │ └── types.ts └── utils │ ├── calcLockupMultiplier.ts │ ├── calcPositionVotingPower.ts │ ├── getPositions.ts │ ├── getSubDaos.ts │ ├── getUnusedPositionsForProposal.ts │ └── getUsedPositionsForProposal.ts ├── LICENSE ├── NftVotePlugin ├── NftProposalStore.tsx ├── NftProposalVoteState.tsx ├── accounts.ts ├── getCnftParamAndProof.ts └── store │ └── nftPluginStore.ts ├── ParclVotePlugin ├── ParclVoterWeightPluginClient.ts └── components │ ├── ParclAccountDetails.tsx │ └── ParclVotingPower.tsx ├── Procfile ├── PythVotePlugin └── components │ ├── PythAccountDetails.tsx │ └── PythVotingPower.tsx ├── QuadraticPlugin └── sdk │ └── api.ts ├── README.md ├── Strategies ├── components │ ├── DepositModal.tsx │ ├── ModalHeader.tsx │ ├── SolendModalContent.tsx │ ├── psyfi │ │ ├── Deposit.tsx │ │ ├── PsyFiStrategies.tsx │ │ ├── hooks │ │ │ └── usePsyFiProgram.ts │ │ ├── index.ts │ │ ├── pdas.ts │ │ └── programIds.ts │ └── solend │ │ ├── SolendDeposit.tsx │ │ └── SolendWithdraw.tsx ├── protocols │ ├── psyfi │ │ ├── actions │ │ │ └── deposit.ts │ │ ├── index.ts │ │ └── types.ts │ └── solend │ │ └── index.ts ├── store │ └── useStrategiesStore.tsx └── types │ └── types.ts ├── TokenHaverPlugin ├── TokenHaverClient.ts ├── constants.ts ├── idl │ └── token_haver.ts └── readme.md ├── VoteStakeRegistry ├── actions │ ├── closeDeposit.ts │ ├── getClawbackInstruction.ts │ ├── getGrantInstruction.ts │ ├── voteRegistryDepositWithoutLockup.ts │ ├── voteRegistryLockDeposit.ts │ ├── voteRegistryStartUnlock.ts │ └── voteRegistryWithdraw.ts ├── components │ ├── Account │ │ ├── DepositCard.tsx │ │ ├── LockTokensAccount.tsx │ │ ├── LockTokensAccountWithdraw.tsx │ │ └── LockTokensModal.tsx │ ├── LockTokenStats │ │ ├── InfoBox.tsx │ │ ├── VestingVsTime.tsx │ │ └── tools.tsx │ ├── TokenBalance │ │ ├── DepositCommunityTokensBtn.tsx │ │ ├── LockPluginTokenBalanceCard.tsx │ │ ├── VSRVotingPower.tsx │ │ ├── VotingPowerBox.tsx │ │ └── WithdrawCommunityTokensBtn.tsx │ └── instructions │ │ ├── Clawback.tsx │ │ └── Grant.tsx ├── sdk │ ├── accounts.tsx │ ├── api.ts │ ├── client.ts │ ├── voter_stake_registry.ts │ ├── withCreateNewDeposit.ts │ ├── withVoteRegistryDeposit.ts │ └── withVoteRegistryWithdraw.ts ├── stores │ └── useDepositStore.tsx └── tools │ ├── deposits.ts │ └── types.ts ├── VoterWeightPlugins ├── clients │ ├── PythVoterWeightPluginClient.ts │ ├── UnrecognisedVoterWeightPluginClient.ts │ └── index.ts ├── hooks │ ├── useCalculatedMaxVoterWeight.ts │ ├── useCalculatedVoterWeights.ts │ ├── useMintConfiguredMaxVoteWeight.ts │ ├── usePlugins.ts │ ├── useTokenOwnerRecord.ts │ └── useVoterWeightPks.ts ├── index.ts ├── lib │ ├── PluginDebug.tsx │ ├── calculateVoterWeights.ts │ ├── createMaxVoterWeight.ts │ ├── createVoterWeight.ts │ ├── getPlugins.ts │ ├── types.ts │ ├── updateMaxVoterWeight.ts │ ├── updateVoterWeight.ts │ └── utils.ts ├── useGatewayVoterWeightPlugin.ts ├── useHeliumClient.ts ├── useNftClient.ts ├── useQuadraticVoterWeightPlugin.ts ├── useVoterWeightPlugins.ts └── useVsrClient.ts ├── actions ├── addPlugins │ ├── addGatewayPlugin.ts │ ├── addQVPlugin.ts │ └── types.ts ├── cancelProposal.ts ├── castVote.ts ├── chat │ └── postMessage.ts ├── createLUTproposal.ts ├── createMultisigWallet.ts ├── createNFTRealm.ts ├── createProposal.ts ├── createTokenizedRealm.ts ├── dryRunInstruction.ts ├── executeInstructions.ts ├── executeTransaction.ts ├── finalizeVotes.ts ├── flagInstructionError.ts ├── relinquishVote.ts └── signOffProposal.ts ├── cli ├── createProposalScript.ts └── helpers │ └── createBase64Proposal.ts ├── components ├── AboutRealm.tsx ├── AddMemberIcon.tsx ├── AdditionalProposalOptions.tsx ├── Address.tsx ├── App.tsx ├── AssetsList │ ├── AssetItem.tsx │ ├── AssetsCompactWrapper.tsx │ ├── AssetsList.tsx │ ├── CloseBuffers.tsx │ ├── NewProgramForm.tsx │ ├── TransferUpgradeAuthority.tsx │ └── UpgradeProgram.tsx ├── Button.tsx ├── ButtonGroup.tsx ├── ConnectWalletButton.tsx ├── DelegateCard.tsx ├── DepositTokensButton.tsx ├── Dialect │ └── index.tsx ├── Divider.tsx ├── DropdownMenu │ ├── DropdownMenu.tsx │ └── index.css ├── ErrorBoundary.tsx ├── Footer.tsx ├── ForwarderProgram │ └── ForwarderProgram.tsx ├── Gateway │ ├── GatewayButton.tsx │ ├── GatewayCard.tsx │ └── GatewayProvider.tsx ├── GovernancePower │ ├── GovernancePowerCard.tsx │ ├── GovernancePowerForRole.tsx │ └── Power │ │ ├── VSRCard.tsx │ │ ├── Vanilla │ │ ├── Deposit.tsx │ │ ├── VanillaCard.tsx │ │ ├── VanillaVotingPower.tsx │ │ └── useDepositCallback.tsx │ │ └── VotingPowerCards.tsx ├── GovernedAccountsTabs.tsx ├── Header.tsx ├── ImageTextSelection.tsx ├── ImgWithLoader.tsx ├── InlineNotification.tsx ├── InstructionDataUI.tsx ├── Loading.tsx ├── Mango │ ├── ProgramSelector.tsx │ └── useProgramSelector.tsx ├── Members │ ├── AddMemberForm.tsx │ ├── MemberOverview.tsx │ ├── MembersTabs.tsx │ ├── RevokeMyMembership.tsx │ ├── types.ts │ └── useMembers.tsx ├── Modal.tsx ├── MultiChoiceForm.tsx ├── MultiChoiceVotes.tsx ├── NFTGallery.tsx ├── NFTS │ ├── NFTSCompactWrapper.tsx │ └── NFTSelector.tsx ├── NFTVotePluginSettingsDisplay.tsx ├── NavBar.tsx ├── NewRealmWizard │ ├── CreateDAOWizard.tsx │ ├── PageTemplate.tsx │ └── components │ │ ├── AdvancedOptionsDropdown.tsx │ │ ├── AdviceBox.tsx │ │ ├── CivicPassSelector.tsx │ │ ├── FormField.tsx │ │ ├── FormFooter.tsx │ │ ├── FormHeader.tsx │ │ ├── FormSummary.tsx │ │ ├── GradientCheckmarkCircle.tsx │ │ ├── Input.tsx │ │ ├── NFTCollectionModal.tsx │ │ ├── NFTCollectionSelector.tsx │ │ ├── SimpleCheckmarkCircle.tsx │ │ ├── TokenInfoTable.tsx │ │ ├── TokenInput.tsx │ │ └── steps │ │ ├── AddCouncilForm.tsx │ │ ├── AddNFTCollectionForm.tsx │ │ ├── BasicDetailsForm.tsx │ │ ├── CommunityTokenDetailsForm.tsx │ │ ├── InviteMembersForm.tsx │ │ └── YesVotePercentageThresholdForm.tsx ├── NftVotingCountingModal.tsx ├── Notification.tsx ├── PageBodyContainer.tsx ├── Pagination.tsx ├── PreviousRouteBtn.tsx ├── Profile │ ├── Profile.tsx │ ├── ProfileImage.tsx │ ├── ProfileName.tsx │ ├── ProfilePopup.tsx │ ├── ShortAddress.tsx │ ├── index.ts │ └── useProfile.ts ├── ProgressBar.tsx ├── ProposalActions.tsx ├── ProposalCard.tsx ├── ProposalExecutionCard.tsx ├── ProposalFilter.tsx ├── ProposalMyVoteBadge.tsx ├── ProposalRemainingVotingTime.tsx ├── ProposalSelectCard.tsx ├── ProposalSignatories.tsx ├── ProposalSorting.tsx ├── ProposalStateBadge.tsx ├── ProposalTimeStatus.tsx ├── ProposalTimer.tsx ├── ProposalTopVotersBubbleChart.tsx ├── ProposalTopVotersList.tsx ├── ProposalVoteResults.tsx ├── ProposalVoterNftChart.tsx ├── ProposalVotingPower │ ├── LockedCommunityNFTRecordVotingPower.tsx │ ├── LockedCommunityVotingPower.tsx │ ├── NftVotingPower.tsx │ ├── PluginVotingPower.tsx │ ├── QuadraticVotingInfoModal.tsx │ ├── QuadraticVotingPower.tsx │ ├── TokenHaverVotingPower.tsx │ ├── VotingPower.tsx │ ├── VotingPowerPct.tsx │ ├── depositTokensVSR.ts │ ├── getNumTokens.ts │ └── index.tsx ├── QuorumProgress.tsx ├── RealmHeader.tsx ├── SelectInstructionType.tsx ├── SelectPrimaryDelegators.tsx ├── SendNft.tsx ├── Slider.tsx ├── SocialIcons.tsx ├── Switch.tsx ├── TableElements.tsx ├── Tabs.tsx ├── TermsPopup.tsx ├── Text.tsx ├── ThemeSwitch.tsx ├── TokenBalance │ ├── ClaimUnreleasedNFTs.tsx │ ├── TokenBalanceCardWrapper.tsx │ ├── TokenDeposit.tsx │ ├── VanillaAccountDetails.tsx │ └── VanillaWithdrawTokensButton.tsx ├── Tooltip.tsx ├── TransactionLoader.tsx ├── TreasuryAccount │ ├── AccountHeader.tsx │ ├── AccountItem.tsx │ ├── AccountItemNFT.tsx │ ├── AccountOverview.tsx │ ├── AccountsCompactWrapper.tsx │ ├── AccountsItems.tsx │ ├── BaseAccountHeader.tsx │ ├── ConvertToMsol.tsx │ ├── ConvertToStSol.tsx │ ├── CreateAta.tsx │ ├── DepositLabel.tsx │ ├── DepositNFTFromWallet.tsx │ ├── HoldTokensTotalPrice.tsx │ ├── MangoModal.tsx │ ├── NFTAccountSelect.tsx │ ├── ProposalOptions.tsx │ ├── SendTokens.tsx │ └── Trade.tsx ├── TypeaheadSelect │ └── index.tsx ├── VoteCommentModal.tsx ├── VotePanel │ ├── CastMultiVoteButtons.tsx │ ├── CastVoteButtons.tsx │ ├── VetoButtons.tsx │ ├── VotePanel.tsx │ ├── YouVoted.tsx │ ├── hooks.ts │ ├── index.ts │ ├── useCanVote.ts │ └── useDelegators.ts ├── VoteResultStatus.tsx ├── VoteResults.tsx ├── VoteResultsBar.tsx ├── VoteResultsForRealmProposal.tsx ├── VotingRules.tsx ├── WalletQRCode.tsx ├── chat │ ├── Comment.tsx │ ├── DiscussionForm.tsx │ ├── DiscussionPanel.tsx │ └── LazyLoadComment.tsx ├── explorer │ ├── inspectorButton.tsx │ └── tools.ts ├── icons.jsx ├── inputs │ ├── ChangeNonprofitSelect.tsx │ ├── Checkbox.tsx │ ├── DateTimePicker.tsx │ ├── ErrorField.tsx │ ├── GovernedAccountSelect.tsx │ ├── Input.tsx │ ├── Select.tsx │ ├── Textarea.tsx │ ├── TokenAmountInput.tsx │ ├── TokenMintInput.tsx │ ├── TokenSelect.tsx │ └── styles.tsx ├── instructions │ ├── ExecuteAllInstructionButton.tsx │ ├── ExecuteInstructionButton.tsx │ ├── FlagInstructionErrorButton.tsx │ ├── InstructionAccount.tsx │ ├── InstructionDataView.tsx │ ├── InstructionProgram.tsx │ ├── TransactionCard.tsx │ ├── TransactionInstructionCard.tsx │ ├── TransactionPanel.tsx │ ├── programs │ │ ├── associatedTokenAccount.tsx │ │ ├── bpfUpgradeableLoader.tsx │ │ ├── dual.tsx │ │ ├── governance.tsx │ │ ├── jupiterRef.tsx │ │ ├── lido.tsx │ │ ├── mangoV4.tsx │ │ ├── marinade.tsx │ │ ├── nameService.tsx │ │ ├── names.ts │ │ ├── nftVotingClient.tsx │ │ ├── poseidon.tsx │ │ ├── raydium.tsx │ │ ├── solend.tsx │ │ ├── splToken.tsx │ │ ├── stake.tsx │ │ ├── stakeSanctum.tsx │ │ ├── switchboard.tsx │ │ ├── symmetryV2.tsx │ │ ├── system.tsx │ │ ├── tokenAuction.tsx │ │ ├── validatordao.tsx │ │ └── voteStakeRegistry.tsx │ └── tools.tsx └── treasuryV2 │ ├── Details │ ├── AuxiliaryWalletDetails │ │ ├── Header.tsx │ │ └── index.tsx │ ├── DomainsDetails │ │ ├── Header.tsx │ │ ├── Info │ │ │ ├── Domain.tsx │ │ │ └── index.tsx │ │ └── index.tsx │ ├── ExploreLink.tsx │ ├── MintDetails │ │ ├── Header.tsx │ │ └── index.tsx │ ├── NFTCollectionDetails │ │ ├── Header.tsx │ │ └── index.tsx │ ├── NoWalletSelected.tsx │ ├── ProgramsDetails │ │ ├── Header.tsx │ │ ├── Info │ │ │ ├── Overview │ │ │ │ ├── Program.tsx │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ └── index.tsx │ ├── RealmAuthorityDetails │ │ ├── Config.tsx │ │ ├── Header.tsx │ │ └── index.tsx │ ├── Section.tsx │ ├── StakeDetails │ │ ├── Header.tsx │ │ ├── Info │ │ │ ├── Overview │ │ │ │ ├── Stake.tsx │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ └── index.tsx │ ├── StickyScrolledContainer.tsx │ ├── TokenDetails │ │ ├── Activity.tsx │ │ ├── Header.tsx │ │ ├── Investments.tsx │ │ └── index.tsx │ ├── TokenOwnerRecordDetails │ │ ├── Header.tsx │ │ ├── ProposalDetails.tsx │ │ ├── RealmDetails.tsx │ │ ├── VoteProposalModal.tsx │ │ └── index.tsx │ ├── WalletDetails │ │ ├── AddAssetModal │ │ │ └── index.tsx │ │ ├── Header.tsx │ │ ├── Info │ │ │ ├── Dashboard.tsx │ │ │ ├── Rules │ │ │ │ └── index.tsx │ │ │ ├── Statistics.tsx │ │ │ ├── Tab.tsx │ │ │ └── index.tsx │ │ └── index.tsx │ ├── index.tsx │ ├── tabState.ts │ └── treasurySelectStore.ts │ ├── TotalValueTitle.tsx │ ├── WalletList │ ├── AuxiliaryWalletListItem │ │ └── index.tsx │ ├── NewWalletButton.tsx │ ├── WalletListItem │ │ ├── AssetList │ │ │ ├── Collapsible.tsx │ │ │ ├── DomainListItem.tsx │ │ │ ├── ListItem.tsx │ │ │ ├── MangoListItem.tsx │ │ │ ├── MintListItem.tsx │ │ │ ├── NFTList.tsx │ │ │ ├── NFTListItem.tsx │ │ │ ├── OtherAssetsList.tsx │ │ │ ├── ProgramsListItem.tsx │ │ │ ├── RealmAuthorityListItem.tsx │ │ │ ├── StakeListItem.tsx │ │ │ ├── TokenList.tsx │ │ │ ├── TokenListItem.tsx │ │ │ ├── TokenOwnerRecordListItem.tsx │ │ │ ├── TokenOwnerRecordsList.tsx │ │ │ ├── UnknownAssetListItem.tsx │ │ │ ├── index.tsx │ │ │ └── useGovernanceNfts.ts │ │ ├── AssetsPreviewIconList.tsx │ │ ├── SummaryButton.tsx │ │ ├── index.tsx │ │ └── typeGuards.ts │ └── index.tsx │ └── icons │ ├── CommunityMintIcon.tsx │ ├── CouncilMintIcon.tsx │ ├── MintIcon.tsx │ ├── NFTCollectionPreviewIcon.tsx │ ├── PlainRealmLogo.tsx │ ├── SelectedWalletIcon.tsx │ ├── TokenIcon.tsx │ ├── UnknownTokenIcon.tsx │ └── UnselectedWalletIcon.tsx ├── constants ├── endpoints.ts ├── flags.ts ├── plugins.ts └── pubkeys │ └── lido.ts ├── hooks ├── PythNetwork │ └── useScalingFactor.ts ├── handleGovernanceAssetsStore.ts ├── handleRouterHistory.ts ├── instructions │ └── useTransferCnftInstruction.ts ├── parcl │ └── useScalingFactor.ts ├── queries │ ├── addresses │ │ ├── tokenOwnerRecord.ts │ │ └── voteRecord.ts │ ├── bufferAuthority.ts │ ├── digitalAssets.ts │ ├── domain.ts │ ├── governance.ts │ ├── governanceAccount.ts │ ├── governancePower.tsx │ ├── jupiterPrice.ts │ ├── mango.ts │ ├── mintInfo.ts │ ├── nft.ts │ ├── parsedAccountInfo.ts │ ├── pluginRegistrar.ts │ ├── plugins │ │ ├── nftVoter.ts │ │ └── vsr.ts │ ├── proposal.ts │ ├── proposalTransaction.ts │ ├── queryClient.ts │ ├── realm.ts │ ├── realmConfig.ts │ ├── tokenAccount.ts │ ├── tokenMetadata.ts │ ├── tokenOwnerRecord.ts │ ├── useProgramVersionQuery.ts │ └── voteRecord.ts ├── selectedRealm │ ├── useGoverningTokenMint.ts │ ├── useRoleOfToken.ts │ ├── useSelectedRealmPubkey.ts │ └── useSelectedRealmRegistryEntry.ts ├── useAccountActivity.ts ├── useAccountInvestments │ ├── index.ts │ ├── loadData │ │ ├── index.ts │ │ └── loadSolendStrategies.ts │ └── staticInvestments.ts ├── useCreatePostMessageIx.ts ├── useCreateProposal.ts ├── useDelegatorAwareVoterWeight.ts ├── useDestination.ts ├── useFindGovernanceByTreasury.ts ├── useFormatTokenAmount.ts ├── useGovernanceAssets.ts ├── useGovernanceForGovernedAddress.ts ├── useGovernanceSelect.ts ├── useHasVoteTimeExpired.ts ├── useIsBeyondTimestamp.ts ├── useJoinRealm.ts ├── useLegacyConnectionContext.ts ├── useMangoAccountsTreasury.ts ├── useMangoV4.tsx ├── useMaxVoteRecord.ts ├── useNftRegistrar.ts ├── useNftRegistrarCollection.ts ├── usePrevious.ts ├── useProgramVersion.ts ├── useProposal.tsx ├── useProposalCreationButtonTooltip.ts ├── useProposalTransactions.ts ├── useProposalVotes.tsx ├── useProposalVotesForRealm.ts ├── useQueryContext.tsx ├── useRealm.tsx ├── useRealmAccount.ts ├── useRealmProposalVotes.ts ├── useRealmVoterWeightPlugins.ts ├── useRouterHistory.ts ├── useRpcContext.ts ├── useSignatories.ts ├── useSolanaUnixNow.ts ├── useSubmitVote.ts ├── useTokenAccountBalance.ts ├── useTotalTokenValue.ts ├── useTotalTreasuryPrice.ts ├── useTreasuryAddressForGovernance.ts ├── useTreasuryInfo │ ├── assembleWallets.tsx │ ├── calculateTokenCountAndValue.ts │ ├── calculateTotalValue.ts │ ├── convertAccountToAsset.tsx │ ├── getAccountAssetCount.ts │ ├── getAccountValue.ts │ ├── getDomains.ts │ ├── getRulesFromAccount.ts │ ├── groupDomainsByWallet.ts │ ├── groupProgramsByWallet.ts │ └── index.tsx ├── useUserGovTokenAccount.ts ├── useUserOrDelegator.ts ├── useViewAsWallet.ts ├── useVoteByCouncilToggle.ts ├── useVoteRecords.ts ├── useVotingClients.ts ├── useVotingTokenOwnerRecords.ts ├── useVsrMode.ts ├── useWalletDeprecated.tsx └── useWalletOnePointOh.ts ├── hub ├── .eslintrc.json ├── .prettierrc ├── App.tsx ├── components │ ├── AuthorAvatar │ │ └── index.tsx │ ├── AuthorHovercard │ │ └── index.tsx │ ├── DiscoverPage │ │ ├── AllOrgs │ │ │ ├── CategorySelector │ │ │ │ └── index.tsx │ │ │ ├── gql.ts │ │ │ └── index.tsx │ │ ├── Hackathon │ │ │ ├── Trophy.tsx │ │ │ └── index.tsx │ │ ├── LargeCard │ │ │ ├── gql.ts │ │ │ └── index.tsx │ │ ├── NotableDAOTooling │ │ │ └── index.tsx │ │ ├── NotableDefi │ │ │ └── index.tsx │ │ ├── NotableGames │ │ │ └── index.tsx │ │ ├── NotableNFTs │ │ │ └── index.tsx │ │ ├── NotableWeb3 │ │ │ └── index.tsx │ │ ├── Noteworthy │ │ │ ├── audius.png │ │ │ ├── index.tsx │ │ │ ├── monkedao.png │ │ │ ├── sms.png │ │ │ └── staratlas.png │ │ ├── Popular │ │ │ └── index.tsx │ │ ├── Sidebar │ │ │ ├── Announcements │ │ │ │ ├── Post │ │ │ │ │ └── index.tsx │ │ │ │ ├── gql.ts │ │ │ │ └── index.tsx │ │ │ ├── Trending │ │ │ │ ├── Org │ │ │ │ │ ├── gql.ts │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── SmallCard │ │ │ ├── gql.ts │ │ │ └── index.tsx │ │ ├── Title │ │ │ └── index.tsx │ │ ├── gql.ts │ │ └── index.tsx │ ├── EcosystemFeed │ │ ├── Page │ │ │ ├── gql.ts │ │ │ └── index.tsx │ │ └── index.tsx │ ├── EcosystemHeader │ │ ├── banner.png │ │ ├── icon.png │ │ └── index.tsx │ ├── EditDiscoverPage │ │ ├── RealmSelect │ │ │ └── index.tsx │ │ ├── SpotlightEditor │ │ │ └── index.tsx │ │ ├── TrendingSelect │ │ │ └── index.tsx │ │ ├── gql.ts │ │ └── index.tsx │ ├── EditMetadata │ │ ├── EditForms │ │ │ ├── BasicInfo │ │ │ │ └── index.tsx │ │ │ ├── FAQ │ │ │ │ └── index.tsx │ │ │ ├── Gallery │ │ │ │ ├── Item.tsx │ │ │ │ └── index.tsx │ │ │ ├── Overview │ │ │ │ └── index.tsx │ │ │ ├── Roadmap │ │ │ │ └── index.tsx │ │ │ ├── Tab │ │ │ │ └── index.tsx │ │ │ ├── Team │ │ │ │ ├── Member.tsx │ │ │ │ └── index.tsx │ │ │ ├── common │ │ │ │ ├── FieldDescription.tsx │ │ │ │ ├── FieldHeader.tsx │ │ │ │ ├── FieldIconPreview.tsx │ │ │ │ ├── FieldRichTextEditor.tsx │ │ │ │ └── FieldSelect.tsx │ │ │ ├── gql.ts │ │ │ └── index.tsx │ │ ├── gql.ts │ │ └── index.tsx │ ├── EditRealmConfig │ │ ├── AddressValidator │ │ │ └── index.tsx │ │ ├── AdvancedOptions │ │ │ └── index.tsx │ │ ├── CommunityStructure │ │ │ └── index.tsx │ │ ├── CouncilStructure │ │ │ └── index.tsx │ │ ├── Form │ │ │ └── index.tsx │ │ ├── ManageInformation │ │ │ └── index.tsx │ │ ├── NFTValidator │ │ │ └── index.tsx │ │ ├── RealmHeader │ │ │ └── index.tsx │ │ ├── Summary │ │ │ └── index.tsx │ │ ├── TokenTypeSelector │ │ │ └── index.tsx │ │ ├── UpdatesList │ │ │ └── index.tsx │ │ ├── VotingStructureSelector │ │ │ ├── ChainToggle.tsx │ │ │ ├── CivicConfigurator.tsx │ │ │ ├── Custom.tsx │ │ │ ├── NFT.tsx │ │ │ ├── QVConfigurator.tsx │ │ │ └── index.tsx │ │ ├── createTransaction.ts │ │ ├── fetchConfig.ts │ │ ├── gql.ts │ │ └── index.tsx │ ├── EditWalletRules │ │ ├── AdvancedOptions │ │ │ └── index.tsx │ │ ├── CommunityDetails │ │ │ └── index.tsx │ │ ├── CouncilDetails │ │ │ └── index.tsx │ │ ├── Form │ │ │ └── index.tsx │ │ ├── ProposalDetails │ │ │ └── index.tsx │ │ ├── ProposalVoteType │ │ │ └── index.tsx │ │ ├── RulesDetailsInputs.tsx │ │ ├── SectionBlock │ │ │ └── index.tsx │ │ ├── SectionHeader │ │ │ └── index.tsx │ │ ├── SliderValue │ │ │ └── index.tsx │ │ ├── Summary │ │ │ └── index.tsx │ │ ├── SummaryItem │ │ │ └── index.tsx │ │ ├── UpdatesList │ │ │ ├── NewRulesList.tsx │ │ │ └── index.tsx │ │ ├── ValueBlock │ │ │ └── index.tsx │ │ ├── ValueDescription │ │ │ └── index.tsx │ │ ├── ValueLabel │ │ │ └── index.tsx │ │ ├── VoteTippingSelector │ │ │ └── index.tsx │ │ ├── VotingDuration │ │ │ └── index.tsx │ │ ├── WalletDescription │ │ │ └── index.tsx │ │ ├── constants.ts │ │ ├── createTransaction.ts │ │ ├── gql.ts │ │ ├── index.tsx │ │ └── types.ts │ ├── FeedItem │ │ ├── AdditionalCommentTree │ │ │ └── index.tsx │ │ ├── Back │ │ │ └── index.tsx │ │ ├── CommentTree │ │ │ ├── Comment │ │ │ │ ├── Controls │ │ │ │ │ ├── gql.ts │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── Footer │ │ │ └── index.tsx │ │ ├── Header │ │ │ └── index.tsx │ │ ├── ReplyBox │ │ │ ├── gql.ts │ │ │ └── index.tsx │ │ ├── Title │ │ │ └── index.tsx │ │ ├── gql.ts │ │ └── index.tsx │ ├── FeedItemComment │ │ ├── ViewAllCommentsButton │ │ │ └── index.tsx │ │ ├── gql.ts │ │ └── index.tsx │ ├── GlobalFooter │ │ └── index.tsx │ ├── GlobalHeader │ │ ├── CreateHub │ │ │ ├── image.png │ │ │ └── index.tsx │ │ ├── Links │ │ │ └── index.tsx │ │ ├── LinksDropdown │ │ │ └── index.tsx │ │ ├── Logo.tsx │ │ ├── MinimalHeader.tsx │ │ ├── User │ │ │ ├── Connect.tsx │ │ │ ├── Connected.tsx │ │ │ ├── DialectNotifications │ │ │ │ ├── DialectNotifications.tsx │ │ │ │ └── index.ts │ │ │ ├── DropdownButton.tsx │ │ │ ├── Loading.tsx │ │ │ ├── UserDropdown.tsx │ │ │ ├── gql.ts │ │ │ └── index.tsx │ │ └── index.tsx │ ├── GlobalStats │ │ ├── DataFetch │ │ │ └── index.tsx │ │ ├── Logs │ │ │ └── index.tsx │ │ ├── NumMembers │ │ │ └── index.tsx │ │ ├── NumNFTRealms │ │ │ └── index.tsx │ │ ├── NumProposals │ │ │ └── index.tsx │ │ ├── NumRealms │ │ │ └── index.tsx │ │ ├── NumVoteRecords │ │ │ └── index.tsx │ │ ├── Stats.tsx │ │ ├── TotalValue │ │ │ └── index.tsx │ │ ├── ValueByDao │ │ │ └── index.tsx │ │ ├── common │ │ │ ├── Label.tsx │ │ │ ├── Value.tsx │ │ │ └── index.tsx │ │ ├── data │ │ │ ├── getGovernances.ts │ │ │ ├── getTokenAmount.ts │ │ │ └── index.ts │ │ ├── gql.ts │ │ └── index.tsx │ ├── HeaderTokenPrice │ │ └── index.tsx │ ├── Home │ │ ├── Feed │ │ │ ├── AdditionalPage │ │ │ │ ├── EnteredViewport.tsx │ │ │ │ └── index.tsx │ │ │ ├── Controls │ │ │ │ └── index.tsx │ │ │ ├── Empty │ │ │ │ └── index.tsx │ │ │ ├── EndOfFeed │ │ │ │ └── index.tsx │ │ │ ├── FeedItem │ │ │ │ ├── Controls │ │ │ │ │ ├── gql.ts │ │ │ │ │ └── index.tsx │ │ │ │ ├── Header │ │ │ │ │ └── index.tsx │ │ │ │ ├── Proposal │ │ │ │ │ ├── Quorum.tsx │ │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ │ ├── InitialPage │ │ │ │ └── index.tsx │ │ │ ├── gql.ts │ │ │ └── index.tsx │ │ ├── Sidebar │ │ │ ├── About │ │ │ │ └── index.tsx │ │ │ ├── Treasury │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── gql.ts │ │ └── index.tsx │ ├── HomeLayout │ │ └── index.tsx │ ├── Hub │ │ ├── About │ │ │ └── index.tsx │ │ ├── Divider │ │ │ └── index.tsx │ │ ├── Faq │ │ │ └── index.tsx │ │ ├── Gallery │ │ │ └── index.tsx │ │ ├── ResourceList │ │ │ └── index.tsx │ │ ├── Roadmap │ │ │ ├── CompletedSvg.tsx │ │ │ ├── DashesSvg.tsx │ │ │ ├── Item.tsx │ │ │ ├── NotCompletedSvg.tsx │ │ │ ├── StartSvg.tsx │ │ │ └── index.tsx │ │ ├── SideCard │ │ │ ├── Bounties │ │ │ │ └── index.tsx │ │ │ ├── Tab.tsx │ │ │ ├── Trending │ │ │ │ ├── gql.ts │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── Stats │ │ │ ├── Stat.tsx │ │ │ ├── gql.ts │ │ │ └── index.tsx │ │ ├── Team │ │ │ ├── avatar-default.jpg │ │ │ └── index.tsx │ │ ├── gql.ts │ │ └── index.tsx │ ├── LoadingDots │ │ └── index.tsx │ ├── MobileRealmSearchNavigation │ │ └── index.tsx │ ├── MyFeed │ │ ├── Controls │ │ │ └── index.tsx │ │ ├── Empty │ │ │ └── index.tsx │ │ ├── Page │ │ │ ├── gql.ts │ │ │ └── index.tsx │ │ └── index.tsx │ ├── NewPostEditor │ │ ├── gql.ts │ │ └── index.tsx │ ├── NewWallet │ │ ├── NewWallet.tsx │ │ ├── useGovernanceDefaults.ts │ │ └── useNewWalletTransaction.ts │ ├── OrgCategory │ │ └── index.tsx │ ├── ProposalCreationProgress │ │ └── index.tsx │ ├── ProposalStateBadge │ │ └── index.tsx │ ├── RealmBanner │ │ └── index.tsx │ ├── RealmHeader │ │ ├── ExternalLinkIcon.tsx │ │ ├── ExternalLinkMenuItem.tsx │ │ ├── Tab.tsx │ │ ├── gql.ts │ │ └── index.tsx │ ├── RealmHeaderIcon │ │ └── index.tsx │ ├── RealmHovercard │ │ ├── gql.ts │ │ └── index.tsx │ ├── RealmIcon │ │ └── index.tsx │ ├── RealmSearchNavigation │ │ ├── gql.ts │ │ └── index.tsx │ ├── RealmSearchSelector │ │ ├── gql.ts │ │ └── index.tsx │ ├── RealmSelector │ │ ├── gql.ts │ │ └── index.tsx │ ├── RichTextDocumentDisplay │ │ ├── BlockNode │ │ │ ├── AnchorNode │ │ │ │ └── index.tsx │ │ │ ├── InlineNode │ │ │ │ └── index.tsx │ │ │ ├── PublicKeyNode │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── ImageNode │ │ │ └── index.tsx │ │ ├── TwitterEmbedAttachment │ │ │ └── index.tsx │ │ ├── TwitterEmbedNode │ │ │ └── index.tsx │ │ └── index.tsx │ ├── branding │ │ ├── RealmCircle.tsx │ │ ├── RealmCircleImage.tsx │ │ ├── RealmsLogo.tsx │ │ ├── SolanaLogo.tsx │ │ ├── WelcomeHand.tsx │ │ └── logoimage.png │ ├── controls │ │ ├── Button │ │ │ ├── Primary.tsx │ │ │ ├── PrimaryAlt.tsx │ │ │ ├── Secondary.tsx │ │ │ ├── SecondaryAlt.tsx │ │ │ ├── SecondaryRed.tsx │ │ │ ├── Tertiary.tsx │ │ │ └── index.tsx │ │ ├── ButtonToggle │ │ │ └── index.tsx │ │ ├── CopyAddressButton │ │ │ └── index.tsx │ │ ├── Dialog │ │ │ └── index.tsx │ │ ├── Input │ │ │ └── index.tsx │ │ ├── Radio │ │ │ └── index.tsx │ │ ├── RichTextEditor │ │ │ ├── index.css │ │ │ ├── index.tsx │ │ │ └── styles.ts │ │ ├── Select │ │ │ └── index.tsx │ │ ├── Slider │ │ │ └── index.tsx │ │ ├── Textarea │ │ │ └── index.tsx │ │ ├── Tooltip │ │ │ └── index.tsx │ │ └── TypeaheadSelect │ │ │ └── index.tsx │ └── icons │ │ ├── Civic.tsx │ │ ├── ExternalLink.tsx │ │ ├── Faq.tsx │ │ ├── FaqOutline.tsx │ │ ├── NFT.tsx │ │ ├── RealmsLogo.tsx │ │ └── Twitter.tsx ├── hooks │ ├── useCachedValue.ts │ ├── useCluster.ts │ ├── useJWT.ts │ ├── useMutation.ts │ ├── usePromise.ts │ ├── useProposalCreationProgress.ts │ ├── useQuery.ts │ ├── useRealmPublicKey.ts │ ├── useToast.ts │ ├── useUserPrefs.ts │ ├── useWallet.ts │ └── useWalletSelector.ts ├── lib │ ├── abbreviateAddress.ts │ ├── abbreviateNumber.ts │ ├── capitalize.ts │ ├── constants.ts │ ├── cx.ts │ ├── estimateRealmUrlId.ts │ ├── filterUniqueBy.ts │ ├── formatDuration.ts │ ├── formatNumber.ts │ ├── getDefaultBannerUrl.ts │ ├── getGraphqlJsonSchema.ts │ ├── getUserLocale.ts │ ├── gqlCacheStorage.ts │ ├── image.ts │ ├── ntext.ts │ ├── richText.ts │ └── signature.ts ├── providers │ ├── Cluster │ │ └── index.tsx │ ├── GraphQL │ │ ├── exchanges │ │ │ ├── auth.ts │ │ │ ├── graphcache.ts │ │ │ └── index.ts │ │ └── index.tsx │ ├── JWT │ │ └── index.tsx │ ├── Proposal │ │ └── createProposal.ts │ ├── Root.tsx │ ├── Toast │ │ └── index.tsx │ ├── UserPrefs │ │ └── index.tsx │ ├── Wallet │ │ └── index.tsx │ └── WalletSelector │ │ └── index.tsx ├── stores │ ├── userCreatedFeedItemCommentReplies.ts │ └── userCreatedTopLevelFeedItemRepliesStore.ts ├── tsconfig.json └── types │ ├── FeedItemCommentVoteType.ts │ ├── FeedItemSort.ts │ ├── FeedItemType.ts │ ├── FeedItemVoteType.ts │ ├── FormCallbacks.ts │ ├── FormProps.ts │ ├── GovernanceTokenType.ts │ ├── GovernanceVoteTipping.ts │ ├── ProposalState.ts │ ├── ProposalUserVoteType.ts │ ├── RealmCategory.ts │ ├── Result.ts │ ├── RichTextDocument.ts │ ├── RoadmapItemStatus.ts │ └── decoders │ ├── BigNumber.ts │ ├── FeedItemCommentVoteType.ts │ ├── FeedItemType.ts │ ├── FeedItemVoteType.ts │ ├── GovernanceTokenType.ts │ ├── GovernanceVoteTipping.ts │ ├── ProposalState.ts │ ├── ProposalUserVoteType.ts │ ├── PublicKey.ts │ ├── RealmCategory.ts │ ├── RichTextDocument.ts │ └── RoadmapItemStatus.ts ├── idls ├── ido_pool.json ├── nft_voter.ts ├── nft_voter_v2.ts └── serum_gov.json ├── jest.config.js ├── models ├── accounts │ ├── getAccountsByFilter.ts │ └── index.ts ├── api.ts ├── proposal │ ├── buildTopVoters.ts │ ├── calculateMintMaxVoteWeight.ts │ ├── calulateMaxVoteScore.ts │ ├── getSignatories.ts │ ├── getTokenOwnerRecords.ts │ ├── getVoteRecords.ts │ └── index.ts ├── registry │ └── api.ts ├── treasury │ ├── Asset.ts │ ├── Domain.ts │ ├── Program.ts │ └── Wallet.ts ├── types.ts ├── voteRecords.ts └── voteWeights.ts ├── netlify.toml ├── next-env.d.ts ├── next.config.js ├── package.json ├── pages ├── _app.tsx ├── _document.tsx ├── _error.js ├── api │ ├── daoProgramStatistics.api.ts │ ├── daoStatistics.api.ts │ ├── daoVoteStatistics.api.ts │ ├── daoVoteUserStatistics.api.ts │ ├── getDecodedMangoInstructionsFromProposal.api.ts │ ├── hello.api.ts │ ├── mangoAccountsWithDeposit.api.ts │ ├── splGovernancePrograms.api.ts │ ├── tools │ │ └── realms.ts │ └── vsrDeposits.api.ts ├── code.tsx ├── dao │ └── [symbol] │ │ ├── account │ │ ├── Account.tsx │ │ ├── DelegatorOptions.tsx │ │ ├── DelegatorsList.tsx │ │ └── me.tsx │ │ ├── assets │ │ └── index.tsx │ │ ├── editConfig.tsx │ │ ├── gallery │ │ └── index.tsx │ │ ├── index.tsx │ │ ├── members │ │ ├── Members.tsx │ │ ├── VsrMembers.tsx │ │ └── index.tsx │ │ ├── params │ │ ├── MetadataCreationModal.tsx │ │ ├── SetRealmAuthorityModal.tsx │ │ ├── components │ │ │ ├── AccountsView.tsx │ │ │ ├── ParamsView.tsx │ │ │ └── StatsView.tsx │ │ └── index.tsx │ │ ├── program │ │ └── new.tsx │ │ ├── proposal │ │ ├── [pk] │ │ │ ├── ProposalWarnings.tsx │ │ │ ├── explore.tsx │ │ │ └── index.tsx │ │ ├── components │ │ │ ├── ComandLineInfo.tsx │ │ │ ├── DryRunInstructionBtn.tsx │ │ │ ├── GovernanceAccountSelect.tsx │ │ │ ├── GovernedAccountSelect.tsx │ │ │ ├── InstructionContentContainer.tsx │ │ │ ├── MyProposalsBtn.tsx │ │ │ ├── NewProposalBtn.tsx │ │ │ ├── StakeAccountSelect.tsx │ │ │ ├── VoteBySwitch.tsx │ │ │ ├── forms │ │ │ │ └── RealmConfigFormComponent.tsx │ │ │ └── instructions │ │ │ │ ├── BurnTokens.tsx │ │ │ │ ├── Change │ │ │ │ └── ChangeDonation.tsx │ │ │ │ ├── CloseMultipleTokenAccounts.tsx │ │ │ │ ├── CloseTokenAccount.tsx │ │ │ │ ├── CreateAssociatedTokenAccount.tsx │ │ │ │ ├── CreateTokenMetadata.tsx │ │ │ │ ├── CustomBase64.tsx │ │ │ │ ├── DistrubtionProgram │ │ │ │ ├── CloseVaults.tsx │ │ │ │ └── FillVaults.tsx │ │ │ │ ├── Dual │ │ │ │ ├── DualAirdrop.tsx │ │ │ │ ├── DualDelegate.tsx │ │ │ │ ├── DualExercise.tsx │ │ │ │ ├── DualGso.tsx │ │ │ │ ├── DualGsoWithdraw.tsx │ │ │ │ ├── DualVoteDeposit.tsx │ │ │ │ ├── DualVoteDepositWithdraw.tsx │ │ │ │ ├── DualWithdraw.tsx │ │ │ │ ├── InitStrike.tsx │ │ │ │ ├── LiquidityStakingOption.tsx │ │ │ │ └── StakingOption.tsx │ │ │ │ ├── Empty.tsx │ │ │ │ ├── FormCreator.tsx │ │ │ │ ├── GatewayPlugin │ │ │ │ ├── ConfigureGateway.tsx │ │ │ │ └── CreateRegistrar.tsx │ │ │ │ ├── Identity │ │ │ │ ├── AddKeyToDID.tsx │ │ │ │ ├── AddServiceToDID.tsx │ │ │ │ ├── RemoveKeyFromDID.tsx │ │ │ │ └── RemoveServiceFromDID.tsx │ │ │ │ ├── JoinDAO.tsx │ │ │ │ ├── Mango │ │ │ │ └── MangoV4 │ │ │ │ │ ├── AltExtend.tsx │ │ │ │ │ ├── AltSet.tsx │ │ │ │ │ ├── EditToken.tsx │ │ │ │ │ ├── GroupEdit.tsx │ │ │ │ │ ├── IdlSetBuffer.tsx │ │ │ │ │ ├── IxGateSet.tsx │ │ │ │ │ ├── OpenBookEditMarket.tsx │ │ │ │ │ ├── OpenBookRegisterMarket.tsx │ │ │ │ │ ├── PerpCreate.tsx │ │ │ │ │ ├── PerpEdit.tsx │ │ │ │ │ ├── StubOracleCreate.tsx │ │ │ │ │ ├── StubOracleSet.tsx │ │ │ │ │ ├── TokenAddBank.tsx │ │ │ │ │ ├── TokenRegister.tsx │ │ │ │ │ ├── TokenRegisterTrustless.tsx │ │ │ │ │ ├── WithdrawPerpFees.tsx │ │ │ │ │ └── WithdrawTokenFees.tsx │ │ │ │ ├── Mean │ │ │ │ ├── MeanCreateAccount.tsx │ │ │ │ ├── MeanCreateStream.tsx │ │ │ │ ├── MeanFundAccount.tsx │ │ │ │ ├── MeanTransferStream.tsx │ │ │ │ ├── MeanWithdrawFromAccount.tsx │ │ │ │ ├── SelectStream.tsx │ │ │ │ └── SelectStreamingAccount.tsx │ │ │ │ ├── Mint.tsx │ │ │ │ ├── NftVotingPlugin │ │ │ │ ├── ConfigureCollection.tsx │ │ │ │ ├── CreateMaxVoterWeightRecord.tsx │ │ │ │ └── CreateRegistrar.tsx │ │ │ │ ├── PsyFinance │ │ │ │ ├── BurnWriterTokenForQuote.tsx │ │ │ │ ├── ClaimUnderlyingPostExpiration.tsx │ │ │ │ ├── ExerciseOption.tsx │ │ │ │ └── MintAmericanOptions.tsx │ │ │ │ ├── Pyth │ │ │ │ ├── PythRecoverAccount.tsx │ │ │ │ └── PythUpdatePoolAuthority.tsx │ │ │ │ ├── RealmConfig.tsx │ │ │ │ ├── Serum │ │ │ │ ├── GrantForm.tsx │ │ │ │ ├── InitUser.tsx │ │ │ │ ├── UpdateConfigAuthority.tsx │ │ │ │ └── UpdateConfigParams.tsx │ │ │ │ ├── SetMintAuthroity.tsx │ │ │ │ ├── Solend │ │ │ │ ├── CreateObligationAccount.tsx │ │ │ │ ├── DepositReserveLiquidityAndObligationCollateral.tsx │ │ │ │ ├── InitObligationAccount.tsx │ │ │ │ ├── RefreshObligation.tsx │ │ │ │ ├── RefreshReserve.tsx │ │ │ │ └── WithdrawObligationCollateralAndRedeemReserveLiquidity.tsx │ │ │ │ ├── SplGov │ │ │ │ ├── DaoVote.tsx │ │ │ │ ├── RevokeGoverningTokens.tsx │ │ │ │ └── useMembershipTypes.ts │ │ │ │ ├── SplTokenTransfer.tsx │ │ │ │ ├── Squads │ │ │ │ ├── MeshAddMember.tsx │ │ │ │ ├── MeshChangeThresholdMember.tsx │ │ │ │ ├── MeshRemoveMember.tsx │ │ │ │ └── common.ts │ │ │ │ ├── Switchboard │ │ │ │ ├── FundOracle.tsx │ │ │ │ └── WithdrawFromOracle.tsx │ │ │ │ ├── Symmetry │ │ │ │ ├── AddTokenToBasketModal.tsx │ │ │ │ ├── SymmetryCreateBasket.tsx │ │ │ │ ├── SymmetryDeposit.tsx │ │ │ │ ├── SymmetryEditBasket.tsx │ │ │ │ ├── SymmetryWithdraw.tsx │ │ │ │ └── components │ │ │ │ │ └── ArrowButton.tsx │ │ │ │ ├── TransferDomainName.tsx │ │ │ │ ├── UpdateTokenMetadata.tsx │ │ │ │ ├── Validators │ │ │ │ ├── DeactivateStake.tsx │ │ │ │ ├── DelegateStake.tsx │ │ │ │ ├── SanctumDepositStake.tsx │ │ │ │ ├── SanctumWithdrawStake.tsx │ │ │ │ ├── SplitStake.tsx │ │ │ │ ├── StakeValidator.tsx │ │ │ │ ├── WithdrawStake.tsx │ │ │ │ └── removeLockup.tsx │ │ │ │ ├── Vsr │ │ │ │ ├── CreateRegistrar.tsx │ │ │ │ └── VotingMintConfig.tsx │ │ │ │ ├── bpfUpgradeableLoader │ │ │ │ ├── ProgramUpgrade.tsx │ │ │ │ └── ProgramUpgradeInfo.tsx │ │ │ │ └── inputInstructionType.ts │ │ └── new.tsx │ │ ├── token-stats │ │ └── index.tsx │ │ └── treasury │ │ ├── governance │ │ └── [governanceId] │ │ │ └── edit.tsx │ │ ├── new.tsx │ │ └── v2 │ │ └── index.tsx ├── discover │ ├── edit │ │ └── index.tsx │ └── index.tsx ├── ecosystem │ ├── [feedItemId] │ │ ├── [commentId] │ │ │ └── index.tsx │ │ └── index.tsx │ └── index.tsx ├── feed │ └── index.tsx ├── index.tsx ├── matchday │ └── verify-wallet.tsx ├── realm │ └── [id] │ │ ├── [feedItemId] │ │ ├── [commentId] │ │ │ └── index.tsx │ │ └── index.tsx │ │ ├── hub │ │ ├── edit │ │ │ └── index.tsx │ │ └── index.tsx │ │ └── index.tsx ├── realms │ ├── components │ │ ├── RealmsDashboard.tsx │ │ └── RealmsGrid.tsx │ ├── index.tsx │ ├── new.tsx │ └── new │ │ ├── community-token │ │ └── index.tsx │ │ ├── multisig │ │ └── index.tsx │ │ └── nft │ │ └── index.tsx ├── stats │ └── index.tsx ├── tools │ ├── all-realms.tsx │ └── mint-pnft.tsx └── verify-wallet │ └── index.tsx ├── postcss.config.js ├── public ├── actions.json ├── banners │ ├── 1.jpg │ ├── 10.jpg │ ├── 11.jpg │ ├── 12.jpg │ ├── 13.jpg │ ├── 14.jpg │ ├── 15.jpg │ ├── 16.jpg │ ├── 17.jpg │ ├── 18.jpg │ ├── 19.jpg │ ├── 2.jpg │ ├── 20.jpg │ ├── 3.jpg │ ├── 4.jpg │ ├── 5.jpg │ ├── 6.jpg │ ├── 7.jpg │ ├── 8.jpg │ └── 9.jpg ├── browserconfig.xml ├── favicon.ico ├── favicons │ ├── android-icon-144x144.png │ ├── android-icon-192x192.png │ ├── android-icon-36x36.png │ ├── android-icon-48x48.png │ ├── android-icon-72x72.png │ ├── android-icon-96x96.png │ ├── apple-icon-114x114.png │ ├── apple-icon-120x120.png │ ├── apple-icon-144x144.png │ ├── apple-icon-152x152.png │ ├── apple-icon-180x180.png │ ├── apple-icon-57x57.png │ ├── apple-icon-60x60.png │ ├── apple-icon-72x72.png │ ├── apple-icon-76x76.png │ ├── apple-icon-precomposed.png │ ├── apple-icon.png │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-96x96.png │ ├── ms-icon-144x144.png │ ├── ms-icon-150x150.png │ ├── ms-icon-310x310.png │ └── ms-icon-70x70.png ├── fonts │ ├── Ambit-Black.woff │ ├── Ambit-Black.woff2 │ ├── Ambit-BlackItalic.woff │ ├── Ambit-BlackItalic.woff2 │ ├── Ambit-Bold.woff │ ├── Ambit-Bold.woff2 │ ├── Ambit-BoldItalic.woff │ ├── Ambit-BoldItalic.woff2 │ ├── Ambit-ExtraLight.woff │ ├── Ambit-ExtraLight.woff2 │ ├── Ambit-ExtraLightItalic.woff │ ├── Ambit-ExtraLightItalic.woff2 │ ├── Ambit-Italic.woff │ ├── Ambit-Italic.woff2 │ ├── Ambit-Light.woff │ ├── Ambit-Light.woff2 │ ├── Ambit-LightItalic.woff │ ├── Ambit-LightItalic.woff2 │ ├── Ambit-Regular.woff │ ├── Ambit-Regular.woff2 │ ├── Ambit-SemiBold.woff │ ├── Ambit-SemiBold.woff2 │ ├── Ambit-SemiBoldItalic.woff │ ├── Ambit-SemiBoldItalic.woff2 │ ├── Ambit-Thin.woff │ ├── Ambit-Thin.woff2 │ ├── Ambit-ThinItalic.woff │ └── Ambit-ThinItalic.woff2 ├── icons │ ├── council-icon.svg │ ├── council-members-icon.svg │ ├── discord.svg │ ├── github.svg │ ├── mngo.svg │ ├── nft-icon.svg │ ├── threshold-icon.svg │ ├── twitter.svg │ └── usdc.svg ├── img │ ├── bg-desktop.png │ ├── bg-mobile.png │ ├── bg-quorum-all-sizes.png │ ├── civic.svg │ ├── collectablesIcon.svg │ ├── creation-bg-desktop.png │ ├── dual-logo.png │ ├── foresight.png │ ├── identity.png │ ├── logo-realms.png │ ├── logo-realms.svg │ ├── logotype-realms-blue-white.svg │ ├── mango.png │ ├── meanfinance.png │ ├── nft-logo.jpeg │ ├── psyfinance.png │ ├── pyth.svg │ ├── serum.png │ ├── solana-logo.svg │ ├── solend.png │ ├── squads.png │ ├── streamflow.png │ ├── switchboard.png │ └── symmetry.png ├── manifest.json ├── realms │ ├── 1SolDAO │ │ └── img │ │ │ └── 1SolDAO-logo.svg │ ├── 21DAO │ │ └── img │ │ │ └── 21dao_icon.png │ ├── 227 dao - image profile │ │ └── Risorsa 11@4x.png │ ├── ALL │ │ ├── favicon.ico │ │ └── img │ │ │ └── logo.png │ ├── ALLOVR │ │ └── favicon.ico │ ├── Advocat │ │ ├── AdvocatBusiness.png │ │ ├── AdvocatDev.png │ │ ├── banner.jpg │ │ └── logo.png │ ├── AgrichainxTribeDao │ │ └── AgrichainxTribeDao.jpeg │ ├── Allie-Coin-DAO │ │ ├── Allie-Coin-Logo.png │ │ └── Allie-Coin-Particle-Logo-Compressed.png │ ├── AntlerDAO │ │ └── Logo.jpg │ ├── Astra │ │ └── AstraPodcastLogo.png │ ├── AthensDAO │ │ ├── ATHDAO_Logo.png │ │ └── AthensDAO_Logo.jpg │ ├── BFNC │ │ └── img │ │ │ └── logo.png │ ├── BOHlogo.png │ ├── Bears │ │ └── img │ │ │ └── bearlogo.png │ ├── Blockgame │ │ └── Blockgame.png │ ├── Blockride │ │ ├── banner.png │ │ └── logo.png │ ├── BlueChickNFTsDAO │ │ ├── BlueChickNFTsDAO-banner.png │ │ └── BlueChickNFTsDAO.png │ ├── BoH │ ├── BootstrapDAO │ │ └── BootRealms.png │ ├── COCK │ │ └── img │ │ │ └── chicken_tribe_logo.jpeg │ ├── Chiao │ │ └── img │ │ │ └── chiao.png │ ├── ClackDAO │ │ └── Logo.png │ ├── CoalitionDAO │ │ ├── banner.png │ │ └── logo.png │ ├── ComradeDAO │ │ └── img │ │ │ └── comradedaologo.png │ ├── ConkDao │ │ ├── conk.png │ │ └── conk_banner.png │ ├── CreatedBy │ │ └── CreatedBy.png │ ├── CryptoHelp │ │ └── cryptohelp.png │ ├── Cygnus │ │ ├── cygnus-banner.jpg │ │ └── cygnus-logo.jpg │ ├── DAINV │ │ └── img │ │ │ └── DAI_LOGO_2.png │ ├── DAKU │ │ └── img │ │ │ └── daku_logo.png │ ├── DeanListGrape │ │ └── deans-list-logo.png │ ├── Deans-List-Grape │ │ └── deans-list-logo.png │ ├── Deans-List-Solarplex-State │ │ └── img │ │ │ ├── banner-deanslist-solarplex.png │ │ │ └── deans_list_solarplex_state.png │ ├── Deans_List_Network_State │ │ ├── avatar-deanslist.png │ │ └── banner-deanslist.png │ ├── Dialect │ │ └── img │ │ │ ├── avatar-dialect.png │ │ │ └── banner-dialect.png │ ├── EpicentralLabsDAO │ │ ├── Epicentral-Labs-Logo.png │ │ └── EpicentralDAOBanner.png │ ├── Epics │ │ ├── Epics-logo-background.png │ │ ├── Epics-logo.jpg │ │ ├── Epics-logo.svg │ │ ├── EpicsLogoSquare.svg │ │ └── EpicsLogoSquareInvert.svg │ ├── EverSol │ │ └── img │ │ │ ├── EverSol_Banner.jpg │ │ │ └── EverSol_Logo.png │ ├── Everlend │ │ └── img │ │ │ └── logo.png │ ├── FABS │ │ └── img │ │ │ ├── fabio.png │ │ │ └── fabs-banner.jpeg │ ├── FAFD │ │ └── img │ │ │ └── fafd_logo.png │ ├── FOXTAG │ │ └── FOXTAG.png │ ├── FSLOGO │ │ └── FLIPSIDE-LOGO-WHITE.png │ ├── FinanceIsMagic │ │ ├── Banner.png │ │ └── Logo.png │ ├── FyfyDAO │ │ └── img │ │ │ └── logo.png │ ├── GARI Network DAO │ │ ├── Gari discord (1).png │ │ └── gari.png │ ├── GCDC │ │ └── img │ │ │ ├── gaycoinz-banner.png │ │ │ └── gaycoinz-logo.png │ ├── GoblinGold │ │ └── img │ │ │ └── logo.png │ ├── Governance │ │ ├── img │ │ │ └── spl-governance-logo.svg │ │ └── logo-spl-gov-1024.png │ ├── Grape │ │ └── img │ │ │ └── grape.png │ ├── GrapeCCSubDAO │ │ └── GrapeCCSubDAO.png │ ├── Guacamole │ │ ├── Guacamole_Banner.png │ │ └── Guacamole_Token_Logo_Green.png │ ├── HOADAO │ │ └── img │ │ │ └── hoa.jpg │ ├── HackerzDAO │ │ └── img │ │ │ └── HackerzDAO_PFP.png │ ├── HadeswapGovernance │ │ └── hadeswap_logo.jpg │ ├── Helium │ │ └── img │ │ │ ├── iotlogo.png │ │ │ ├── logo.svg │ │ │ └── mobilelogo.png │ ├── IADAO │ │ └── img │ │ │ └── IA-DAO_LOGO.png │ ├── IKB │ │ ├── ikb_dao_banner.jpg │ │ └── ikb_dao_logo.jpg │ ├── Ikohaus │ │ └── img │ │ │ └── Ikohaus_Logo.png │ ├── JetSkiDAO │ │ ├── banner.png │ │ └── logo.jpeg │ ├── Jito │ │ └── jito.png │ ├── Kiwi │ │ └── img │ │ │ └── kiwi_logo.png │ ├── KiwiDAO │ │ └── img │ │ │ └── kiwi_logo.png │ ├── LavaDAO │ │ └── img │ │ │ └── lavalogo.png │ ├── LeDao │ │ └── img │ │ │ └── leDao-logo.png │ ├── MDLH │ │ └── img │ │ │ ├── MDLH.png │ │ │ └── banner.jpeg │ ├── MEAN │ │ ├── favicon.ico │ │ └── logo.svg │ ├── MMCC │ │ └── img │ │ │ └── MMCC_Logo.png │ ├── MNDE │ │ └── img │ │ │ ├── mnde_header.png │ │ │ └── mnde_logo.png │ ├── MNGO │ │ ├── favicon.ico │ │ └── img │ │ │ └── logo.svg │ ├── MOUTAI │ │ ├── MF.png │ │ ├── mdao.jpg │ │ └── t │ ├── MangoXSol │ │ └── img │ │ │ └── logo.svg │ ├── MasoorDAO │ │ └── MasoorDAO.png │ ├── MemeCoinDAOai │ │ ├── MemeCoinDAOBanner1_15.png │ │ └── MemeCoinDAOFinalLogo.png │ ├── MewfasaDAO │ │ ├── banner-dao.jpg │ │ └── mewfasadao.jpg │ ├── MonkOG │ │ └── img │ │ │ └── ogemoji.png │ ├── MonkeDAO │ │ └── img │ │ │ └── MonkeDAO_logo.png │ ├── MontanaLand │ │ └── img │ │ │ └── logo.png │ ├── MorDAO │ │ └── img │ │ │ └── logo.svg │ ├── N&F │ │ └── img │ │ │ ├── Nick-banner.jpeg │ │ │ └── Nick.png │ ├── NFT4CauseDAO │ │ └── img │ │ │ └── logo.png │ ├── NFTClubBerlin │ │ └── img │ │ │ └── logo.png │ ├── NFTOFFROADFANCLUB │ │ └── img │ │ │ └── logo.png │ ├── NeoFairies │ │ └── img │ │ │ └── logo.png │ ├── NoGoal │ │ └── img │ │ │ └── ino-128.png │ ├── ODCO │ │ ├── OCDC.png │ │ └── OCDLO.png │ ├── OPANZ │ │ ├── OPANZ_Banner.png │ │ └── OPANZ_Logo.png │ ├── OpenBook │ │ ├── OpenBook-Horizontal Lockup.svg │ │ └── OpenBook-Logomark.svg │ ├── PANDA │ │ └── img │ │ │ └── PandaDAOlogo.png │ ├── PAWN │ │ └── img │ │ │ ├── pawn.png │ │ │ └── pawns-banner.png │ ├── PAWNGO │ │ └── img │ │ │ ├── pawngo.png │ │ │ └── pawngodao.png │ ├── PHNXDAO │ │ └── phnxLogo.png │ ├── PHY │ │ ├── favicon.ico │ │ └── img │ │ │ └── physis-holo-blk-sml.png │ ├── PYTH │ │ ├── favicon.ico │ │ └── img │ │ │ └── pyth.svg │ ├── PhoenixDAO │ │ └── phoenixdao_logo.png │ ├── PibbleDAO │ │ ├── Banner.png │ │ └── logo.png │ ├── PixelBands │ │ └── img │ │ │ └── pixel_bands_log.png │ ├── PolarDao.png │ ├── Poll DAO │ │ ├── Vote Vote Vote.png │ │ └── poll.jpg │ ├── PoodlePawsDAO │ │ └── PoodlePawsDAO.png │ ├── PoorDao │ │ └── img │ │ │ └── archer.png │ ├── RAIN │ │ └── img │ │ │ └── rain_logo.png │ ├── RCH │ │ ├── banner.png │ │ └── icon.png │ ├── RED │ │ └── RED.png │ ├── RIBS │ │ └── img │ │ │ └── lion_logo.png │ ├── RRADAO │ │ └── rradao_logo.jpg │ ├── RadRugsDAO │ │ └── img │ │ │ └── RadRugsDAO.png │ ├── RatioFinance │ │ └── img │ │ │ └── ratiologo.png │ ├── Renpo │ │ └── img │ │ │ └── renpo_logo.png │ ├── ResonanceDAO │ │ ├── hldr │ │ └── resonancedaologo.png │ ├── Risorsa 11@4x.png │ ├── SBYCDAO │ │ └── img │ │ │ └── logo.png │ ├── SCTF1 │ │ └── img │ │ │ └── sctf1.svg │ ├── SF │ │ └── img │ │ │ └── succeedfinance.png │ ├── SNY │ │ └── img │ │ │ └── synthetify_logo_green.svg │ ├── SOLDCDAO │ │ └── img │ │ │ └── NEWSOLDCDAO.png │ ├── SOLI │ │ └── soli_logo.png │ ├── SamoDAO │ │ └── SamoDAO.png │ ├── SatorDAO │ │ └── SatorLogo.png │ ├── Solsaur │ │ ├── solsaur-realms-banner.png │ │ └── solsaur.png │ ├── SolshureDAO │ │ └── img │ │ │ └── solshure_dao.png │ ├── Squads │ │ └── banner.png │ ├── StreamDAO │ │ └── img │ │ │ └── stream_dao.png │ ├── THIRD │ │ ├── favicon.ico │ │ └── img │ │ │ └── logo.png │ ├── TelebunniesDAO │ │ └── telebunniesDAO.png │ ├── TensorDAO │ │ ├── TensorDAO_banner.png │ │ └── TensorDAO_logo.png │ ├── The $GREED Experiment │ │ ├── The $GREED Experiment logo.png │ │ └── The_$GREED_Experiment_logo.png │ ├── TheOxSquad │ │ └── img │ │ │ ├── TheOxSquad.png │ │ │ └── TheOxSquad_banner.jpeg │ ├── TheSporagers │ │ └── img │ │ │ ├── the_sporagers.png │ │ │ └── the_sporagers_banner.jpeg │ ├── TokenSolutionsDAO │ │ ├── favicon.ico │ │ └── img │ │ │ ├── image1.png │ │ │ └── image2.png │ ├── TrustBet │ │ ├── Bannerontransparent.png │ │ ├── LRlogo.png │ │ └── logo.png │ ├── UNDER │ │ └── logo.png │ ├── UNQ │ │ └── img │ │ │ └── UNQ-logo.png │ ├── UXP │ │ ├── favicon.ico │ │ └── img │ │ │ └── UXP-Black.png │ ├── Ukraine │ │ └── img │ │ │ ├── Flag_of_Ukraine.svg │ │ │ └── Ukraine_Logo.png │ ├── UkraineUnchained │ │ └── img │ │ │ ├── ukraine_unchained.png │ │ │ └── ukraine_unchained_banner.jpeg │ ├── VIEWSDAO │ │ └── img │ │ │ ├── views_banner.jpg │ │ │ └── views_logo.png │ ├── VillagesDAO │ │ ├── hldr │ │ └── villagesdaologo.png │ ├── Wen DAO │ │ └── Wen DAO.png │ ├── WezeshaDAO │ │ └── img │ │ │ ├── WezeshaBanner.png │ │ │ └── wezesha_dao_logo.png │ ├── WisdomDAO │ │ ├── banner.jpg │ │ └── og.jpg │ ├── WisdomEnterprising │ │ └── img │ │ │ └── WE.jpg │ ├── WoofDAO │ │ └── img │ │ │ └── wooflogo.png │ ├── XAPE │ │ └── img │ │ │ ├── logo_xape_nobckg.png │ │ │ └── xapes_logo.png │ ├── XPWizards │ │ └── img │ │ │ └── xpwizlogo.png │ ├── YMDAO │ │ └── img │ │ │ └── ymdaologo.png │ ├── about.json │ ├── bacDao │ │ └── logo_bulls.png │ ├── blueterra │ │ └── img │ │ │ └── logo.png │ ├── brdot │ │ ├── banner_brdot.png │ │ └── brdot_dao_logo.png │ ├── cas311.png │ ├── devnet.json │ ├── eleusance │ │ └── eleusance_logo_spl.png │ ├── hope │ │ └── img │ │ │ └── hope_logo.svg │ ├── jungle-defi │ │ └── jungle.png │ ├── mainnet-beta.json │ ├── mergey │ │ └── logo.png │ ├── metaplex │ │ └── img │ │ │ ├── black-circle.png │ │ │ └── meta-white.png │ ├── pumpkinspool │ │ ├── pumpkin_header.png │ │ └── pumpkin_logo_cropped.png │ ├── safecows │ │ ├── banner.png │ │ └── logo.png │ ├── sinDAO │ │ └── sindao.png │ ├── socean │ │ ├── favicon.ico │ │ └── img │ │ │ └── logo.svg │ ├── solana │ │ ├── favicon.ico │ │ └── img │ │ │ └── logo.svg │ ├── strangemood │ │ ├── favicon.ico │ │ └── img │ │ │ └── logo.svg │ ├── token-overrides.json │ ├── wikicious │ │ └── wikicious.png │ ├── wonder │ │ └── img │ │ │ └── logo.png │ └── xLPFi │ │ └── xLPFi-min.png └── verify-wallet │ └── img │ ├── Direction--straight--right.svg │ ├── icon-connected.svg │ ├── icon-discord-role.svg │ ├── icon-solana-connected.svg │ ├── logo-discord.svg │ └── logo-matchday.png ├── scripts ├── governance-notifier.ts └── skip-vercel-builds.sh ├── sentry.client.config.js ├── sentry.properties ├── sentry.server.config.js ├── stores ├── useGovernanceAssetsStore.tsx ├── useNotificationStore.tsx ├── useRouterHistoryStore.tsx ├── useSelectedDelegatorStore.tsx ├── useSerumGovStore.tsx ├── useTransactionStore.tsx └── useTreasuryAccountStore.tsx ├── styles ├── ambit-font.css ├── index.css └── typography.css ├── tailwind.config.js ├── test ├── models │ └── registry │ │ └── api.test.ts ├── pages │ └── index.test.tsx └── setup.js ├── tools ├── batman-small.jpeg ├── constants.ts ├── core │ ├── option.ts │ ├── pubkey.ts │ ├── resources.ts │ ├── script.ts │ └── strings.ts ├── feeEstimate.ts ├── governance │ ├── configs.ts │ ├── prepareRealmCreation.ts │ └── units.ts ├── nftMinter.ts ├── nftVoteCalc.ts ├── routing.ts ├── sdk │ ├── accounts.ts │ ├── bpfUpgradeableLoader │ │ ├── accounts.ts │ │ ├── createCloseBuffer.ts │ │ ├── createSetUpgradeAuthority.ts │ │ └── createUpgradeInstruction.ts │ ├── solend │ │ ├── configuration.ts │ │ ├── createObligationAccount.ts │ │ ├── depositReserveLiquidityAndObligationCollateral.ts │ │ ├── initObligationAccount.ts │ │ ├── refreshObligation.ts │ │ ├── refreshReserve.ts │ │ ├── utils.ts │ │ └── withdrawObligationCollateralAndRedeemReserveLiquidity.ts │ ├── splToken │ │ ├── withCreateAssociatedTokenAccount.ts │ │ ├── withCreateMint.ts │ │ └── withMintTo.ts │ └── units.ts └── validators │ ├── accounts │ ├── token.ts │ └── upgradeable-program.ts │ └── pubkey.ts ├── tsconfig.json ├── utils ├── GovernanceTools.tsx ├── Mango │ └── listingTools.ts ├── address.ts ├── arweave.ts ├── associated.tsx ├── ataTools.tsx ├── borsh.ts ├── connection.ts ├── dateTools.ts ├── debounce.tsx ├── domains.ts ├── formValidation.tsx ├── formatNumber.ts ├── formatPercentage.ts ├── formatting.tsx ├── getUserLocale.ts ├── github.ts ├── group.ts ├── helpers.ts ├── instructionTools.ts ├── instructions │ ├── Dual │ │ ├── airdrop.ts │ │ ├── delegate.ts │ │ └── index.ts │ ├── Identity │ │ └── util.tsx │ ├── Mean │ │ ├── createPaymentStreaming.ts │ │ ├── getMeanCreateAccountInstruction.ts │ │ ├── getMeanCreateStreamInstruction.ts │ │ ├── getMeanFundAccountInstruction.ts │ │ ├── getMeanTransferStreamInstruction.ts │ │ ├── getMeanWithdrawFromAccountInstruction.ts │ │ └── getMint.tsx │ ├── NftVoter │ │ ├── castNftVote.ts │ │ └── updateVoterWeight.ts │ └── PsyFinance │ │ ├── PoseidonIdl.ts │ │ ├── PsyAmericanIdl.ts │ │ ├── hooks.ts │ │ ├── index.ts │ │ ├── poseidon.ts │ │ └── types.ts ├── lidoStake.ts ├── logs.ts ├── mangoV4Tools.ts ├── metaplex.ts ├── modifiedMangolana.ts ├── notifications.tsx ├── ntext.ts ├── parseTokenAccountData.tsx ├── pause.ts ├── plugin │ └── accounts.ts ├── proposals.ts ├── queries │ └── asFindable.ts ├── send.tsx ├── sendTransactions.tsx ├── services │ ├── tokenPrice.tsx │ └── types.tsx ├── splTokens.ts ├── textToAddressList.ts ├── tokens.tsx ├── transactionsLoader.tsx ├── treasuryTools.tsx ├── typescript │ └── assertUnreachable.ts ├── uiTypes │ ├── NftVoterClient.ts │ ├── Result.ts │ ├── VotePlugin.ts │ ├── assets.ts │ ├── members.ts │ ├── nfts.ts │ └── proposalCreationTypes.ts ├── validations.tsx └── wallet-adapters │ └── index.ts ├── verify-wallet ├── .eslintrc.json ├── .prettierrc ├── components │ ├── footer.tsx │ ├── gql.ts │ ├── index.tsx │ ├── sign-in-with-solana.tsx │ ├── step-one.tsx │ ├── step-three.tsx │ └── step-two.tsx ├── constants.ts └── tsconfig.json └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | [ 4 | "next/babel", 5 | { 6 | "preset-react": { 7 | "runtime": "automatic", 8 | "importSource": "@emotion/react" 9 | } 10 | } 11 | ] 12 | ], 13 | "plugins": ["@emotion/babel-plugin", "babel-plugin-macros"] 14 | } 15 | -------------------------------------------------------------------------------- /.env.sample: -------------------------------------------------------------------------------- 1 | # Run in context of one realm: starts with default realm and disables realms page navigation 2 | # REALM=MNGO 3 | MAINNET_RPC=https://mango.rpcpool.com 4 | DEVNET_RPC=https://mango.devnet.rpcpool.com 5 | 6 | DEFAULT_GOVERNANCE_PROGRAM_ID=GTesTBiEWE32WHXXE2S4XbZvA5CrEc4xs6ZgRe895dP 7 | 8 | NEXT_PUBLIC_JUPTER_SWAP_API_ENDPOINT=https://quote-api.jup.ag/v6 9 | NEXT_PUBLIC_API_ENDPOINT=https://api.realms.today/graphql 10 | NEXT_PUBLIC_DISCORD_APPLICATION_CLIENT_ID=1042836142560645130 11 | NEXT_PUBLIC_DISCORD_MATCHDAY_CLIENT_ID=1044361939322683442 12 | NEXT_PUBLIC_HELIUS_MAINNET_RPC= 13 | NEXT_PUBLIC_HELIUS_DEVNET_RPC= 14 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | **/node_modules/* 2 | **/out/* 3 | **/.next/* 4 | **/docs/build/* 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env 29 | .env.local 30 | .env.development 31 | .env.development.local 32 | .env.test.local 33 | .env.production.local 34 | 35 | # vercel 36 | .vercel 37 | 38 | # TypeScript cache 39 | *.tsbuildinfo 40 | 41 | #IDE specific 42 | .idea 43 | 44 | # Sentry 45 | .sentryclirc 46 | 47 | .vscode/settings.json -------------------------------------------------------------------------------- /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | lts/iron -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .next 3 | yarn.lock 4 | package-lock.json 5 | public 6 | components/charting_library 7 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true 4 | } -------------------------------------------------------------------------------- /.vscode/deploy.txt: -------------------------------------------------------------------------------- 1 | Please deploy -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | // Tailwind CSS Intellisense 4 | "bradlc.vscode-tailwindcss", 5 | "esbenp.prettier-vscode", 6 | "dbaeumer.vscode-eslint" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /.yarnrc: -------------------------------------------------------------------------------- 1 | --add.exact true 2 | ignore-scripts true 3 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | enableScripts: false 2 | -------------------------------------------------------------------------------- /0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/0.png -------------------------------------------------------------------------------- /@types/index.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.svg' { 2 | const content: any 3 | export default content 4 | } 5 | -------------------------------------------------------------------------------- /@types/types.ts: -------------------------------------------------------------------------------- 1 | import { EndpointTypes } from '@models/types' 2 | 3 | export interface EndpointInfo { 4 | name: EndpointTypes 5 | url: string 6 | } 7 | 8 | export type GovernanceRole = 'council' | 'community'; -------------------------------------------------------------------------------- /DriftStakeVoterPlugin/constants.ts: -------------------------------------------------------------------------------- 1 | export const DRIFT_STAKE_VOTER_PLUGIN = 2 | 'dVoTE1AJqkZVoE1mPbWcqYPmEEvAUBksHY2NiM2UJQe' 3 | 4 | export const DRIFT_PROGRAM_ID = 'dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH' 5 | 6 | //export const DRIFT_GOVERNANCE_PROGRAM_ID = 'dgov7NC8iaumWw3k8TkmLDybvZBCmd1qwxgLAGAsWxf' 7 | 8 | export const DRIFT_GOVERNANCE_TICKER = 'DRFT' 9 | -------------------------------------------------------------------------------- /HeliumVotePlugin/hooks/useSubDaos.ts: -------------------------------------------------------------------------------- 1 | import useWalletDeprecated from '@hooks/useWalletDeprecated' 2 | import { web3 } from '@coral-xyz/anchor' 3 | import { useAsync, UseAsyncReturn } from 'react-async-hook' 4 | import { SubDaoWithMeta } from '../sdk/types' 5 | import { PROGRAM_ID } from '@helium/helium-sub-daos-sdk' 6 | import { getSubDaos } from '../utils/getSubDaos' 7 | 8 | export const useSubDaos = ( 9 | programId: web3.PublicKey = PROGRAM_ID 10 | ): UseAsyncReturn => { 11 | const { 12 | connection: { current }, 13 | anchorProvider: provider, 14 | } = useWalletDeprecated() 15 | return useAsync(getSubDaos, [current, provider, programId]) 16 | } 17 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | worker: npm run notifier 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # governance-ui 2 | 3 | This repo still exists in archived form, but the maintained version has now relocated to: https://github.com/Mythic-Project/governance-ui 4 | 5 | 6 | ### Using custom Swap API endpoints 7 | 8 | You can set custom URLs via the configuration for any self-hosted Jupiter APIs, like the [V6 Swap API](https://station.jup.ag/docs/apis/self-hosted) or [Paid Hosted APIs](https://station.jup.ag/docs/apis/self-hosted#paid-hosted-apis) Here is an example: 9 | 10 | ``` 11 | NEXT_PUBLIC_JUPTER_SWAP_API_ENDPOINT=https://quote-api.jup.ag/v6 12 | ``` 13 | -------------------------------------------------------------------------------- /Strategies/components/ModalHeader.tsx: -------------------------------------------------------------------------------- 1 | const ModalHeader = ({ 2 | apy, 3 | protocolLogoURI, 4 | strategy, 5 | protocolName, 6 | TokenName, 7 | }) => { 8 | return ( 9 |
10 | 11 |
12 |

{`${strategy} ${TokenName} on ${protocolName}`}

13 |

14 | Interest Rate: {apy} 15 |

16 |
17 |
18 | ) 19 | } 20 | 21 | export default ModalHeader 22 | -------------------------------------------------------------------------------- /Strategies/components/psyfi/index.ts: -------------------------------------------------------------------------------- 1 | export * from './PsyFiStrategies' 2 | -------------------------------------------------------------------------------- /Strategies/components/psyfi/pdas.ts: -------------------------------------------------------------------------------- 1 | import { PublicKey } from '@solana/web3.js' 2 | 3 | export const deriveVaultCollateralAccount = async ( 4 | programKey: PublicKey, 5 | vaultAccount: PublicKey 6 | ) => { 7 | return await PublicKey.findProgramAddress( 8 | [ 9 | new PublicKey(vaultAccount).toBuffer(), 10 | Buffer.from('VaultCollateralAccount'), 11 | ], 12 | programKey 13 | ) 14 | } 15 | -------------------------------------------------------------------------------- /Strategies/components/psyfi/programIds.ts: -------------------------------------------------------------------------------- 1 | import { PublicKey } from '@solana/web3.js' 2 | export const MAINNET_PROGRAM_KEYS = { 3 | PSYFI_V2: new PublicKey('PSYFiYqguvMXwpDooGdYV6mju92YEbFobbvW617VNcq'), 4 | PSYSTAKE: new PublicKey('pSystkitWgLkzprdAvraP8DSBiXwee715wiSXGJe8yr'), 5 | } 6 | 7 | export const DEVNET_PROGRAM_KEYS = { 8 | PSYFI_V2: new PublicKey('95q3X9ADJv5hWt93oSaPqABPnP1rqfmjgrnto9v83LPK'), 9 | PSYSTAKE: new PublicKey('5LrZkBFgDkFiKEePeT2N9VuKfd2k8Rrad9PG6mKGbCRk'), 10 | } 11 | 12 | export const EURO_PRIMITIVE_PROGRAM_ID = new PublicKey( 13 | 'FASQhaZQT53W9eT9wWnPoBFw8xzZDey9TbMmJj6jCQTs' 14 | ) 15 | -------------------------------------------------------------------------------- /TokenHaverPlugin/constants.ts: -------------------------------------------------------------------------------- 1 | import { PublicKey } from '@solana/web3.js' 2 | 3 | export const TOKEN_HAVER_PLUGIN = new PublicKey( 4 | '7gobfUihgoxA14RUnVaseoah89ggCgYAzgz1JoaPAXam' 5 | ) 6 | -------------------------------------------------------------------------------- /TokenHaverPlugin/readme.md: -------------------------------------------------------------------------------- 1 | This plugin simply detects if token accounts for a list of mints are present and nonzero. It was used for Voshy's "Greed Experiment" DAO. The contract can be found on the governance-program-library. -------------------------------------------------------------------------------- /VoterWeightPlugins/index.ts: -------------------------------------------------------------------------------- 1 | export { useVoterWeightPlugins } from './useVoterWeightPlugins' 2 | export { useGatewayVoterWeightPlugin } from './useGatewayVoterWeightPlugin' 3 | export { useQuadraticVoterWeightPlugin } from './useQuadraticVoterWeightPlugin' 4 | export { convertTypeToVoterWeightAction } from './lib/utils' 5 | export { useHeliumClient } from './useHeliumClient' 6 | export { useNftClient } from './useNftClient' 7 | export { useVsrClient } from './useVsrClient' 8 | -------------------------------------------------------------------------------- /actions/addPlugins/types.ts: -------------------------------------------------------------------------------- 1 | import {PublicKey, TransactionInstruction} from "@solana/web3.js"; 2 | 3 | export type AddPluginResult = { 4 | pluginProgramId: PublicKey, 5 | instructions: TransactionInstruction[] 6 | } -------------------------------------------------------------------------------- /components/Dialect/index.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import { web3 } from '@coral-xyz/anchor' 4 | import { DialectSolanaSdk } from '@dialectlabs/react-sdk-blockchain-solana' 5 | import { NotificationsButton } from '@dialectlabs/react-ui' 6 | 7 | const REALMS_PUBLIC_KEY = new web3.PublicKey( 8 | 'BUxZD6aECR5B5MopyvvYqJxwSKDBhx2jSSo1U32en6mj' 9 | ) 10 | 11 | export default function DialectNotifications() { 12 | return ( 13 | 14 | 15 | 16 | ) 17 | } 18 | -------------------------------------------------------------------------------- /components/Divider.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | const Divider: React.FC<{ 4 | className?: string 5 | dashed?: boolean 6 | }> = ({ className, dashed }) => ( 7 |
12 | ) 13 | 14 | export default Divider 15 | -------------------------------------------------------------------------------- /components/Gateway/GatewayButton.tsx: -------------------------------------------------------------------------------- 1 | import { IdentityButton } from '@civic/solana-gateway-react' 2 | import { FC } from 'react' 3 | 4 | export const GatewayButton: FC = () => { 5 | return ( 6 | 7 | ) 8 | } 9 | -------------------------------------------------------------------------------- /components/GovernancePower/Power/Vanilla/VanillaCard.tsx: -------------------------------------------------------------------------------- 1 | import VanillaVotingPower from "@components/GovernancePower/Power/Vanilla/VanillaVotingPower"; 2 | import {Deposit} from "@components/GovernancePower/Power/Vanilla/Deposit"; 3 | import { VotingCardProps } from "../VotingPowerCards"; 4 | import {FC} from "react"; 5 | 6 | export const VanillaCard:FC = (props) => ( 7 |
8 | 9 | 10 |
11 | ) -------------------------------------------------------------------------------- /components/ImgWithLoader.tsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react' 2 | import { PhotographIcon } from '@heroicons/react/outline' 3 | 4 | const ImgWithLoader = (props) => { 5 | const [isLoading, setIsLoading] = useState(true) 6 | return ( 7 |
8 | {isLoading && ( 9 | 10 | )} 11 | setIsLoading(false)} /> 12 |
13 | ) 14 | } 15 | 16 | export default ImgWithLoader 17 | -------------------------------------------------------------------------------- /components/Mango/useProgramSelector.tsx: -------------------------------------------------------------------------------- 1 | import { PublicKey } from '@solana/web3.js' 2 | import { useState } from 'react' 3 | 4 | type Program = { name: string; val: PublicKey; group: PublicKey } 5 | 6 | const useProgramSelector = () => { 7 | const [program, setProgram] = useState() 8 | return { 9 | program, 10 | setProgram, 11 | } 12 | } 13 | 14 | export default useProgramSelector 15 | -------------------------------------------------------------------------------- /components/Members/types.ts: -------------------------------------------------------------------------------- 1 | import { VoteRecord } from '@solana/spl-governance' 2 | import { ProgramAccount } from '@solana/spl-governance' 3 | 4 | export interface WalletTokenRecordWithProposal 5 | extends ProgramAccount { 6 | proposalPublicKey: string 7 | proposalName: string 8 | chatMessages: string[] 9 | } 10 | -------------------------------------------------------------------------------- /components/NewRealmWizard/components/AdviceBox.tsx: -------------------------------------------------------------------------------- 1 | import Text from '@components/Text' 2 | 3 | export default function AdviceBox({ icon, title, children }) { 4 | return ( 5 |
6 |
{icon}
7 |
8 | 9 | {title} 10 | 11 | {children} 12 |
13 |
14 | ) 15 | } 16 | -------------------------------------------------------------------------------- /components/NewRealmWizard/components/SimpleCheckmarkCircle.tsx: -------------------------------------------------------------------------------- 1 | export default function ({ selected = false }) { 2 | return ( 3 |
10 | {selected && 11 |
12 | } 13 |
14 | ) 15 | } 16 | -------------------------------------------------------------------------------- /components/PreviousRouteBtn.tsx: -------------------------------------------------------------------------------- 1 | import { ChevronLeftIcon } from '@heroicons/react/solid' 2 | import useRouterHistory from '@hooks/useRouterHistory' 3 | import Link from 'next/link' 4 | import React from 'react' 5 | 6 | const PreviousRouteBtn = () => { 7 | const { getLastRoute } = useRouterHistory() 8 | const lastUrl = getLastRoute() as string 9 | return lastUrl ? ( 10 | 11 | 12 | 13 | Back 14 | 15 | 16 | ) : null 17 | } 18 | export default PreviousRouteBtn 19 | -------------------------------------------------------------------------------- /components/Profile/ShortAddress.tsx: -------------------------------------------------------------------------------- 1 | import {PublicKey} from "@solana/web3.js"; 2 | import React, {FC} from "react"; 3 | import {shortenAddress} from "@utils/address"; 4 | 5 | export const ShortAddress:FC<{address: PublicKey | undefined }> = ({address}) => { 6 | if (!address) return <>; 7 | return ( 8 | 13 | {shortenAddress(address.toString())} 14 | 15 | ); 16 | }; -------------------------------------------------------------------------------- /components/Profile/index.ts: -------------------------------------------------------------------------------- 1 | export { Profile } from './Profile' 2 | export { ProfilePopup } from './ProfilePopup' 3 | export { ProfileImage } from './ProfileImage' 4 | export { ProfileName } from './ProfileName' 5 | export { useProfile } from './useProfile' 6 | -------------------------------------------------------------------------------- /components/ProposalVotingPower/VotingPower.tsx: -------------------------------------------------------------------------------- 1 | import { useVotingPop } from '@components/VotePanel/hooks' 2 | import GovernancePowerForRole from '@components/GovernancePower/GovernancePowerForRole' 3 | 4 | export default function VotingPower() { 5 | const votePop = useVotingPop() 6 | return votePop === undefined ? ( 7 |
8 | ) : ( 9 | 10 | ) 11 | } 12 | -------------------------------------------------------------------------------- /components/Text.tsx: -------------------------------------------------------------------------------- 1 | import { createElement } from 'react' 2 | export default function Text({ 3 | level = '1', 4 | className = '', 5 | bold = false, 6 | as = 'div', 7 | children, 8 | }) { 9 | let classNames = bold ? 'font-bold' : '' 10 | if (level === '1') { 11 | classNames += ` body-base` 12 | } else if (level === '2') { 13 | classNames += ` body-sm` 14 | } else if (level === '3') { 15 | classNames += ` body-xs` 16 | } 17 | 18 | classNames += ` ${className}` 19 | 20 | return createElement(as, { className: classNames }, children) 21 | } 22 | -------------------------------------------------------------------------------- /components/TreasuryAccount/HoldTokensTotalPrice.tsx: -------------------------------------------------------------------------------- 1 | import { useTotalTreasuryPrice } from '@hooks/useTotalTreasuryPrice' 2 | import { formatNumber } from '@utils/formatNumber' 3 | 4 | const HoldTokensTotalPrice = () => { 5 | const { totalPriceFormatted, isFetching } = useTotalTreasuryPrice() 6 | 7 | return ( 8 |
9 |

Treasury Balance

10 | 11 | {isFetching ? 'Fetching ...' : `$${formatNumber(totalPriceFormatted)}`} 12 | 13 |
14 | ) 15 | } 16 | 17 | export default HoldTokensTotalPrice 18 | -------------------------------------------------------------------------------- /components/VotePanel/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './VotePanel' 2 | -------------------------------------------------------------------------------- /components/chat/LazyLoadComment.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { useInView } from 'react-intersection-observer' 3 | import Comment from './Comment' 4 | import { ChatMessage } from '@solana/spl-governance' 5 | 6 | const LazyLoadComment = ({ chatMessage }: { chatMessage: ChatMessage }) => { 7 | const { ref, inView } = useInView({ 8 | /* Optional options */ 9 | triggerOnce: true, 10 | }) 11 | 12 | return ( 13 |
14 |
{inView && }
15 |
16 | ) 17 | } 18 | 19 | export default LazyLoadComment 20 | -------------------------------------------------------------------------------- /components/inputs/ErrorField.tsx: -------------------------------------------------------------------------------- 1 | import { capitalize } from '@utils/helpers' 2 | 3 | const ErrorField = ({ text }) => { 4 | return text ? ( 5 |
{text ? capitalize(text) : text}
6 | ) : null 7 | } 8 | 9 | export default ErrorField 10 | -------------------------------------------------------------------------------- /components/instructions/InstructionDataView.tsx: -------------------------------------------------------------------------------- 1 | import { InstructionDescriptor } from './tools' 2 | 3 | const InstructionDataView = ({ 4 | descriptor, 5 | }: { 6 | descriptor: InstructionDescriptor | undefined 7 | }) => { 8 | return ( 9 |
10 | 11 | {descriptor?.dataUI} 12 | 13 |
14 | ) 15 | } 16 | 17 | export default InstructionDataView 18 | -------------------------------------------------------------------------------- /components/instructions/programs/jupiterRef.tsx: -------------------------------------------------------------------------------- 1 | export const JUPITER_REF = { 2 | REFER4ZgmyYx9c6He5XfaTMiGfdLwRnkV4RPp9t9iF3: { 3 | 125: { 4 | name: 'Initialize Referral Token Account', 5 | accounts: [ 6 | { name: 'Payer' }, 7 | { name: '' }, 8 | { name: 'Referral' }, 9 | { name: '' }, 10 | { name: 'Mint' }, 11 | ], 12 | getDataUI: () => { 13 | return
14 | }, 15 | }, 16 | }, 17 | } 18 | -------------------------------------------------------------------------------- /components/treasuryV2/Details/ExploreLink.tsx: -------------------------------------------------------------------------------- 1 | import { ExternalLinkIcon } from '@heroicons/react/outline' 2 | import React from 'react' 3 | import cx from 'classnames' 4 | 5 | export const ExploreButton = (props: { 6 | address: string 7 | className?: string 8 | }) => { 9 | return ( 10 | 16 | 17 | 18 | ) 19 | } 20 | -------------------------------------------------------------------------------- /components/treasuryV2/Details/NoWalletSelected.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | interface Props { 4 | className?: string 5 | } 6 | 7 | export default function NoWalletSelected(props: Props) { 8 | return ( 9 |
10 |
11 | No wallet selected 12 |
13 |
14 | ) 15 | } 16 | -------------------------------------------------------------------------------- /components/treasuryV2/Details/ProgramsDetails/Info/Overview/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | import { Programs } from '@models/treasury/Asset' 4 | 5 | import Program from './Program' 6 | 7 | interface Props { 8 | className?: string 9 | programs: Programs 10 | } 11 | 12 | export default function Overview(props: Props) { 13 | return ( 14 |
15 | {props.programs.list.map((program) => ( 16 | 21 | ))} 22 |
23 | ) 24 | } 25 | -------------------------------------------------------------------------------- /components/treasuryV2/Details/StakeDetails/Info/Overview/Stake.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import cx from 'classnames' 3 | import { Stake as IStake } from '@models/treasury/Asset' 4 | import { StakeState } from '@utils/uiTypes/assets' 5 | 6 | interface Props { 7 | className?: string 8 | account: IStake 9 | } 10 | 11 | export default function Stake(props: Props) { 12 | return ( 13 |
16 | State: {StakeState[props.account.state]} 17 |
18 | ) 19 | } 20 | -------------------------------------------------------------------------------- /components/treasuryV2/Details/StakeDetails/Info/Overview/index.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Stake as IStake } from '@models/treasury/Asset' 3 | import Stake from './Stake' 4 | 5 | interface Props { 6 | className?: string 7 | account: IStake 8 | } 9 | 10 | export default function Overview(props: Props) { 11 | return ( 12 |
13 | 18 |
19 | ) 20 | } 21 | -------------------------------------------------------------------------------- /components/treasuryV2/Details/tabState.ts: -------------------------------------------------------------------------------- 1 | import create, { State } from 'zustand' 2 | 3 | interface TabState extends State { 4 | selected: { [key: string]: unknown } 5 | get(key: string): T | undefined 6 | set(key: string, val: T): void 7 | } 8 | 9 | export const useTabState = create((set, get) => ({ 10 | selected: {}, 11 | get: (key: string) => get().selected[key] as T | undefined, 12 | set: (key: string, val: T) => 13 | set((s) => { 14 | s.selected[key] = val 15 | }), 16 | })) 17 | -------------------------------------------------------------------------------- /components/treasuryV2/icons/NFTCollectionPreviewIcon.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | type Props = React.SVGAttributes 4 | 5 | export default function NFTCollectionPreviewIcon(props: Props) { 6 | return ( 7 | 13 | 22 | 27 | 28 | ) 29 | } 30 | -------------------------------------------------------------------------------- /components/treasuryV2/icons/UnknownTokenIcon.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | type Props = React.SVGAttributes 4 | 5 | export default function UnknownTokenIcon(props: Props) { 6 | return ( 7 | 13 | 18 | 19 | ) 20 | } 21 | -------------------------------------------------------------------------------- /constants/endpoints.ts: -------------------------------------------------------------------------------- 1 | export const MAINNET_RPC = 2 | process.env.NEXT_PUBLIC_MAINNET_RPC || 3 | process.env.MAINNET_RPC || 4 | 'http://realms-realms-c335.mainnet.rpcpool.com' 5 | 6 | export const DEVNET_RPC = 7 | process.env.NEXT_PUBLIC_DEVNET_RPC || 8 | process.env.DEVNET_RPC || 9 | 'https://mango.devnet.rpcpool.com' 10 | -------------------------------------------------------------------------------- /constants/flags.ts: -------------------------------------------------------------------------------- 1 | import { findPluginName } from './plugins' 2 | 3 | export const SUPPORT_CNFTS = true 4 | export const ON_NFT_VOTER_V2 = false 5 | export const SHOW_DELEGATORS_LIST = false 6 | 7 | export const DELEGATOR_BATCH_VOTE_SUPPORT_BY_PLUGIN: Record< 8 | ReturnType, 9 | boolean 10 | > = { 11 | vanilla: true, 12 | VSR: true, 13 | HeliumVSR: false, 14 | gateway: false, 15 | QV: false, 16 | NFT: false, 17 | pyth: false, 18 | unknown: false, 19 | drift: false, 20 | token_haver: false, 21 | parcl: false 22 | } 23 | -------------------------------------------------------------------------------- /constants/pubkeys/lido.ts: -------------------------------------------------------------------------------- 1 | export const LIDO_PROGRAM_ID = 'CrX7kMhLC3cSsXJdT7JDgqrRVWGnUpX3gfEfxxU2NVLi' 2 | export const LIDO_PROGRAM_ID_DEVNET = 3 | 'CbxVmURN74QZGuFj6qKjM8VDM8b8KKZrbPFLM2CC2hC8' 4 | -------------------------------------------------------------------------------- /hooks/selectedRealm/useGoverningTokenMint.ts: -------------------------------------------------------------------------------- 1 | import { useRealmQuery } from '@hooks/queries/realm' 2 | 3 | export default function (governingTokenRole: 'community' | 'council') { 4 | const realm = useRealmQuery().data?.result 5 | return governingTokenRole === 'community' 6 | ? realm?.account.communityMint 7 | : realm?.account.config.councilMint 8 | } 9 | -------------------------------------------------------------------------------- /hooks/selectedRealm/useRoleOfToken.ts: -------------------------------------------------------------------------------- 1 | import { PublicKey } from '@solana/web3.js' 2 | import { useRealmQuery } from '../queries/realm' 3 | 4 | const useRoleOfGovToken = (mint?: PublicKey) => { 5 | const realm = useRealmQuery().data?.result 6 | const role = 7 | realm === undefined || mint === undefined 8 | ? undefined 9 | : realm.account.communityMint.equals(mint) 10 | ? 'community' 11 | : realm.account.config.councilMint?.equals(mint) 12 | ? 'council' 13 | : 'not found' 14 | return role 15 | } 16 | 17 | export default useRoleOfGovToken 18 | -------------------------------------------------------------------------------- /hooks/useFormatTokenAmount.ts: -------------------------------------------------------------------------------- 1 | import { PublicKey } from '@solana/web3.js' 2 | import BigNumber from 'bignumber.js' 3 | import BN from 'bn.js' 4 | import { useMintInfoByPubkeyQuery } from './queries/mintInfo' 5 | import { useMemo } from 'react' 6 | 7 | const useFormatTokenAmount = (mint: PublicKey | undefined) => { 8 | const { data: mintInfo } = useMintInfoByPubkeyQuery(mint) 9 | 10 | return useMemo( 11 | () => 12 | mintInfo?.result 13 | ? (x: BN | BigNumber | string) => 14 | new BigNumber(x.toString()) 15 | .shiftedBy(-mintInfo?.result.decimals) 16 | .toString() 17 | : undefined, 18 | [mintInfo?.result] 19 | ) 20 | } 21 | 22 | export default useFormatTokenAmount 23 | -------------------------------------------------------------------------------- /hooks/useGovernanceForGovernedAddress.ts: -------------------------------------------------------------------------------- 1 | import { PublicKey } from '@solana/web3.js' 2 | import { useMemo } from 'react' 3 | import useGovernanceAssets from './useGovernanceAssets' 4 | 5 | const useGovernanceForGovernedAddress = (pubkey: PublicKey | undefined) => { 6 | const { assetAccounts } = useGovernanceAssets() 7 | const assetAccount = useMemo( 8 | () => pubkey && assetAccounts.find((x) => x.pubkey.equals(pubkey)), 9 | [assetAccounts, pubkey] 10 | ) 11 | return assetAccount?.governance 12 | } 13 | 14 | export default useGovernanceForGovernedAddress 15 | -------------------------------------------------------------------------------- /hooks/useGovernanceSelect.ts: -------------------------------------------------------------------------------- 1 | import { PublicKey } from '@solana/web3.js' 2 | import { useMemo, useState } from 'react' 3 | import { useRealmGovernancesQuery } from './queries/governance' 4 | 5 | const useGovernanceSelect = (initialSelection?: PublicKey) => { 6 | const [selection, setSelection] = useState(initialSelection) 7 | const { data: governances } = useRealmGovernancesQuery() 8 | const selectionOrDefault = useMemo( 9 | () => selection ?? governances?.[0]?.pubkey, 10 | [governances, selection] 11 | ) 12 | 13 | return [selectionOrDefault, setSelection] as const 14 | } 15 | export default useGovernanceSelect 16 | -------------------------------------------------------------------------------- /hooks/useHasVoteTimeExpired.ts: -------------------------------------------------------------------------------- 1 | import { Governance, Proposal } from '@solana/spl-governance' 2 | import { ProgramAccount } from '@solana/spl-governance' 3 | import { useIsBeyondTimestamp } from './useIsBeyondTimestamp' 4 | 5 | export const useHasVoteTimeExpired = ( 6 | governance: ProgramAccount | undefined, 7 | proposal: ProgramAccount 8 | ) => { 9 | return useIsBeyondTimestamp( 10 | proposal 11 | ? proposal.account.isVoteFinalized() 12 | ? 0 // If vote is finalized then set the timestamp to 0 to make it expired 13 | : proposal.account.votingAt && governance 14 | ? proposal.account.votingAt.toNumber() + 15 | governance.account.config.baseVotingTime 16 | : undefined 17 | : undefined 18 | ) 19 | } 20 | -------------------------------------------------------------------------------- /hooks/useLegacyConnectionContext.ts: -------------------------------------------------------------------------------- 1 | import { useConnection } from '@solana/wallet-adapter-react' 2 | import { useMemo } from 'react' 3 | 4 | /** 5 | * @deprecated 6 | * this hook is part of a refactor effort, you should not use it 7 | * just use useConnection from @solana/wallet-adapter-react 8 | */ 9 | const useLegacyConnectionContext = () => { 10 | const { connection } = useConnection() 11 | return useMemo( 12 | () => ({ 13 | current: connection, 14 | endpoint: connection.rpcEndpoint, 15 | cluster: connection.rpcEndpoint.includes('devnet') 16 | ? ('devnet' as const) 17 | : ('mainnet' as const), 18 | }), 19 | [connection] 20 | ) 21 | } 22 | 23 | export default useLegacyConnectionContext 24 | -------------------------------------------------------------------------------- /hooks/useMaxVoteRecord.ts: -------------------------------------------------------------------------------- 1 | import {getMaxVoterWeightRecord} from '@solana/spl-governance' 2 | import {useRealmVoterWeightPlugins} from "@hooks/useRealmVoterWeightPlugins"; 3 | import {useConnection} from "@solana/wallet-adapter-react"; 4 | import {useAsync} from "react-async-hook"; 5 | 6 | export const useMaxVoteRecord = () => { 7 | const { connection } = useConnection() 8 | const { maxVoterWeightPk } = useRealmVoterWeightPlugins(); 9 | 10 | const maxVoteWeightRecord = useAsync(async () => 11 | maxVoterWeightPk && 12 | getMaxVoterWeightRecord(connection, maxVoterWeightPk), 13 | [maxVoterWeightPk?.toBase58()] 14 | ); 15 | 16 | return maxVoteWeightRecord.result 17 | } 18 | -------------------------------------------------------------------------------- /hooks/useNftRegistrar.ts: -------------------------------------------------------------------------------- 1 | import {useNftClient} from "../VoterWeightPlugins/useNftClient"; 2 | import {NftVoter} from "../idls/nft_voter"; 3 | import { IdlAccounts } from '@coral-xyz/anchor'; 4 | 5 | export const useNftRegistrar = () => { 6 | const { plugin } = useNftClient(); 7 | return plugin?.params as IdlAccounts['registrar'] | null; 8 | } 9 | -------------------------------------------------------------------------------- /hooks/useProgramVersion.ts: -------------------------------------------------------------------------------- 1 | import { useProgramVersionByIdQuery } from './queries/useProgramVersionQuery' 2 | import { useRealmQuery } from './queries/realm' 3 | 4 | const useProgramVersion = () => { 5 | const realm = useRealmQuery().data?.result 6 | const queriedVersion = useProgramVersionByIdQuery(realm?.owner).data as 7 | | 1 8 | | 2 9 | | 3 10 | | undefined 11 | return queriedVersion 12 | } 13 | 14 | export default useProgramVersion 15 | -------------------------------------------------------------------------------- /hooks/useProposal.tsx: -------------------------------------------------------------------------------- 1 | import { useRouteProposalQuery } from './queries/proposal' 2 | import { useGovernanceByPubkeyQuery } from './queries/governance' 3 | 4 | export const useProposalGovernanceQuery = () => { 5 | const proposal = useRouteProposalQuery().data?.result 6 | return useGovernanceByPubkeyQuery(proposal?.account.governance) 7 | } 8 | -------------------------------------------------------------------------------- /hooks/useSolanaUnixNow.ts: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from 'react' 2 | import { SYSVAR_CLOCK_PUBKEY } from '@solana/web3.js' 3 | import useWalletDeprecated from './useWalletDeprecated' 4 | 5 | export const useSolanaUnixNow = () => { 6 | const { anchorProvider } = useWalletDeprecated() 7 | const [unixNow, setUnixNow] = useState() 8 | 9 | useEffect(() => { 10 | ;(async () => { 11 | const clock = await anchorProvider.connection.getAccountInfo( 12 | SYSVAR_CLOCK_PUBKEY 13 | ) 14 | setUnixNow(Number(clock!.data.readBigInt64LE(8 * 4))) 15 | })() 16 | }, [setUnixNow, anchorProvider]) 17 | 18 | return { unixNow } 19 | } 20 | -------------------------------------------------------------------------------- /hooks/useTreasuryAddressForGovernance.ts: -------------------------------------------------------------------------------- 1 | import { getNativeTreasuryAddress } from '@solana/spl-governance' 2 | import { useAsync } from 'react-async-hook' 3 | import { useRealmQuery } from './queries/realm' 4 | import { PublicKey } from '@solana/web3.js' 5 | 6 | const useTreasuryAddressForGovernance = (governance: PublicKey | undefined) => { 7 | const realm = useRealmQuery().data?.result 8 | 9 | return useAsync( 10 | async () => 11 | governance && realm?.owner 12 | ? await getNativeTreasuryAddress(realm.owner, governance) 13 | : undefined, 14 | [governance, realm?.owner] 15 | ) 16 | } 17 | 18 | export default useTreasuryAddressForGovernance 19 | -------------------------------------------------------------------------------- /hooks/useTreasuryInfo/calculateTotalValue.ts: -------------------------------------------------------------------------------- 1 | import { BigNumber } from 'bignumber.js' 2 | 3 | export const calculateTotalValue = (values: BigNumber[]) => { 4 | let total = new BigNumber(0) 5 | 6 | for (const value of values.values()) { 7 | total = total.plus(value) 8 | } 9 | 10 | return total 11 | } 12 | -------------------------------------------------------------------------------- /hooks/useTreasuryInfo/getAccountAssetCount.ts: -------------------------------------------------------------------------------- 1 | import { BigNumber } from 'bignumber.js' 2 | 3 | import { AccountType, AssetAccount } from '@utils/uiTypes/assets' 4 | 5 | export const getAccountAssetCount = (account: AssetAccount) => { 6 | let count = new BigNumber(0) 7 | 8 | if (account.type === AccountType.SOL && account.extensions.solAccount) { 9 | count = new BigNumber(account.extensions.solAccount.lamports) 10 | } 11 | 12 | if (account.type === AccountType.TOKEN && account.extensions.token) { 13 | count = new BigNumber(account.extensions.token.account.amount.toString()) 14 | } 15 | 16 | if (account.extensions.mint) { 17 | count = count.shiftedBy(-account.extensions.mint.account.decimals) 18 | } 19 | 20 | return count 21 | } 22 | -------------------------------------------------------------------------------- /hooks/useTreasuryInfo/groupDomainsByWallet.ts: -------------------------------------------------------------------------------- 1 | import { Domain } from '@models/treasury/Domain' 2 | 3 | export function groupDomainsByWallet(domains: Domain[]) { 4 | return domains.reduce((acc, domain) => { 5 | if (!acc[domain.owner]) { 6 | acc[domain.owner] = [] 7 | } 8 | acc[domain.owner].push(domain) 9 | 10 | return acc 11 | }, {} as { [wallet: string]: Domain[] }) 12 | } 13 | -------------------------------------------------------------------------------- /hooks/useTreasuryInfo/groupProgramsByWallet.ts: -------------------------------------------------------------------------------- 1 | import { PublicKey } from '@solana/web3.js' 2 | 3 | import { AssetAccount, AccountType } from '@utils/uiTypes/assets' 4 | 5 | export type ProgramAssetAccount = Omit & { 6 | type: AccountType.PROGRAM 7 | } 8 | 9 | export async function groupProgramsByWallet( 10 | programId: PublicKey, 11 | programs: ProgramAssetAccount[] 12 | ) { 13 | const groups: { [wallet: string]: ProgramAssetAccount[] } = {} 14 | 15 | for (const program of programs) { 16 | const walletAddress = program.governance.nativeTreasuryAddress.toBase58() 17 | 18 | if (!groups[walletAddress]) { 19 | groups[walletAddress] = [] 20 | } 21 | 22 | groups[walletAddress].push(program) 23 | } 24 | 25 | return groups 26 | } 27 | -------------------------------------------------------------------------------- /hooks/useWalletOnePointOh.ts: -------------------------------------------------------------------------------- 1 | import { useWallet } from '@solana/wallet-adapter-react' 2 | import useViewAsWallet from './useViewAsWallet' 3 | import { SignerWalletAdapter } from '@solana/wallet-adapter-base' 4 | 5 | /** Why does this have such a weird name? 6 | * I wanted to differentiate it from the solana-wallet-adapter hook, useWallet, which is used by Hubs 7 | * This is the one you should be using unless developing in Hubs (which you are probably not) 8 | * Feel free to direct questions to @asktree 9 | */ 10 | export default function useWalletOnePointOh() { 11 | const { wallet } = useWallet() 12 | const debugAdapter = useViewAsWallet() 13 | 14 | const adapter = 15 | wallet !== null ? (wallet.adapter as SignerWalletAdapter) : undefined 16 | return debugAdapter ?? adapter 17 | } 18 | -------------------------------------------------------------------------------- /hub/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "singleQuote": true, 4 | "trailingComma": "all", 5 | "quoteProps": "consistent" 6 | } 7 | -------------------------------------------------------------------------------- /hub/components/DiscoverPage/LargeCard/gql.ts: -------------------------------------------------------------------------------- 1 | import * as IT from 'io-ts'; 2 | import { gql } from 'urql'; 3 | 4 | export const getRealm = gql` 5 | query getRealm($realm: PublicKey!) { 6 | hub(realm: $realm) { 7 | twitterFollowerCount 8 | } 9 | } 10 | `; 11 | 12 | export const getRealmResp = IT.type({ 13 | hub: IT.type({ 14 | twitterFollowerCount: IT.number, 15 | }), 16 | }); 17 | -------------------------------------------------------------------------------- /hub/components/DiscoverPage/Noteworthy/audius.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/hub/components/DiscoverPage/Noteworthy/audius.png -------------------------------------------------------------------------------- /hub/components/DiscoverPage/Noteworthy/monkedao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/hub/components/DiscoverPage/Noteworthy/monkedao.png -------------------------------------------------------------------------------- /hub/components/DiscoverPage/Noteworthy/sms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/hub/components/DiscoverPage/Noteworthy/sms.png -------------------------------------------------------------------------------- /hub/components/DiscoverPage/Noteworthy/staratlas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/hub/components/DiscoverPage/Noteworthy/staratlas.png -------------------------------------------------------------------------------- /hub/components/DiscoverPage/Sidebar/Trending/Org/gql.ts: -------------------------------------------------------------------------------- 1 | import * as IT from 'io-ts'; 2 | import { gql } from 'urql'; 3 | 4 | export const getRealm = gql` 5 | query getRealm($realm: PublicKey!) { 6 | hub(realm: $realm) { 7 | twitterFollowerCount 8 | } 9 | realm(publicKey: $realm) { 10 | twitterHandle 11 | } 12 | } 13 | `; 14 | 15 | export const getRealmResp = IT.type({ 16 | hub: IT.type({ 17 | twitterFollowerCount: IT.number, 18 | }), 19 | realm: IT.type({ 20 | twitterHandle: IT.union([IT.null, IT.string]), 21 | }), 22 | }); 23 | -------------------------------------------------------------------------------- /hub/components/DiscoverPage/Sidebar/index.tsx: -------------------------------------------------------------------------------- 1 | import * as Separator from '@radix-ui/react-separator'; 2 | 3 | import { Post, Realm } from '../gql'; 4 | import cx from '@hub/lib/cx'; 5 | 6 | import { Announcements } from './Announcements'; 7 | import { Trending } from './Trending'; 8 | 9 | interface Props { 10 | className?: string; 11 | announcements: Post[]; 12 | trending: Realm[]; 13 | } 14 | 15 | export function Sidebar(props: Props) { 16 | return ( 17 |
18 | 19 | 20 | 21 |
22 | ); 23 | } 24 | -------------------------------------------------------------------------------- /hub/components/DiscoverPage/Title/index.tsx: -------------------------------------------------------------------------------- 1 | interface Props { 2 | className?: string; 3 | } 4 | 5 | export function Title(props: Props) { 6 | return ( 7 |
8 |
9 | Discover the next big project. 10 |
11 |
12 | Become a part of the community and join the conversation. 13 |
14 |
15 | ); 16 | } 17 | -------------------------------------------------------------------------------- /hub/components/EcosystemHeader/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/hub/components/EcosystemHeader/banner.png -------------------------------------------------------------------------------- /hub/components/EcosystemHeader/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/hub/components/EcosystemHeader/icon.png -------------------------------------------------------------------------------- /hub/components/EditMetadata/EditForms/common/FieldDescription.tsx: -------------------------------------------------------------------------------- 1 | import cx from '@hub/lib/cx'; 2 | 3 | interface Props { 4 | className?: string; 5 | children: React.ReactNode; 6 | } 7 | 8 | export function FieldDescription(props: Props) { 9 | return ( 10 |

19 | {props.children} 20 |

21 | ); 22 | } 23 | -------------------------------------------------------------------------------- /hub/components/EditMetadata/EditForms/common/FieldHeader.tsx: -------------------------------------------------------------------------------- 1 | import cx from '@hub/lib/cx'; 2 | 3 | interface Props { 4 | className?: string; 5 | children: string; 6 | } 7 | 8 | export function FieldHeader(props: Props) { 9 | return ( 10 |

19 | {props.children} 20 |

21 | ); 22 | } 23 | -------------------------------------------------------------------------------- /hub/components/EditMetadata/EditForms/gql.ts: -------------------------------------------------------------------------------- 1 | import * as IT from 'io-ts'; 2 | import { gql } from 'urql'; 3 | 4 | export const checkSymbol = gql` 5 | query checkSymbol($realm: PublicKey!, $symbol: String!) { 6 | canAssignSymbolToRealm(realm: $realm, symbol: $symbol) 7 | } 8 | `; 9 | 10 | export const checkSymbolResp = IT.type({ 11 | canAssignSymbolToRealm: IT.boolean, 12 | }); 13 | -------------------------------------------------------------------------------- /hub/components/EditWalletRules/SectionBlock/index.tsx: -------------------------------------------------------------------------------- 1 | import cx from '@hub/lib/cx'; 2 | 3 | interface Props { 4 | className?: string; 5 | children: React.ReactNode; 6 | } 7 | 8 | export function SectionBlock(props: Props) { 9 | return ( 10 |
19 | {props.children} 20 |
21 | ); 22 | } 23 | -------------------------------------------------------------------------------- /hub/components/EditWalletRules/SummaryItem/index.tsx: -------------------------------------------------------------------------------- 1 | import cx from '@hub/lib/cx'; 2 | 3 | interface Props { 4 | className?: string; 5 | label: React.ReactNode; 6 | value: React.ReactNode; 7 | } 8 | 9 | export function SummaryItem(props: Props) { 10 | return ( 11 |
19 |
{props.label}
20 |
{props.value}
21 |
22 | ); 23 | } 24 | -------------------------------------------------------------------------------- /hub/components/EditWalletRules/ValueBlock/index.tsx: -------------------------------------------------------------------------------- 1 | import { ValueDescription } from '../ValueDescription'; 2 | import { ValueLabel } from '../ValueLabel'; 3 | 4 | interface Props { 5 | className?: string; 6 | title: string; 7 | description: React.ReactNode; 8 | children: React.ReactNode; 9 | } 10 | 11 | export function ValueBlock(props: Props) { 12 | return ( 13 |
14 | 15 | 16 |
{props.children}
17 |
18 | ); 19 | } 20 | -------------------------------------------------------------------------------- /hub/components/EditWalletRules/ValueDescription/index.tsx: -------------------------------------------------------------------------------- 1 | import cx from '@hub/lib/cx'; 2 | 3 | interface Props { 4 | className?: string; 5 | text: React.ReactNode; 6 | } 7 | 8 | export function ValueDescription(props: Props) { 9 | return ( 10 |
11 | {props.text} 12 |
13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /hub/components/EditWalletRules/ValueLabel/index.tsx: -------------------------------------------------------------------------------- 1 | import cx from '@hub/lib/cx'; 2 | 3 | interface Props { 4 | className?: string; 5 | text: string; 6 | } 7 | 8 | export function ValueLabel(props: Props) { 9 | return ( 10 |
11 | {props.text} 12 |
13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /hub/components/EditWalletRules/constants.ts: -------------------------------------------------------------------------------- 1 | import { BigNumber } from 'bignumber.js'; 2 | 3 | export const MAX_NUM = new BigNumber('18446744073709551615'); 4 | -------------------------------------------------------------------------------- /hub/components/EditWalletRules/types.ts: -------------------------------------------------------------------------------- 1 | import { TypeOf } from 'io-ts'; 2 | 3 | import * as gql from './gql'; 4 | 5 | export type Rules = TypeOf< 6 | typeof gql.getGovernanceRulesResp 7 | >['realmByUrlId']['governance']; 8 | export type CommunityRules = Rules['communityTokenRules']; 9 | export type CouncilRules = Rules['councilTokenRules']; 10 | -------------------------------------------------------------------------------- /hub/components/GlobalHeader/CreateHub/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/hub/components/GlobalHeader/CreateHub/image.png -------------------------------------------------------------------------------- /hub/components/GlobalHeader/User/DialectNotifications/index.ts: -------------------------------------------------------------------------------- 1 | export { DialectNotifications } from './DialectNotifications'; 2 | -------------------------------------------------------------------------------- /hub/components/GlobalHeader/User/Loading.tsx: -------------------------------------------------------------------------------- 1 | import cx from '@hub/lib/cx'; 2 | 3 | interface Props { 4 | className?: string; 5 | compressed?: boolean; 6 | } 7 | 8 | export function Loading(props: Props) { 9 | return ( 10 |
25 |   26 |
27 | ); 28 | } 29 | -------------------------------------------------------------------------------- /hub/components/GlobalStats/common/Label.tsx: -------------------------------------------------------------------------------- 1 | import cx from '@hub/lib/cx'; 2 | 3 | interface Props { 4 | className?: string; 5 | children: string; 6 | } 7 | 8 | export function Label(props: Props) { 9 | return ( 10 |

20 | {props.children} 21 |

22 | ); 23 | } 24 | -------------------------------------------------------------------------------- /hub/components/GlobalStats/common/Value.tsx: -------------------------------------------------------------------------------- 1 | import cx from '@hub/lib/cx'; 2 | 3 | interface Props { 4 | className?: string; 5 | children: string; 6 | } 7 | 8 | export function Value(props: Props) { 9 | return ( 10 |
19 | {props.children} 20 |
21 | ); 22 | } 23 | -------------------------------------------------------------------------------- /hub/components/GlobalStats/common/index.tsx: -------------------------------------------------------------------------------- 1 | export * from './Label'; 2 | export * from './Value'; 3 | -------------------------------------------------------------------------------- /hub/components/GlobalStats/data/getGovernances.ts: -------------------------------------------------------------------------------- 1 | import { getAllGovernances } from '@solana/spl-governance'; 2 | import { Connection, PublicKey } from '@solana/web3.js'; 3 | 4 | import type { Logger } from '../Logs'; 5 | 6 | export async function getGovernances( 7 | connnection: Connection, 8 | logger: Logger, 9 | programId: PublicKey, 10 | realm: PublicKey, 11 | ): Promise { 12 | const governances = await getAllGovernances(connnection, programId, realm); 13 | return governances.map((g) => g.pubkey); 14 | } 15 | -------------------------------------------------------------------------------- /hub/components/GlobalStats/gql.ts: -------------------------------------------------------------------------------- 1 | import * as IT from 'io-ts'; 2 | import { gql } from 'urql'; 3 | 4 | import { PublicKey } from '@hub/types/decoders/PublicKey'; 5 | 6 | export const getPerms = gql` 7 | query { 8 | me { 9 | amSiteAdmin 10 | publicKey 11 | } 12 | } 13 | `; 14 | 15 | export const getPermsResp = IT.type({ 16 | me: IT.union([ 17 | IT.null, 18 | IT.type({ 19 | amSiteAdmin: IT.union([IT.null, IT.boolean]), 20 | publicKey: PublicKey, 21 | }), 22 | ]), 23 | }); 24 | -------------------------------------------------------------------------------- /hub/components/Home/Feed/EndOfFeed/index.tsx: -------------------------------------------------------------------------------- 1 | import ListDropdownIcon from '@carbon/icons-react/lib/ListDropdown'; 2 | 3 | import cx from '@hub/lib/cx'; 4 | 5 | interface Props { 6 | className?: string; 7 | } 8 | 9 | export function EndOfFeed(props: Props) { 10 | return ( 11 |
20 | 21 |
22 | You've reached the end of the feed 23 |
24 |
25 | ); 26 | } 27 | -------------------------------------------------------------------------------- /hub/components/Hub/Roadmap/DashesSvg.tsx: -------------------------------------------------------------------------------- 1 | interface Props extends React.SVGAttributes {} 2 | 3 | export function DashesSvg(props: Props) { 4 | return ( 5 | 6 | 7 | 8 | ); 9 | } 10 | -------------------------------------------------------------------------------- /hub/components/Hub/Roadmap/StartSvg.tsx: -------------------------------------------------------------------------------- 1 | interface Props extends React.SVGAttributes {} 2 | 3 | export function StartSvg(props: Props) { 4 | return ( 5 | 6 | 11 | 12 | ); 13 | } 14 | -------------------------------------------------------------------------------- /hub/components/Hub/Stats/gql.ts: -------------------------------------------------------------------------------- 1 | import * as IT from 'io-ts'; 2 | import { gql } from 'urql'; 3 | 4 | import { BigNumber } from '@hub/types/decoders/BigNumber'; 5 | import { PublicKey } from '@hub/types/decoders/PublicKey'; 6 | 7 | export const getTreasuryValue = gql` 8 | query getTreasuryValue($realm: PublicKey!) { 9 | realmTreasury(realm: $realm) { 10 | belongsTo 11 | totalValue 12 | } 13 | } 14 | `; 15 | 16 | export const getTreasuryValueResp = IT.type({ 17 | realmTreasury: IT.type({ 18 | belongsTo: PublicKey, 19 | totalValue: BigNumber, 20 | }), 21 | }); 22 | -------------------------------------------------------------------------------- /hub/components/Hub/Team/avatar-default.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/hub/components/Hub/Team/avatar-default.jpg -------------------------------------------------------------------------------- /hub/components/RealmSelector/gql.ts: -------------------------------------------------------------------------------- 1 | import * as IT from 'io-ts'; 2 | import { gql } from 'urql'; 3 | 4 | import { PublicKey } from '@hub/types/decoders/PublicKey'; 5 | 6 | export const getRealmsList = gql` 7 | query realmDropdownList { 8 | realmDropdownList { 9 | name 10 | publicKey 11 | iconUrl 12 | urlId 13 | } 14 | } 15 | `; 16 | 17 | export const getRealmsListResp = IT.type({ 18 | realmDropdownList: IT.array( 19 | IT.type({ 20 | name: IT.string, 21 | publicKey: PublicKey, 22 | iconUrl: IT.union([IT.null, IT.string]), 23 | urlId: IT.string, 24 | }), 25 | ), 26 | }); 27 | -------------------------------------------------------------------------------- /hub/components/RichTextDocumentDisplay/ImageNode/index.tsx: -------------------------------------------------------------------------------- 1 | import { ImageNode as ImageNodeModel } from '@hub/types/RichTextDocument'; 2 | 3 | interface Props { 4 | className?: string; 5 | image: ImageNodeModel; 6 | isClipped?: boolean; 7 | isLast?: boolean; 8 | showExpand?: boolean; 9 | onExpand?(): void; 10 | } 11 | 12 | // eslint-disable-next-line 13 | export function ImageNode(props: Props) { 14 | return
; 15 | } 16 | -------------------------------------------------------------------------------- /hub/components/branding/RealmCircleImage.tsx: -------------------------------------------------------------------------------- 1 | import image from './logoimage.png'; 2 | 3 | type Props = React.ImgHTMLAttributes; 4 | 5 | export function RealmCircleImage(props: Props) { 6 | return ; 7 | } 8 | -------------------------------------------------------------------------------- /hub/components/branding/logoimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/hub/components/branding/logoimage.png -------------------------------------------------------------------------------- /hub/components/controls/Button/index.tsx: -------------------------------------------------------------------------------- 1 | export { Primary } from './Primary'; 2 | export { PrimaryAlt } from './PrimaryAlt'; 3 | export { Secondary } from './Secondary'; 4 | export { SecondaryAlt } from './SecondaryAlt'; 5 | export { SecondaryRed } from './SecondaryRed'; 6 | export { Tertiary } from './Tertiary'; 7 | -------------------------------------------------------------------------------- /hub/components/controls/RichTextEditor/index.css: -------------------------------------------------------------------------------- 1 | .public-DraftEditorPlaceholder-inner { 2 | color: #a3a3a3; 3 | font-size: 1em; 4 | font-weight: 400px; 5 | line-height: 1.25em; 6 | } 7 | 8 | .public-DraftEditor-content { 9 | color: #18181b; 10 | font-size: 1em; 11 | font-weight: 400px; 12 | line-height: 1.25em; 13 | } 14 | -------------------------------------------------------------------------------- /hub/components/controls/RichTextEditor/styles.ts: -------------------------------------------------------------------------------- 1 | import 'draft-js/dist/Draft.css'; 2 | -------------------------------------------------------------------------------- /hub/components/icons/ExternalLink.tsx: -------------------------------------------------------------------------------- 1 | interface Props extends React.SVGAttributes {} 2 | 3 | export function ExternalLink(props: Props) { 4 | return ( 5 | 6 | 7 | 12 | 13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /hub/components/icons/NFT.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | type Props = React.SVGAttributes; 4 | 5 | export function NFT(props: Props) { 6 | return ( 7 | 8 | 19 | 26 | 27 | ); 28 | } 29 | -------------------------------------------------------------------------------- /hub/hooks/useCluster.ts: -------------------------------------------------------------------------------- 1 | import { useContext } from 'react'; 2 | 3 | import { ClusterType, context } from '@hub/providers/Cluster'; 4 | 5 | export function useCluster() { 6 | const value = useContext(context); 7 | return [value.cluster, value.setType, value.type] as const; 8 | } 9 | 10 | export { ClusterType }; 11 | -------------------------------------------------------------------------------- /hub/hooks/useJWT.ts: -------------------------------------------------------------------------------- 1 | import { useContext } from 'react'; 2 | 3 | import { context } from '@hub/providers/JWT'; 4 | 5 | export function useJWT() { 6 | const value = useContext(context); 7 | return [value.jwt, value.setJwt] as const; 8 | } 9 | -------------------------------------------------------------------------------- /hub/hooks/usePromise.ts: -------------------------------------------------------------------------------- 1 | import { useRef } from 'react'; 2 | 3 | export function usePromise() { 4 | const resolver = useRef<((value: T) => void) | null>(null); 5 | const promise = useRef>( 6 | new Promise((resolve) => { 7 | resolver.current = (value: T) => resolve(value); 8 | }), 9 | ); 10 | 11 | return [promise.current, (value: T) => resolver.current?.(value)] as const; 12 | } 13 | -------------------------------------------------------------------------------- /hub/hooks/useToast.ts: -------------------------------------------------------------------------------- 1 | import { useContext } from 'react'; 2 | 3 | import { context, ToastType } from '@hub/providers/Toast'; 4 | 5 | export function useToast() { 6 | const value = useContext(context); 7 | return { publish: value.publish }; 8 | } 9 | 10 | export { ToastType }; 11 | -------------------------------------------------------------------------------- /hub/hooks/useUserPrefs.ts: -------------------------------------------------------------------------------- 1 | import { useContext } from 'react'; 2 | 3 | import { context } from '@hub/providers/UserPrefs'; 4 | 5 | export function useUserPrefs() { 6 | return useContext(context); 7 | } 8 | -------------------------------------------------------------------------------- /hub/hooks/useWallet.ts: -------------------------------------------------------------------------------- 1 | import { useContext } from 'react'; 2 | 3 | import { context } from '@hub/providers/Wallet'; 4 | 5 | export function useWallet() { 6 | const { 7 | connect, 8 | publicKey, 9 | softConnect, 10 | setSoftConnect, 11 | signMessage, 12 | signTransaction, 13 | signAllTransactions, 14 | } = useContext(context); 15 | return { 16 | connect, 17 | publicKey, 18 | softConnect, 19 | setSoftConnect, 20 | signMessage, 21 | signTransaction, 22 | signAllTransactions, 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /hub/hooks/useWalletSelector.ts: -------------------------------------------------------------------------------- 1 | import { useContext } from 'react'; 2 | 3 | import { context } from '@hub/providers/WalletSelector'; 4 | 5 | export function useWalletSelector() { 6 | return useContext(context); 7 | } 8 | -------------------------------------------------------------------------------- /hub/lib/abbreviateAddress.ts: -------------------------------------------------------------------------------- 1 | import type { PublicKey } from '@solana/web3.js'; 2 | 3 | export function abbreviateAddress(address: PublicKey | string, size = 5) { 4 | const base58 = typeof address === 'string' ? address : address.toBase58(); 5 | return base58.slice(0, size) + '…' + base58.slice(-size); 6 | } 7 | -------------------------------------------------------------------------------- /hub/lib/capitalize.ts: -------------------------------------------------------------------------------- 1 | export function capitalize(text: string) { 2 | return text[0].toLocaleUpperCase() + text.slice(1); 3 | } 4 | -------------------------------------------------------------------------------- /hub/lib/constants.ts: -------------------------------------------------------------------------------- 1 | import { PublicKey } from '@solana/web3.js'; 2 | 3 | export const ECOSYSTEM_PAGE = new PublicKey( 4 | 'H3e67AJqEx3yiWcSdP7g6qVkrAeCrpJSkQtxAKy7QYGK', 5 | ); 6 | 7 | export const STEALTH_HUBS = new Set([ 8 | 'DA5G7QQbFioZ6K33wQcH8fVdgFcnaDjLD7DLQkapZg5X', 9 | ]); 10 | -------------------------------------------------------------------------------- /hub/lib/cx.ts: -------------------------------------------------------------------------------- 1 | import { twMerge } from 'tailwind-merge'; 2 | 3 | export default twMerge; 4 | -------------------------------------------------------------------------------- /hub/lib/estimateRealmUrlId.ts: -------------------------------------------------------------------------------- 1 | import type { PublicKey } from '@solana/web3.js'; 2 | 3 | import realms from 'public/realms/mainnet-beta.json'; 4 | 5 | export function estimateRealmUrlId(realm: PublicKey) { 6 | for (const jsonRealm of realms) { 7 | if (jsonRealm.realmId === realm.toBase58() && jsonRealm.symbol) { 8 | return jsonRealm.symbol; 9 | } 10 | } 11 | 12 | return realm.toBase58(); 13 | } 14 | -------------------------------------------------------------------------------- /hub/lib/filterUniqueBy.ts: -------------------------------------------------------------------------------- 1 | export function filterUniqueBy(key: K) { 2 | const visited = new Set(); 3 | 4 | return (o: O) => { 5 | const itemKey = o[key]; 6 | 7 | if (visited.has(itemKey)) { 8 | return false; 9 | } 10 | 11 | return true; 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /hub/lib/getDefaultBannerUrl.ts: -------------------------------------------------------------------------------- 1 | import type { PublicKey } from '@solana/web3.js'; 2 | 3 | const NUM_BANNERS = 20; 4 | 5 | export function getDefaultBannerUrl(seed: PublicKey | string) { 6 | const seedStr = typeof seed === 'string' ? seed : seed.toBase58(); 7 | const num = seedStr 8 | .split('') 9 | .reduce((acc, cur) => acc + cur.charCodeAt(0), 0); 10 | const index = (num % NUM_BANNERS) + 1; 11 | return `/banners/${index}.jpg`; 12 | } 13 | -------------------------------------------------------------------------------- /hub/lib/getGraphqlJsonSchema.ts: -------------------------------------------------------------------------------- 1 | import { getIntrospectionQuery, IntrospectionQuery } from 'graphql'; 2 | 3 | export function getGraphqlJsonSchema() { 4 | if (!process.env.NEXT_PUBLIC_API_ENDPOINT) { 5 | return Promise.resolve(null); 6 | } 7 | 8 | return fetch(process.env.NEXT_PUBLIC_API_ENDPOINT || '', { 9 | method: 'POST', 10 | headers: { 'Content-Type': 'application/json' }, 11 | body: JSON.stringify({ 12 | variables: {}, 13 | query: getIntrospectionQuery({ descriptions: false }), 14 | }), 15 | }) 16 | .then((result) => result.json()) 17 | .then((schema) => schema.data as IntrospectionQuery) 18 | .catch(() => null); 19 | } 20 | -------------------------------------------------------------------------------- /hub/lib/getUserLocale.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Get the user's locale using values on the browser. If unsuccessful, default 3 | * to `'en-US'`. 4 | */ 5 | export function getUserLocale() { 6 | if ( 7 | typeof window === 'undefined' || 8 | typeof window.navigator === 'undefined' 9 | ) { 10 | return 'en-US'; 11 | } 12 | 13 | if (window.navigator.languages?.length) { 14 | return window.navigator.languages[0]; 15 | } 16 | 17 | return window.navigator.language || 'en-US'; 18 | } 19 | -------------------------------------------------------------------------------- /hub/lib/gqlCacheStorage.ts: -------------------------------------------------------------------------------- 1 | import * as localforage from 'localforage'; 2 | 3 | export const getName = (jwt: string | null) => { 4 | if (!jwt) { 5 | return 'realms-anon'; 6 | } 7 | 8 | return `realms-${jwt}`; 9 | }; 10 | 11 | export const create = (jwt: string | null) => { 12 | const name = getName(jwt); 13 | return localforage.createInstance({ name }); 14 | }; 15 | 16 | export const destroy = (jwt: string | null) => { 17 | const name = getName(jwt); 18 | return localforage.dropInstance({ name }); 19 | }; 20 | -------------------------------------------------------------------------------- /hub/lib/image.ts: -------------------------------------------------------------------------------- 1 | export function getDimensions(src: string) { 2 | const image = new Image(); 3 | 4 | return new Promise<{ height: number; width: number }>((res, rej) => { 5 | image.onload = () => { 6 | const height = image.height; 7 | const width = image.width; 8 | res({ height, width }); 9 | }; 10 | 11 | image.onerror = rej; 12 | image.src = src; 13 | }); 14 | } 15 | -------------------------------------------------------------------------------- /hub/lib/ntext.ts: -------------------------------------------------------------------------------- 1 | export function ntext(count: number, singular: string, plural?: string) { 2 | if (count === 1) { 3 | return singular; 4 | } 5 | 6 | return plural || `${singular}s`; 7 | } 8 | -------------------------------------------------------------------------------- /hub/lib/signature.ts: -------------------------------------------------------------------------------- 1 | export function toHex(signature: Uint8Array) { 2 | return Array.from(signature) 3 | .map((n) => n.toString(16).padStart(2, '0')) 4 | .join(''); 5 | } 6 | 7 | export function toUint8Array(msg: string) { 8 | return new TextEncoder().encode(msg); 9 | } 10 | -------------------------------------------------------------------------------- /hub/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "strict": true 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /hub/types/FeedItemCommentVoteType.ts: -------------------------------------------------------------------------------- 1 | export enum FeedItemCommentVoteType { 2 | Approve = 'Approve', 3 | Disapprove = 'Disapprove', 4 | } 5 | -------------------------------------------------------------------------------- /hub/types/FeedItemSort.ts: -------------------------------------------------------------------------------- 1 | export enum FeedItemSort { 2 | New = 'New', 3 | Relevance = 'Relevance', 4 | TopAllTime = 'TopAllTime', 5 | } 6 | -------------------------------------------------------------------------------- /hub/types/FeedItemType.ts: -------------------------------------------------------------------------------- 1 | export enum FeedItemType { 2 | Post = 'Post', 3 | Proposal = 'Proposal', 4 | } 5 | -------------------------------------------------------------------------------- /hub/types/FeedItemVoteType.ts: -------------------------------------------------------------------------------- 1 | export enum FeedItemVoteType { 2 | Approve = 'Approve', 3 | Disapprove = 'Disapprove', 4 | } 5 | -------------------------------------------------------------------------------- /hub/types/FormCallbacks.ts: -------------------------------------------------------------------------------- 1 | export type FormCallbacks = { 2 | [K in keyof V as `on${Capitalize}Change`]+?: ( 3 | value: V[K], 4 | ) => void; 5 | }; 6 | -------------------------------------------------------------------------------- /hub/types/FormProps.ts: -------------------------------------------------------------------------------- 1 | import { FormCallbacks } from './FormCallbacks'; 2 | 3 | export type FormProps

= P & FormCallbacks

; 4 | -------------------------------------------------------------------------------- /hub/types/GovernanceTokenType.ts: -------------------------------------------------------------------------------- 1 | export enum GovernanceTokenType { 2 | Council = 'Council', 3 | Community = 'Community', 4 | } 5 | -------------------------------------------------------------------------------- /hub/types/GovernanceVoteTipping.ts: -------------------------------------------------------------------------------- 1 | export enum GovernanceVoteTipping { 2 | Disabled = 'Disabled', 3 | Early = 'Early', 4 | Strict = 'Strict', 5 | } 6 | -------------------------------------------------------------------------------- /hub/types/ProposalState.ts: -------------------------------------------------------------------------------- 1 | export enum ProposalState { 2 | Cancelled = 'Cancelled', 3 | Completed = 'Completed', 4 | Defeated = 'Defeated', 5 | Draft = 'Draft', 6 | Executable = 'Executable', 7 | ExecutingWithErrors = 'ExecutingWithErrors', 8 | Finalizing = 'Finalizing', 9 | SigningOff = 'SigningOff', 10 | Voting = 'Voting', 11 | } 12 | -------------------------------------------------------------------------------- /hub/types/ProposalUserVoteType.ts: -------------------------------------------------------------------------------- 1 | export enum ProposalUserVoteType { 2 | Abstain = 'Abstain', 3 | No = 'No', 4 | Veto = 'Veto', 5 | Yes = 'Yes', 6 | } 7 | -------------------------------------------------------------------------------- /hub/types/RealmCategory.ts: -------------------------------------------------------------------------------- 1 | export enum RealmCategory { 2 | DAOTools = 'DAOTools', 3 | Defi = 'Defi', 4 | Gaming = 'Gaming', 5 | Nft = 'Nft', 6 | Web3 = 'Web3', 7 | Other = 'Other', 8 | } 9 | -------------------------------------------------------------------------------- /hub/types/RoadmapItemStatus.ts: -------------------------------------------------------------------------------- 1 | export enum RoadmapItemStatus { 2 | Completed = 'Completed', 3 | Delayed = 'Delayed', 4 | InProgress = 'InProgress', 5 | Upcoming = 'Upcoming', 6 | } 7 | -------------------------------------------------------------------------------- /hub/types/decoders/BigNumber.ts: -------------------------------------------------------------------------------- 1 | import { BigNumber as _BigNumber } from 'bignumber.js'; 2 | import { Type, success, failure, TypeOf } from 'io-ts'; 3 | 4 | export const BigNumber = new Type<_BigNumber, string, unknown>( 5 | 'BigNumber', 6 | (u: unknown): u is _BigNumber => u instanceof _BigNumber, 7 | (input, context) => { 8 | try { 9 | if (typeof input === 'string') { 10 | const pk = new _BigNumber(input); 11 | return success(pk); 12 | } else { 13 | return failure(input, context); 14 | } 15 | } catch { 16 | return failure(input, context); 17 | } 18 | }, 19 | (a: _BigNumber) => a.toString(), 20 | ); 21 | 22 | export type PublicKey = TypeOf; 23 | -------------------------------------------------------------------------------- /hub/types/decoders/FeedItemCommentVoteType.ts: -------------------------------------------------------------------------------- 1 | import * as IT from 'io-ts'; 2 | 3 | import { FeedItemCommentVoteType as _FeedItemCommentVoteType } from '../FeedItemCommentVoteType'; 4 | 5 | export const FeedItemCommentVoteTypeApprove = IT.literal( 6 | _FeedItemCommentVoteType.Approve, 7 | ); 8 | export const FeedItemCommentVoteTypeDisapprove = IT.literal( 9 | _FeedItemCommentVoteType.Disapprove, 10 | ); 11 | 12 | export const FeedItemCommentVoteType = IT.union([ 13 | FeedItemCommentVoteTypeApprove, 14 | FeedItemCommentVoteTypeDisapprove, 15 | ]); 16 | -------------------------------------------------------------------------------- /hub/types/decoders/FeedItemType.ts: -------------------------------------------------------------------------------- 1 | import * as IT from 'io-ts'; 2 | 3 | import { FeedItemType as _FeedItemType } from '../FeedItemType'; 4 | 5 | export const FeedItemTypePost = IT.literal(_FeedItemType.Post); 6 | export const FeedItemTypeProposal = IT.literal(_FeedItemType.Proposal); 7 | 8 | export const FeedItemType = IT.union([FeedItemTypePost, FeedItemTypeProposal]); 9 | -------------------------------------------------------------------------------- /hub/types/decoders/FeedItemVoteType.ts: -------------------------------------------------------------------------------- 1 | import * as IT from 'io-ts'; 2 | 3 | import { FeedItemVoteType as _FeedItemVoteType } from '../FeedItemVoteType'; 4 | 5 | export const FeedItemVoteTypeApprove = IT.literal(_FeedItemVoteType.Approve); 6 | export const FeedItemVoteTypeDisapprove = IT.literal( 7 | _FeedItemVoteType.Disapprove, 8 | ); 9 | 10 | export const FeedItemVoteType = IT.union([ 11 | FeedItemVoteTypeApprove, 12 | FeedItemVoteTypeDisapprove, 13 | ]); 14 | -------------------------------------------------------------------------------- /hub/types/decoders/GovernanceTokenType.ts: -------------------------------------------------------------------------------- 1 | import * as IT from 'io-ts'; 2 | 3 | import { GovernanceTokenType as _GovernanceTokenType } from '../GovernanceTokenType'; 4 | 5 | export const GovernanceTokenTypeCouncil = IT.literal( 6 | _GovernanceTokenType.Council, 7 | ); 8 | export const GovernanceTokenTypeCommunity = IT.literal( 9 | _GovernanceTokenType.Community, 10 | ); 11 | 12 | export const GovernanceTokenType = IT.union([ 13 | GovernanceTokenTypeCouncil, 14 | GovernanceTokenTypeCommunity, 15 | ]); 16 | -------------------------------------------------------------------------------- /hub/types/decoders/GovernanceVoteTipping.ts: -------------------------------------------------------------------------------- 1 | import * as IT from 'io-ts'; 2 | 3 | import { GovernanceVoteTipping as _GovernanceVoteTipping } from '../GovernanceVoteTipping'; 4 | 5 | export const GovernanceVoteTippingDisabled = IT.literal( 6 | _GovernanceVoteTipping.Disabled, 7 | ); 8 | export const GovernanceVoteTippingEarly = IT.literal( 9 | _GovernanceVoteTipping.Early, 10 | ); 11 | export const GovernanceVoteTippingStrict = IT.literal( 12 | _GovernanceVoteTipping.Strict, 13 | ); 14 | 15 | export const GovernanceVoteTipping = IT.union([ 16 | GovernanceVoteTippingDisabled, 17 | GovernanceVoteTippingEarly, 18 | GovernanceVoteTippingStrict, 19 | ]); 20 | -------------------------------------------------------------------------------- /hub/types/decoders/ProposalUserVoteType.ts: -------------------------------------------------------------------------------- 1 | import * as IT from 'io-ts'; 2 | 3 | import { ProposalUserVoteType as _ProposalUserVoteType } from '../ProposalUserVoteType'; 4 | 5 | export const ProposalUserVoteTypeAbstain = IT.literal( 6 | _ProposalUserVoteType.Abstain, 7 | ); 8 | export const ProposalUserVoteTypeNo = IT.literal(_ProposalUserVoteType.No); 9 | export const ProposalUserVoteTypeVeto = IT.literal(_ProposalUserVoteType.Veto); 10 | export const ProposalUserVoteTypeYes = IT.literal(_ProposalUserVoteType.Yes); 11 | 12 | export const ProposalUserVoteType = IT.union([ 13 | ProposalUserVoteTypeAbstain, 14 | ProposalUserVoteTypeNo, 15 | ProposalUserVoteTypeVeto, 16 | ProposalUserVoteTypeYes, 17 | ]); 18 | -------------------------------------------------------------------------------- /hub/types/decoders/PublicKey.ts: -------------------------------------------------------------------------------- 1 | import { PublicKey as _PublicKey } from '@solana/web3.js'; 2 | import { Type, success, failure, TypeOf } from 'io-ts'; 3 | 4 | export const PublicKey = new Type<_PublicKey, string, unknown>( 5 | 'PublicKey', 6 | (u: unknown): u is _PublicKey => u instanceof _PublicKey, 7 | (input, context) => { 8 | try { 9 | if (typeof input === 'string') { 10 | const pk = new _PublicKey(input); 11 | return success(pk); 12 | } else { 13 | return failure(input, context); 14 | } 15 | } catch { 16 | return failure(input, context); 17 | } 18 | }, 19 | (a: _PublicKey) => a.toBase58(), 20 | ); 21 | 22 | export type PublicKey = TypeOf; 23 | -------------------------------------------------------------------------------- /hub/types/decoders/RealmCategory.ts: -------------------------------------------------------------------------------- 1 | import * as IT from 'io-ts'; 2 | 3 | import { RealmCategory as _RealmCategory } from '../RealmCategory'; 4 | 5 | export const RealmCategoryDAOTools = IT.literal(_RealmCategory.DAOTools); 6 | export const RealmCategoryDefi = IT.literal(_RealmCategory.Defi); 7 | export const RealmCategoryGaming = IT.literal(_RealmCategory.Gaming); 8 | export const RealmCategoryNft = IT.literal(_RealmCategory.Nft); 9 | export const RealmCategoryWeb3 = IT.literal(_RealmCategory.Web3); 10 | export const RealmCategoryOther = IT.literal(_RealmCategory.Other); 11 | 12 | export const RealmCategory = IT.union([ 13 | RealmCategoryDAOTools, 14 | RealmCategoryDefi, 15 | RealmCategoryGaming, 16 | RealmCategoryNft, 17 | RealmCategoryWeb3, 18 | RealmCategoryOther, 19 | ]); 20 | -------------------------------------------------------------------------------- /hub/types/decoders/RoadmapItemStatus.ts: -------------------------------------------------------------------------------- 1 | import * as IT from 'io-ts'; 2 | 3 | import { RoadmapItemStatus as _RoadmapItemStatus } from '../RoadmapItemStatus'; 4 | 5 | export const RoadmapItemStatusCompleted = IT.literal( 6 | _RoadmapItemStatus.Completed, 7 | ); 8 | export const RoadmapItemStatusDelayed = IT.literal(_RoadmapItemStatus.Delayed); 9 | export const RoadmapItemStatusInProgress = IT.literal( 10 | _RoadmapItemStatus.InProgress, 11 | ); 12 | export const RoadmapItemStatusUpcoming = IT.literal( 13 | _RoadmapItemStatus.Upcoming, 14 | ); 15 | 16 | export const RoadmapItemStatus = IT.union([ 17 | RoadmapItemStatusCompleted, 18 | RoadmapItemStatusDelayed, 19 | RoadmapItemStatusInProgress, 20 | RoadmapItemStatusUpcoming, 21 | ]); 22 | -------------------------------------------------------------------------------- /models/accounts/index.ts: -------------------------------------------------------------------------------- 1 | export * from './getAccountsByFilter' 2 | -------------------------------------------------------------------------------- /models/proposal/index.ts: -------------------------------------------------------------------------------- 1 | export * from './buildTopVoters' 2 | export * from './calculateMintMaxVoteWeight' 3 | export * from './getSignatories' 4 | export * from './getTokenOwnerRecords' 5 | export * from './getVoteRecords' 6 | -------------------------------------------------------------------------------- /models/treasury/Domain.ts: -------------------------------------------------------------------------------- 1 | export interface Domain { 2 | owner: string 3 | name?: string 4 | address: string 5 | } 6 | -------------------------------------------------------------------------------- /models/treasury/Program.ts: -------------------------------------------------------------------------------- 1 | import type { AssetAccount } from '@utils/uiTypes/assets' 2 | 3 | export interface Program { 4 | address: string 5 | lastDeployedSlot: number 6 | upgradeAuthority?: string 7 | walletIsUpgradeAuthority: boolean 8 | raw: AssetAccount 9 | } 10 | -------------------------------------------------------------------------------- /models/types.ts: -------------------------------------------------------------------------------- 1 | export type EndpointTypes = 'mainnet' | 'devnet' | 'localnet' 2 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | command = "yarn build" 3 | publish = "out" 4 | 5 | [[plugins]] 6 | package = "@netlify/plugin-nextjs" -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /pages/api/hello.api.ts: -------------------------------------------------------------------------------- 1 | // Next.js API route support: https://nextjs.org/docs/api-routes/introduction 2 | 3 | import { withSentry } from '@sentry/nextjs' 4 | import { NextApiRequest, NextApiResponse } from 'next' 5 | 6 | const handler = (req: NextApiRequest, res: NextApiResponse) => { 7 | res.status(200).json({ name: 'John Doe' }) 8 | } 9 | 10 | export default withSentry(handler) 11 | -------------------------------------------------------------------------------- /pages/api/splGovernancePrograms.api.ts: -------------------------------------------------------------------------------- 1 | import { withSentry } from '@sentry/nextjs' 2 | import { NextApiRequest, NextApiResponse } from 'next' 3 | import { getAllSplGovernanceProgramIds } from './tools/realms' 4 | 5 | // Returns unique spl-governance program ids 6 | const handler = (req: NextApiRequest, res: NextApiResponse) => { 7 | const cluster = req.query.cluster?.toString() || undefined 8 | res.status(200).json(getAllSplGovernanceProgramIds(cluster)) 9 | } 10 | 11 | export default withSentry(handler) 12 | -------------------------------------------------------------------------------- /pages/api/tools/realms.ts: -------------------------------------------------------------------------------- 1 | import { getCertifiedRealmInfos } from '@models/registry/api' 2 | import { getConnectionContext } from '@utils/connection' 3 | 4 | export function getAllSplGovernanceProgramIds(cluster = 'mainnet') { 5 | return [ 6 | ...new Set( 7 | getCertifiedRealmInfos(getConnectionContext(cluster)).map((info) => 8 | info.programId.toBase58() 9 | ) 10 | ), 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /pages/code.tsx: -------------------------------------------------------------------------------- 1 | import { useEffect } from 'react' 2 | 3 | export default function Code() { 4 | useEffect(() => { 5 | if (typeof window !== 'undefined') { 6 | window.location.replace( 7 | 'https://docs.google.com/forms/d/e/1FAIpQLSf_BP5Oi1WiXxm6VlfZWhxJmZBpHrl8fLMN3dLWKIwu-g-3Tw/viewform' 8 | ) 9 | } 10 | }, []) 11 | 12 | return null 13 | } 14 | -------------------------------------------------------------------------------- /pages/dao/[symbol]/members/index.tsx: -------------------------------------------------------------------------------- 1 | import Members from './Members' 2 | const MembersPage = () => { 3 | return ( 4 |

5 | 6 |
7 | ) 8 | } 9 | 10 | export default MembersPage 11 | -------------------------------------------------------------------------------- /pages/dao/[symbol]/params/components/StatsView.tsx: -------------------------------------------------------------------------------- 1 | import { AddressField, NumberField } from '../index' 2 | 3 | const StatsView = ({ activeGovernance }) => { 4 | return ( 5 |
6 | {activeGovernance && ( 7 | <> 8 | 13 | 18 | 19 | )} 20 |
21 | ) 22 | } 23 | 24 | export default StatsView 25 | -------------------------------------------------------------------------------- /pages/dao/[symbol]/program/new.tsx: -------------------------------------------------------------------------------- 1 | import NewProgramForm from '@components/AssetsList/NewProgramForm' 2 | import React from 'react' 3 | 4 | const New = () => { 5 | return ( 6 |
7 |
8 | 9 |
10 |
11 | ) 12 | } 13 | 14 | export default New 15 | -------------------------------------------------------------------------------- /pages/dao/[symbol]/proposal/components/ComandLineInfo.tsx: -------------------------------------------------------------------------------- 1 | import { DuplicateIcon } from '@heroicons/react/outline' 2 | 3 | export default function CommandLineInfo({ 4 | info, 5 | }: { 6 | info: string | undefined 7 | }) { 8 | return ( 9 |
10 | {info} 11 | { 14 | navigator.clipboard.writeText(info ?? '') 15 | }} 16 | /> 17 |
18 | ) 19 | } 20 | -------------------------------------------------------------------------------- /pages/dao/[symbol]/proposal/components/VoteBySwitch.tsx: -------------------------------------------------------------------------------- 1 | import Switch from '@components/Switch' 2 | import useRealm from '@hooks/useRealm' 3 | import React from 'react' 4 | 5 | const VoteBySwitch = ({ checked, onChange }) => { 6 | const { toManyCouncilOutstandingProposalsForUse } = useRealm() 7 | return !toManyCouncilOutstandingProposalsForUse ? ( 8 |
9 |
Vote by council
10 |
11 | 12 |
13 |
14 | ) : null 15 | } 16 | 17 | export default VoteBySwitch 18 | -------------------------------------------------------------------------------- /pages/dao/[symbol]/proposal/components/instructions/Squads/common.ts: -------------------------------------------------------------------------------- 1 | import { PublicKey } from '@solana/web3.js' 2 | import { AssetAccount } from '@utils/uiTypes/assets' 3 | 4 | export const MESH_PROGRAM_ID = new PublicKey( 5 | 'SMPLVC8MxZ5Bf5EfF7PaMiTCxoBAcmkbM2vkrvMK8ho' 6 | ) 7 | 8 | export interface MeshEditMemberForm { 9 | governedAccount: AssetAccount | null 10 | vault: string 11 | member: string 12 | } 13 | -------------------------------------------------------------------------------- /pages/dao/[symbol]/proposal/components/instructions/inputInstructionType.ts: -------------------------------------------------------------------------------- 1 | export enum InstructionInputType { 2 | GOVERNED_ACCOUNT, 3 | INPUT, 4 | TEXTAREA, 5 | SWITCH, 6 | SELECT, 7 | DISABLEABLE_INPUT, 8 | } 9 | -------------------------------------------------------------------------------- /pages/dao/[symbol]/treasury/new.tsx: -------------------------------------------------------------------------------- 1 | import { NewWallet } from '@hub/components/NewWallet/NewWallet' 2 | import React from 'react' 3 | 4 | const New = () => { 5 | return ( 6 |
7 |
8 | 9 |
10 |
11 | ) 12 | } 13 | 14 | export default New 15 | -------------------------------------------------------------------------------- /pages/discover/edit/index.tsx: -------------------------------------------------------------------------------- 1 | import Head from 'next/head' 2 | import { EditDiscoverPage } from '@hub/components/EditDiscoverPage' 3 | 4 | export default function Stats() { 5 | return ( 6 | <> 7 | 8 | Edit Discover 9 | 10 | 11 | 12 | 13 | ) 14 | } 15 | -------------------------------------------------------------------------------- /pages/discover/index.tsx: -------------------------------------------------------------------------------- 1 | import Head from 'next/head' 2 | 3 | import { DiscoverPage } from '@hub/components/DiscoverPage' 4 | 5 | export default function Discover() { 6 | return ( 7 |
8 | 9 | Discover 10 | 11 | 12 | 13 |
14 | ) 15 | } 16 | -------------------------------------------------------------------------------- /pages/ecosystem/[feedItemId]/[commentId]/index.tsx: -------------------------------------------------------------------------------- 1 | import Head from 'next/head' 2 | import { useRouter } from 'next/router' 3 | 4 | import { FeedItemComment } from '@hub/components/FeedItemComment' 5 | 6 | export default function EcosystemFeedItemComment() { 7 | const router = useRouter() 8 | const { feedItemId, commentId } = router.query 9 | 10 | return ( 11 |
12 | 13 | Realm 14 | 15 | 16 | 21 |
22 | ) 23 | } 24 | -------------------------------------------------------------------------------- /pages/ecosystem/[feedItemId]/index.tsx: -------------------------------------------------------------------------------- 1 | import Head from 'next/head' 2 | import { useRouter } from 'next/router' 3 | 4 | import { FeedItem } from '@hub/components/FeedItem' 5 | 6 | export default function EcosystemFeedItem() { 7 | const router = useRouter() 8 | const { feedItemId } = router.query 9 | 10 | return ( 11 |
12 | 13 | Realm 14 | 15 | 16 | 17 |
18 | ) 19 | } 20 | -------------------------------------------------------------------------------- /pages/ecosystem/index.tsx: -------------------------------------------------------------------------------- 1 | import Head from 'next/head' 2 | 3 | import { EcosystemFeed } from '@hub/components/EcosystemFeed' 4 | 5 | export default function Ecosystem() { 6 | return ( 7 |
8 | 9 | Ecosystem 10 | 11 | 12 | 13 |
14 | ) 15 | } 16 | -------------------------------------------------------------------------------- /pages/feed/index.tsx: -------------------------------------------------------------------------------- 1 | import Head from 'next/head' 2 | 3 | import { MyFeed } from '@hub/components/MyFeed' 4 | 5 | export default function Feed() { 6 | return ( 7 |
8 | 9 | Ecosystem 10 | 11 | 12 | 13 |
14 | ) 15 | } 16 | -------------------------------------------------------------------------------- /pages/index.tsx: -------------------------------------------------------------------------------- 1 | import { useEffect } from 'react' 2 | import { useRouter } from 'next/router' 3 | 4 | const Index = () => { 5 | const router = useRouter() 6 | const REALM = process?.env?.REALM 7 | 8 | useEffect(() => { 9 | const mainUrl = REALM ? `/dao/${REALM}` : '/realms' 10 | if (!router.asPath.includes(mainUrl)) { 11 | router.replace(mainUrl) 12 | } 13 | }, [REALM]) 14 | 15 | return null 16 | } 17 | 18 | export default Index 19 | -------------------------------------------------------------------------------- /pages/matchday/verify-wallet.tsx: -------------------------------------------------------------------------------- 1 | import { Application } from '@verify-wallet/constants' 2 | import VerifyPage from '@verify-wallet/components' 3 | 4 | const MatchdayVerifyPage = () => { 5 | const parsedLocationHash = new URLSearchParams( 6 | window.location.search.substring(1) 7 | ) 8 | 9 | return ( 10 | 14 | ) 15 | } 16 | 17 | export default MatchdayVerifyPage 18 | -------------------------------------------------------------------------------- /pages/realm/[id]/hub/edit/index.tsx: -------------------------------------------------------------------------------- 1 | import Head from 'next/head' 2 | import { useRouter } from 'next/router' 3 | 4 | import { EditMetadata } from '@hub/components/EditMetadata' 5 | 6 | export default function Edit() { 7 | const router = useRouter() 8 | const { id } = router.query 9 | const queryStr = typeof window !== 'undefined' ? location.search : '' 10 | const newRealmMode = queryStr.includes('initial=true') 11 | 12 | return ( 13 |
14 | 15 | Edit 16 | 17 | 18 | 23 |
24 | ) 25 | } 26 | -------------------------------------------------------------------------------- /pages/stats/index.tsx: -------------------------------------------------------------------------------- 1 | import Head from 'next/head' 2 | import { GlobalStats } from '@hub/components/GlobalStats' 3 | 4 | export default function Stats() { 5 | return ( 6 | <> 7 | 8 | Realm 9 | 10 | 11 | 12 | 13 | ) 14 | } 15 | -------------------------------------------------------------------------------- /pages/tools/all-realms.tsx: -------------------------------------------------------------------------------- 1 | import { DEFAULT_GOVERNANCE_PROGRAM_ID } from '@components/instructions/tools' 2 | import { useRealmsByProgramQuery } from '@hooks/queries/realm' 3 | import { PublicKey } from '@solana/web3.js' 4 | 5 | const AllRealmsPage = () => { 6 | const realms = useRealmsByProgramQuery( 7 | new PublicKey(DEFAULT_GOVERNANCE_PROGRAM_ID) 8 | ) 9 | 10 | return realms.isLoading ? ( 11 | <>loading... 12 | ) : ( 13 | <> 14 | {realms.data?.map((x) => ( 15 |
16 | {x.pubkey.toString()} {x.account.name} 17 |
18 | ))} 19 | 20 | ) 21 | } 22 | 23 | export default AllRealmsPage 24 | -------------------------------------------------------------------------------- /pages/verify-wallet/index.tsx: -------------------------------------------------------------------------------- 1 | import VerifyWallet from '@verify-wallet/components' 2 | import { Application } from '@verify-wallet/constants' 3 | 4 | export default () => { 5 | const parsedLocationHash = new URLSearchParams( 6 | window.location.search.substring(1) 7 | ) 8 | 9 | return ( 10 | 14 | ) 15 | } 16 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | 'postcss-preset-env': { stage: 1 }, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /public/actions.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": [ 3 | { 4 | "pathPattern": "/dao/**", 5 | "apiPath": "https://realms.dial.to/vote/dao/**" 6 | } 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /public/banners/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/banners/1.jpg -------------------------------------------------------------------------------- /public/banners/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/banners/10.jpg -------------------------------------------------------------------------------- /public/banners/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/banners/11.jpg -------------------------------------------------------------------------------- /public/banners/12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/banners/12.jpg -------------------------------------------------------------------------------- /public/banners/13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/banners/13.jpg -------------------------------------------------------------------------------- /public/banners/14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/banners/14.jpg -------------------------------------------------------------------------------- /public/banners/15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/banners/15.jpg -------------------------------------------------------------------------------- /public/banners/16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/banners/16.jpg -------------------------------------------------------------------------------- /public/banners/17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/banners/17.jpg -------------------------------------------------------------------------------- /public/banners/18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/banners/18.jpg -------------------------------------------------------------------------------- /public/banners/19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/banners/19.jpg -------------------------------------------------------------------------------- /public/banners/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/banners/2.jpg -------------------------------------------------------------------------------- /public/banners/20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/banners/20.jpg -------------------------------------------------------------------------------- /public/banners/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/banners/3.jpg -------------------------------------------------------------------------------- /public/banners/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/banners/4.jpg -------------------------------------------------------------------------------- /public/banners/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/banners/5.jpg -------------------------------------------------------------------------------- /public/banners/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/banners/6.jpg -------------------------------------------------------------------------------- /public/banners/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/banners/7.jpg -------------------------------------------------------------------------------- /public/banners/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/banners/8.jpg -------------------------------------------------------------------------------- /public/banners/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/banners/9.jpg -------------------------------------------------------------------------------- /public/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | #ffffff -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicon.ico -------------------------------------------------------------------------------- /public/favicons/android-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/android-icon-144x144.png -------------------------------------------------------------------------------- /public/favicons/android-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/android-icon-192x192.png -------------------------------------------------------------------------------- /public/favicons/android-icon-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/android-icon-36x36.png -------------------------------------------------------------------------------- /public/favicons/android-icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/android-icon-48x48.png -------------------------------------------------------------------------------- /public/favicons/android-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/android-icon-72x72.png -------------------------------------------------------------------------------- /public/favicons/android-icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/android-icon-96x96.png -------------------------------------------------------------------------------- /public/favicons/apple-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/apple-icon-114x114.png -------------------------------------------------------------------------------- /public/favicons/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/apple-icon-120x120.png -------------------------------------------------------------------------------- /public/favicons/apple-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/apple-icon-144x144.png -------------------------------------------------------------------------------- /public/favicons/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/apple-icon-152x152.png -------------------------------------------------------------------------------- /public/favicons/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/apple-icon-180x180.png -------------------------------------------------------------------------------- /public/favicons/apple-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/apple-icon-57x57.png -------------------------------------------------------------------------------- /public/favicons/apple-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/apple-icon-60x60.png -------------------------------------------------------------------------------- /public/favicons/apple-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/apple-icon-72x72.png -------------------------------------------------------------------------------- /public/favicons/apple-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/apple-icon-76x76.png -------------------------------------------------------------------------------- /public/favicons/apple-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/apple-icon-precomposed.png -------------------------------------------------------------------------------- /public/favicons/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/apple-icon.png -------------------------------------------------------------------------------- /public/favicons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/favicon-32x32.png -------------------------------------------------------------------------------- /public/favicons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/favicon-96x96.png -------------------------------------------------------------------------------- /public/favicons/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/ms-icon-144x144.png -------------------------------------------------------------------------------- /public/favicons/ms-icon-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/ms-icon-150x150.png -------------------------------------------------------------------------------- /public/favicons/ms-icon-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/ms-icon-310x310.png -------------------------------------------------------------------------------- /public/favicons/ms-icon-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/favicons/ms-icon-70x70.png -------------------------------------------------------------------------------- /public/fonts/Ambit-Black.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-Black.woff -------------------------------------------------------------------------------- /public/fonts/Ambit-Black.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-Black.woff2 -------------------------------------------------------------------------------- /public/fonts/Ambit-BlackItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-BlackItalic.woff -------------------------------------------------------------------------------- /public/fonts/Ambit-BlackItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-BlackItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Ambit-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-Bold.woff -------------------------------------------------------------------------------- /public/fonts/Ambit-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-Bold.woff2 -------------------------------------------------------------------------------- /public/fonts/Ambit-BoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-BoldItalic.woff -------------------------------------------------------------------------------- /public/fonts/Ambit-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-BoldItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Ambit-ExtraLight.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-ExtraLight.woff -------------------------------------------------------------------------------- /public/fonts/Ambit-ExtraLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-ExtraLight.woff2 -------------------------------------------------------------------------------- /public/fonts/Ambit-ExtraLightItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-ExtraLightItalic.woff -------------------------------------------------------------------------------- /public/fonts/Ambit-ExtraLightItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-ExtraLightItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Ambit-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-Italic.woff -------------------------------------------------------------------------------- /public/fonts/Ambit-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-Italic.woff2 -------------------------------------------------------------------------------- /public/fonts/Ambit-Light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-Light.woff -------------------------------------------------------------------------------- /public/fonts/Ambit-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-Light.woff2 -------------------------------------------------------------------------------- /public/fonts/Ambit-LightItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-LightItalic.woff -------------------------------------------------------------------------------- /public/fonts/Ambit-LightItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-LightItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Ambit-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-Regular.woff -------------------------------------------------------------------------------- /public/fonts/Ambit-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-Regular.woff2 -------------------------------------------------------------------------------- /public/fonts/Ambit-SemiBold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-SemiBold.woff -------------------------------------------------------------------------------- /public/fonts/Ambit-SemiBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-SemiBold.woff2 -------------------------------------------------------------------------------- /public/fonts/Ambit-SemiBoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-SemiBoldItalic.woff -------------------------------------------------------------------------------- /public/fonts/Ambit-SemiBoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-SemiBoldItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Ambit-Thin.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-Thin.woff -------------------------------------------------------------------------------- /public/fonts/Ambit-Thin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-Thin.woff2 -------------------------------------------------------------------------------- /public/fonts/Ambit-ThinItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-ThinItalic.woff -------------------------------------------------------------------------------- /public/fonts/Ambit-ThinItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/fonts/Ambit-ThinItalic.woff2 -------------------------------------------------------------------------------- /public/img/bg-desktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/img/bg-desktop.png -------------------------------------------------------------------------------- /public/img/bg-mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/img/bg-mobile.png -------------------------------------------------------------------------------- /public/img/bg-quorum-all-sizes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/img/bg-quorum-all-sizes.png -------------------------------------------------------------------------------- /public/img/civic.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/img/collectablesIcon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/img/creation-bg-desktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/img/creation-bg-desktop.png -------------------------------------------------------------------------------- /public/img/dual-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/img/dual-logo.png -------------------------------------------------------------------------------- /public/img/foresight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/img/foresight.png -------------------------------------------------------------------------------- /public/img/identity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/img/identity.png -------------------------------------------------------------------------------- /public/img/logo-realms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/img/logo-realms.png -------------------------------------------------------------------------------- /public/img/mango.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/img/mango.png -------------------------------------------------------------------------------- /public/img/meanfinance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/img/meanfinance.png -------------------------------------------------------------------------------- /public/img/nft-logo.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/img/nft-logo.jpeg -------------------------------------------------------------------------------- /public/img/psyfinance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/img/psyfinance.png -------------------------------------------------------------------------------- /public/img/serum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/img/serum.png -------------------------------------------------------------------------------- /public/img/solana-logo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/img/solend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/img/solend.png -------------------------------------------------------------------------------- /public/img/squads.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/img/squads.png -------------------------------------------------------------------------------- /public/img/streamflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/img/streamflow.png -------------------------------------------------------------------------------- /public/img/switchboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/img/switchboard.png -------------------------------------------------------------------------------- /public/img/symmetry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/img/symmetry.png -------------------------------------------------------------------------------- /public/realms/21DAO/img/21dao_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/21DAO/img/21dao_icon.png -------------------------------------------------------------------------------- /public/realms/227 dao - image profile/Risorsa 11@4x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/227 dao - image profile/Risorsa 11@4x.png -------------------------------------------------------------------------------- /public/realms/ALL/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/ALL/favicon.ico -------------------------------------------------------------------------------- /public/realms/ALL/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/ALL/img/logo.png -------------------------------------------------------------------------------- /public/realms/ALLOVR/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/ALLOVR/favicon.ico -------------------------------------------------------------------------------- /public/realms/Advocat/AdvocatBusiness.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Advocat/AdvocatBusiness.png -------------------------------------------------------------------------------- /public/realms/Advocat/AdvocatDev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Advocat/AdvocatDev.png -------------------------------------------------------------------------------- /public/realms/Advocat/banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Advocat/banner.jpg -------------------------------------------------------------------------------- /public/realms/Advocat/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Advocat/logo.png -------------------------------------------------------------------------------- /public/realms/AgrichainxTribeDao/AgrichainxTribeDao.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/AgrichainxTribeDao/AgrichainxTribeDao.jpeg -------------------------------------------------------------------------------- /public/realms/Allie-Coin-DAO/Allie-Coin-Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Allie-Coin-DAO/Allie-Coin-Logo.png -------------------------------------------------------------------------------- /public/realms/Allie-Coin-DAO/Allie-Coin-Particle-Logo-Compressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Allie-Coin-DAO/Allie-Coin-Particle-Logo-Compressed.png -------------------------------------------------------------------------------- /public/realms/AntlerDAO/Logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/AntlerDAO/Logo.jpg -------------------------------------------------------------------------------- /public/realms/Astra/AstraPodcastLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Astra/AstraPodcastLogo.png -------------------------------------------------------------------------------- /public/realms/AthensDAO/ATHDAO_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/AthensDAO/ATHDAO_Logo.png -------------------------------------------------------------------------------- /public/realms/AthensDAO/AthensDAO_Logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/AthensDAO/AthensDAO_Logo.jpg -------------------------------------------------------------------------------- /public/realms/BFNC/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/BFNC/img/logo.png -------------------------------------------------------------------------------- /public/realms/BOHlogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/BOHlogo.png -------------------------------------------------------------------------------- /public/realms/Bears/img/bearlogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Bears/img/bearlogo.png -------------------------------------------------------------------------------- /public/realms/Blockgame/Blockgame.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Blockgame/Blockgame.png -------------------------------------------------------------------------------- /public/realms/Blockride/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Blockride/banner.png -------------------------------------------------------------------------------- /public/realms/Blockride/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Blockride/logo.png -------------------------------------------------------------------------------- /public/realms/BlueChickNFTsDAO/BlueChickNFTsDAO-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/BlueChickNFTsDAO/BlueChickNFTsDAO-banner.png -------------------------------------------------------------------------------- /public/realms/BlueChickNFTsDAO/BlueChickNFTsDAO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/BlueChickNFTsDAO/BlueChickNFTsDAO.png -------------------------------------------------------------------------------- /public/realms/BoH: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public/realms/BootstrapDAO/BootRealms.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/BootstrapDAO/BootRealms.png -------------------------------------------------------------------------------- /public/realms/COCK/img/chicken_tribe_logo.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/COCK/img/chicken_tribe_logo.jpeg -------------------------------------------------------------------------------- /public/realms/Chiao/img/chiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Chiao/img/chiao.png -------------------------------------------------------------------------------- /public/realms/ClackDAO/Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/ClackDAO/Logo.png -------------------------------------------------------------------------------- /public/realms/CoalitionDAO/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/CoalitionDAO/banner.png -------------------------------------------------------------------------------- /public/realms/CoalitionDAO/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/CoalitionDAO/logo.png -------------------------------------------------------------------------------- /public/realms/ComradeDAO/img/comradedaologo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/ComradeDAO/img/comradedaologo.png -------------------------------------------------------------------------------- /public/realms/ConkDao/conk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/ConkDao/conk.png -------------------------------------------------------------------------------- /public/realms/ConkDao/conk_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/ConkDao/conk_banner.png -------------------------------------------------------------------------------- /public/realms/CreatedBy/CreatedBy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/CreatedBy/CreatedBy.png -------------------------------------------------------------------------------- /public/realms/CryptoHelp/cryptohelp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/CryptoHelp/cryptohelp.png -------------------------------------------------------------------------------- /public/realms/Cygnus/cygnus-banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Cygnus/cygnus-banner.jpg -------------------------------------------------------------------------------- /public/realms/Cygnus/cygnus-logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Cygnus/cygnus-logo.jpg -------------------------------------------------------------------------------- /public/realms/DAINV/img/DAI_LOGO_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/DAINV/img/DAI_LOGO_2.png -------------------------------------------------------------------------------- /public/realms/DAKU/img/daku_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/DAKU/img/daku_logo.png -------------------------------------------------------------------------------- /public/realms/DeanListGrape/deans-list-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/DeanListGrape/deans-list-logo.png -------------------------------------------------------------------------------- /public/realms/Deans-List-Grape/deans-list-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Deans-List-Grape/deans-list-logo.png -------------------------------------------------------------------------------- /public/realms/Deans-List-Solarplex-State/img/banner-deanslist-solarplex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Deans-List-Solarplex-State/img/banner-deanslist-solarplex.png -------------------------------------------------------------------------------- /public/realms/Deans-List-Solarplex-State/img/deans_list_solarplex_state.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Deans-List-Solarplex-State/img/deans_list_solarplex_state.png -------------------------------------------------------------------------------- /public/realms/Deans_List_Network_State/avatar-deanslist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Deans_List_Network_State/avatar-deanslist.png -------------------------------------------------------------------------------- /public/realms/Deans_List_Network_State/banner-deanslist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Deans_List_Network_State/banner-deanslist.png -------------------------------------------------------------------------------- /public/realms/Dialect/img/avatar-dialect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Dialect/img/avatar-dialect.png -------------------------------------------------------------------------------- /public/realms/Dialect/img/banner-dialect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Dialect/img/banner-dialect.png -------------------------------------------------------------------------------- /public/realms/EpicentralLabsDAO/Epicentral-Labs-Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/EpicentralLabsDAO/Epicentral-Labs-Logo.png -------------------------------------------------------------------------------- /public/realms/EpicentralLabsDAO/EpicentralDAOBanner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/EpicentralLabsDAO/EpicentralDAOBanner.png -------------------------------------------------------------------------------- /public/realms/Epics/Epics-logo-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Epics/Epics-logo-background.png -------------------------------------------------------------------------------- /public/realms/Epics/Epics-logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Epics/Epics-logo.jpg -------------------------------------------------------------------------------- /public/realms/EverSol/img/EverSol_Banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/EverSol/img/EverSol_Banner.jpg -------------------------------------------------------------------------------- /public/realms/EverSol/img/EverSol_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/EverSol/img/EverSol_Logo.png -------------------------------------------------------------------------------- /public/realms/Everlend/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Everlend/img/logo.png -------------------------------------------------------------------------------- /public/realms/FABS/img/fabio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/FABS/img/fabio.png -------------------------------------------------------------------------------- /public/realms/FABS/img/fabs-banner.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/FABS/img/fabs-banner.jpeg -------------------------------------------------------------------------------- /public/realms/FAFD/img/fafd_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/FAFD/img/fafd_logo.png -------------------------------------------------------------------------------- /public/realms/FOXTAG/FOXTAG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/FOXTAG/FOXTAG.png -------------------------------------------------------------------------------- /public/realms/FSLOGO/FLIPSIDE-LOGO-WHITE.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/FSLOGO/FLIPSIDE-LOGO-WHITE.png -------------------------------------------------------------------------------- /public/realms/FinanceIsMagic/Banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/FinanceIsMagic/Banner.png -------------------------------------------------------------------------------- /public/realms/FinanceIsMagic/Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/FinanceIsMagic/Logo.png -------------------------------------------------------------------------------- /public/realms/FyfyDAO/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/FyfyDAO/img/logo.png -------------------------------------------------------------------------------- /public/realms/GARI Network DAO/Gari discord (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/GARI Network DAO/Gari discord (1).png -------------------------------------------------------------------------------- /public/realms/GARI Network DAO/gari.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/GARI Network DAO/gari.png -------------------------------------------------------------------------------- /public/realms/GCDC/img/gaycoinz-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/GCDC/img/gaycoinz-banner.png -------------------------------------------------------------------------------- /public/realms/GCDC/img/gaycoinz-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/GCDC/img/gaycoinz-logo.png -------------------------------------------------------------------------------- /public/realms/GoblinGold/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/GoblinGold/img/logo.png -------------------------------------------------------------------------------- /public/realms/Governance/logo-spl-gov-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Governance/logo-spl-gov-1024.png -------------------------------------------------------------------------------- /public/realms/Grape/img/grape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Grape/img/grape.png -------------------------------------------------------------------------------- /public/realms/GrapeCCSubDAO/GrapeCCSubDAO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/GrapeCCSubDAO/GrapeCCSubDAO.png -------------------------------------------------------------------------------- /public/realms/Guacamole/Guacamole_Banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Guacamole/Guacamole_Banner.png -------------------------------------------------------------------------------- /public/realms/Guacamole/Guacamole_Token_Logo_Green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Guacamole/Guacamole_Token_Logo_Green.png -------------------------------------------------------------------------------- /public/realms/HOADAO/img/hoa.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/HOADAO/img/hoa.jpg -------------------------------------------------------------------------------- /public/realms/HackerzDAO/img/HackerzDAO_PFP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/HackerzDAO/img/HackerzDAO_PFP.png -------------------------------------------------------------------------------- /public/realms/HadeswapGovernance/hadeswap_logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/HadeswapGovernance/hadeswap_logo.jpg -------------------------------------------------------------------------------- /public/realms/Helium/img/iotlogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Helium/img/iotlogo.png -------------------------------------------------------------------------------- /public/realms/Helium/img/mobilelogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Helium/img/mobilelogo.png -------------------------------------------------------------------------------- /public/realms/IADAO/img/IA-DAO_LOGO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/IADAO/img/IA-DAO_LOGO.png -------------------------------------------------------------------------------- /public/realms/IKB/ikb_dao_banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/IKB/ikb_dao_banner.jpg -------------------------------------------------------------------------------- /public/realms/IKB/ikb_dao_logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/IKB/ikb_dao_logo.jpg -------------------------------------------------------------------------------- /public/realms/Ikohaus/img/Ikohaus_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Ikohaus/img/Ikohaus_Logo.png -------------------------------------------------------------------------------- /public/realms/JetSkiDAO/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/JetSkiDAO/banner.png -------------------------------------------------------------------------------- /public/realms/JetSkiDAO/logo.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/JetSkiDAO/logo.jpeg -------------------------------------------------------------------------------- /public/realms/Jito/jito.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Jito/jito.png -------------------------------------------------------------------------------- /public/realms/Kiwi/img/kiwi_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Kiwi/img/kiwi_logo.png -------------------------------------------------------------------------------- /public/realms/KiwiDAO/img/kiwi_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/KiwiDAO/img/kiwi_logo.png -------------------------------------------------------------------------------- /public/realms/LavaDAO/img/lavalogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/LavaDAO/img/lavalogo.png -------------------------------------------------------------------------------- /public/realms/LeDao/img/leDao-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/LeDao/img/leDao-logo.png -------------------------------------------------------------------------------- /public/realms/MDLH/img/MDLH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/MDLH/img/MDLH.png -------------------------------------------------------------------------------- /public/realms/MDLH/img/banner.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/MDLH/img/banner.jpeg -------------------------------------------------------------------------------- /public/realms/MEAN/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/MEAN/favicon.ico -------------------------------------------------------------------------------- /public/realms/MMCC/img/MMCC_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/MMCC/img/MMCC_Logo.png -------------------------------------------------------------------------------- /public/realms/MNDE/img/mnde_header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/MNDE/img/mnde_header.png -------------------------------------------------------------------------------- /public/realms/MNDE/img/mnde_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/MNDE/img/mnde_logo.png -------------------------------------------------------------------------------- /public/realms/MNGO/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/MNGO/favicon.ico -------------------------------------------------------------------------------- /public/realms/MOUTAI/MF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/MOUTAI/MF.png -------------------------------------------------------------------------------- /public/realms/MOUTAI/mdao.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/MOUTAI/mdao.jpg -------------------------------------------------------------------------------- /public/realms/MOUTAI/t: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public/realms/MasoorDAO/MasoorDAO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/MasoorDAO/MasoorDAO.png -------------------------------------------------------------------------------- /public/realms/MemeCoinDAOai/MemeCoinDAOBanner1_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/MemeCoinDAOai/MemeCoinDAOBanner1_15.png -------------------------------------------------------------------------------- /public/realms/MemeCoinDAOai/MemeCoinDAOFinalLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/MemeCoinDAOai/MemeCoinDAOFinalLogo.png -------------------------------------------------------------------------------- /public/realms/MewfasaDAO/banner-dao.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/MewfasaDAO/banner-dao.jpg -------------------------------------------------------------------------------- /public/realms/MewfasaDAO/mewfasadao.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/MewfasaDAO/mewfasadao.jpg -------------------------------------------------------------------------------- /public/realms/MonkOG/img/ogemoji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/MonkOG/img/ogemoji.png -------------------------------------------------------------------------------- /public/realms/MonkeDAO/img/MonkeDAO_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/MonkeDAO/img/MonkeDAO_logo.png -------------------------------------------------------------------------------- /public/realms/MontanaLand/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/MontanaLand/img/logo.png -------------------------------------------------------------------------------- /public/realms/N&F/img/Nick-banner.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/N&F/img/Nick-banner.jpeg -------------------------------------------------------------------------------- /public/realms/N&F/img/Nick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/N&F/img/Nick.png -------------------------------------------------------------------------------- /public/realms/NFT4CauseDAO/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/NFT4CauseDAO/img/logo.png -------------------------------------------------------------------------------- /public/realms/NFTClubBerlin/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/NFTClubBerlin/img/logo.png -------------------------------------------------------------------------------- /public/realms/NFTOFFROADFANCLUB/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/NFTOFFROADFANCLUB/img/logo.png -------------------------------------------------------------------------------- /public/realms/NeoFairies/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/NeoFairies/img/logo.png -------------------------------------------------------------------------------- /public/realms/NoGoal/img/ino-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/NoGoal/img/ino-128.png -------------------------------------------------------------------------------- /public/realms/ODCO/OCDC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/ODCO/OCDC.png -------------------------------------------------------------------------------- /public/realms/ODCO/OCDLO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/ODCO/OCDLO.png -------------------------------------------------------------------------------- /public/realms/OPANZ/OPANZ_Banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/OPANZ/OPANZ_Banner.png -------------------------------------------------------------------------------- /public/realms/OPANZ/OPANZ_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/OPANZ/OPANZ_Logo.png -------------------------------------------------------------------------------- /public/realms/PANDA/img/PandaDAOlogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/PANDA/img/PandaDAOlogo.png -------------------------------------------------------------------------------- /public/realms/PAWN/img/pawn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/PAWN/img/pawn.png -------------------------------------------------------------------------------- /public/realms/PAWN/img/pawns-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/PAWN/img/pawns-banner.png -------------------------------------------------------------------------------- /public/realms/PAWNGO/img/pawngo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/PAWNGO/img/pawngo.png -------------------------------------------------------------------------------- /public/realms/PAWNGO/img/pawngodao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/PAWNGO/img/pawngodao.png -------------------------------------------------------------------------------- /public/realms/PHNXDAO/phnxLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/PHNXDAO/phnxLogo.png -------------------------------------------------------------------------------- /public/realms/PHY/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/PHY/favicon.ico -------------------------------------------------------------------------------- /public/realms/PHY/img/physis-holo-blk-sml.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/PHY/img/physis-holo-blk-sml.png -------------------------------------------------------------------------------- /public/realms/PYTH/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/PYTH/favicon.ico -------------------------------------------------------------------------------- /public/realms/PhoenixDAO/phoenixdao_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/PhoenixDAO/phoenixdao_logo.png -------------------------------------------------------------------------------- /public/realms/PibbleDAO/Banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/PibbleDAO/Banner.png -------------------------------------------------------------------------------- /public/realms/PibbleDAO/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/PibbleDAO/logo.png -------------------------------------------------------------------------------- /public/realms/PixelBands/img/pixel_bands_log.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/PixelBands/img/pixel_bands_log.png -------------------------------------------------------------------------------- /public/realms/PolarDao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/PolarDao.png -------------------------------------------------------------------------------- /public/realms/Poll DAO/Vote Vote Vote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Poll DAO/Vote Vote Vote.png -------------------------------------------------------------------------------- /public/realms/Poll DAO/poll.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Poll DAO/poll.jpg -------------------------------------------------------------------------------- /public/realms/PoodlePawsDAO/PoodlePawsDAO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/PoodlePawsDAO/PoodlePawsDAO.png -------------------------------------------------------------------------------- /public/realms/PoorDao/img/archer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/PoorDao/img/archer.png -------------------------------------------------------------------------------- /public/realms/RAIN/img/rain_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/RAIN/img/rain_logo.png -------------------------------------------------------------------------------- /public/realms/RCH/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/RCH/banner.png -------------------------------------------------------------------------------- /public/realms/RCH/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/RCH/icon.png -------------------------------------------------------------------------------- /public/realms/RED/RED.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/RED/RED.png -------------------------------------------------------------------------------- /public/realms/RIBS/img/lion_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/RIBS/img/lion_logo.png -------------------------------------------------------------------------------- /public/realms/RRADAO/rradao_logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/RRADAO/rradao_logo.jpg -------------------------------------------------------------------------------- /public/realms/RadRugsDAO/img/RadRugsDAO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/RadRugsDAO/img/RadRugsDAO.png -------------------------------------------------------------------------------- /public/realms/RatioFinance/img/ratiologo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/RatioFinance/img/ratiologo.png -------------------------------------------------------------------------------- /public/realms/Renpo/img/renpo_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Renpo/img/renpo_logo.png -------------------------------------------------------------------------------- /public/realms/ResonanceDAO/hldr: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public/realms/ResonanceDAO/resonancedaologo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/ResonanceDAO/resonancedaologo.png -------------------------------------------------------------------------------- /public/realms/Risorsa 11@4x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Risorsa 11@4x.png -------------------------------------------------------------------------------- /public/realms/SBYCDAO/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/SBYCDAO/img/logo.png -------------------------------------------------------------------------------- /public/realms/SF/img/succeedfinance.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/SF/img/succeedfinance.png -------------------------------------------------------------------------------- /public/realms/SOLDCDAO/img/NEWSOLDCDAO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/SOLDCDAO/img/NEWSOLDCDAO.png -------------------------------------------------------------------------------- /public/realms/SOLI/soli_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/SOLI/soli_logo.png -------------------------------------------------------------------------------- /public/realms/SamoDAO/SamoDAO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/SamoDAO/SamoDAO.png -------------------------------------------------------------------------------- /public/realms/SatorDAO/SatorLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/SatorDAO/SatorLogo.png -------------------------------------------------------------------------------- /public/realms/Solsaur/solsaur-realms-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Solsaur/solsaur-realms-banner.png -------------------------------------------------------------------------------- /public/realms/Solsaur/solsaur.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Solsaur/solsaur.png -------------------------------------------------------------------------------- /public/realms/SolshureDAO/img/solshure_dao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/SolshureDAO/img/solshure_dao.png -------------------------------------------------------------------------------- /public/realms/Squads/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Squads/banner.png -------------------------------------------------------------------------------- /public/realms/StreamDAO/img/stream_dao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/StreamDAO/img/stream_dao.png -------------------------------------------------------------------------------- /public/realms/THIRD/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/THIRD/favicon.ico -------------------------------------------------------------------------------- /public/realms/THIRD/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/THIRD/img/logo.png -------------------------------------------------------------------------------- /public/realms/TelebunniesDAO/telebunniesDAO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/TelebunniesDAO/telebunniesDAO.png -------------------------------------------------------------------------------- /public/realms/TensorDAO/TensorDAO_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/TensorDAO/TensorDAO_banner.png -------------------------------------------------------------------------------- /public/realms/TensorDAO/TensorDAO_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/TensorDAO/TensorDAO_logo.png -------------------------------------------------------------------------------- /public/realms/The $GREED Experiment/The $GREED Experiment logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/The $GREED Experiment/The $GREED Experiment logo.png -------------------------------------------------------------------------------- /public/realms/The $GREED Experiment/The_$GREED_Experiment_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/The $GREED Experiment/The_$GREED_Experiment_logo.png -------------------------------------------------------------------------------- /public/realms/TheOxSquad/img/TheOxSquad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/TheOxSquad/img/TheOxSquad.png -------------------------------------------------------------------------------- /public/realms/TheOxSquad/img/TheOxSquad_banner.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/TheOxSquad/img/TheOxSquad_banner.jpeg -------------------------------------------------------------------------------- /public/realms/TheSporagers/img/the_sporagers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/TheSporagers/img/the_sporagers.png -------------------------------------------------------------------------------- /public/realms/TheSporagers/img/the_sporagers_banner.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/TheSporagers/img/the_sporagers_banner.jpeg -------------------------------------------------------------------------------- /public/realms/TokenSolutionsDAO/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/TokenSolutionsDAO/favicon.ico -------------------------------------------------------------------------------- /public/realms/TokenSolutionsDAO/img/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/TokenSolutionsDAO/img/image1.png -------------------------------------------------------------------------------- /public/realms/TokenSolutionsDAO/img/image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/TokenSolutionsDAO/img/image2.png -------------------------------------------------------------------------------- /public/realms/TrustBet/Bannerontransparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/TrustBet/Bannerontransparent.png -------------------------------------------------------------------------------- /public/realms/TrustBet/LRlogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/TrustBet/LRlogo.png -------------------------------------------------------------------------------- /public/realms/TrustBet/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/TrustBet/logo.png -------------------------------------------------------------------------------- /public/realms/UNDER/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/UNDER/logo.png -------------------------------------------------------------------------------- /public/realms/UNQ/img/UNQ-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/UNQ/img/UNQ-logo.png -------------------------------------------------------------------------------- /public/realms/UXP/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/UXP/favicon.ico -------------------------------------------------------------------------------- /public/realms/UXP/img/UXP-Black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/UXP/img/UXP-Black.png -------------------------------------------------------------------------------- /public/realms/Ukraine/img/Flag_of_Ukraine.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/realms/Ukraine/img/Ukraine_Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Ukraine/img/Ukraine_Logo.png -------------------------------------------------------------------------------- /public/realms/UkraineUnchained/img/ukraine_unchained.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/UkraineUnchained/img/ukraine_unchained.png -------------------------------------------------------------------------------- /public/realms/UkraineUnchained/img/ukraine_unchained_banner.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/UkraineUnchained/img/ukraine_unchained_banner.jpeg -------------------------------------------------------------------------------- /public/realms/VIEWSDAO/img/views_banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/VIEWSDAO/img/views_banner.jpg -------------------------------------------------------------------------------- /public/realms/VIEWSDAO/img/views_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/VIEWSDAO/img/views_logo.png -------------------------------------------------------------------------------- /public/realms/VillagesDAO/hldr: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /public/realms/VillagesDAO/villagesdaologo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/VillagesDAO/villagesdaologo.png -------------------------------------------------------------------------------- /public/realms/Wen DAO/Wen DAO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/Wen DAO/Wen DAO.png -------------------------------------------------------------------------------- /public/realms/WezeshaDAO/img/WezeshaBanner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/WezeshaDAO/img/WezeshaBanner.png -------------------------------------------------------------------------------- /public/realms/WezeshaDAO/img/wezesha_dao_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/WezeshaDAO/img/wezesha_dao_logo.png -------------------------------------------------------------------------------- /public/realms/WisdomDAO/banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/WisdomDAO/banner.jpg -------------------------------------------------------------------------------- /public/realms/WisdomDAO/og.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/WisdomDAO/og.jpg -------------------------------------------------------------------------------- /public/realms/WisdomEnterprising/img/WE.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/WisdomEnterprising/img/WE.jpg -------------------------------------------------------------------------------- /public/realms/WoofDAO/img/wooflogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/WoofDAO/img/wooflogo.png -------------------------------------------------------------------------------- /public/realms/XAPE/img/logo_xape_nobckg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/XAPE/img/logo_xape_nobckg.png -------------------------------------------------------------------------------- /public/realms/XAPE/img/xapes_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/XAPE/img/xapes_logo.png -------------------------------------------------------------------------------- /public/realms/XPWizards/img/xpwizlogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/XPWizards/img/xpwizlogo.png -------------------------------------------------------------------------------- /public/realms/YMDAO/img/ymdaologo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/YMDAO/img/ymdaologo.png -------------------------------------------------------------------------------- /public/realms/bacDao/logo_bulls.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/bacDao/logo_bulls.png -------------------------------------------------------------------------------- /public/realms/blueterra/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/blueterra/img/logo.png -------------------------------------------------------------------------------- /public/realms/brdot/banner_brdot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/brdot/banner_brdot.png -------------------------------------------------------------------------------- /public/realms/brdot/brdot_dao_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/brdot/brdot_dao_logo.png -------------------------------------------------------------------------------- /public/realms/cas311.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/cas311.png -------------------------------------------------------------------------------- /public/realms/eleusance/eleusance_logo_spl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/eleusance/eleusance_logo_spl.png -------------------------------------------------------------------------------- /public/realms/jungle-defi/jungle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/jungle-defi/jungle.png -------------------------------------------------------------------------------- /public/realms/mergey/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/mergey/logo.png -------------------------------------------------------------------------------- /public/realms/metaplex/img/black-circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/metaplex/img/black-circle.png -------------------------------------------------------------------------------- /public/realms/metaplex/img/meta-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/metaplex/img/meta-white.png -------------------------------------------------------------------------------- /public/realms/pumpkinspool/pumpkin_header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/pumpkinspool/pumpkin_header.png -------------------------------------------------------------------------------- /public/realms/pumpkinspool/pumpkin_logo_cropped.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/pumpkinspool/pumpkin_logo_cropped.png -------------------------------------------------------------------------------- /public/realms/safecows/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/safecows/banner.png -------------------------------------------------------------------------------- /public/realms/safecows/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/safecows/logo.png -------------------------------------------------------------------------------- /public/realms/sinDAO/sindao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/sinDAO/sindao.png -------------------------------------------------------------------------------- /public/realms/socean/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/socean/favicon.ico -------------------------------------------------------------------------------- /public/realms/solana/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/solana/favicon.ico -------------------------------------------------------------------------------- /public/realms/strangemood/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/strangemood/favicon.ico -------------------------------------------------------------------------------- /public/realms/token-overrides.json: -------------------------------------------------------------------------------- 1 | { 2 | "METAewgxyPbgwsseH8T16a39CQ5VyVxZi9zXiDPY18m": { 3 | "symbol": "MPLX", 4 | "extensions": { 5 | "coingeckoId": "metaplex" 6 | } 7 | }, 8 | 9 | "GePFQaZKHcWE5vpxHfviQtH5jgxokSs51Y5Q4zgBiMDs": { 10 | "symbol": "JFI", 11 | "extensions": { 12 | "coingeckoId": "jungle-defi" 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /public/realms/wikicious/wikicious.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/wikicious/wikicious.png -------------------------------------------------------------------------------- /public/realms/wonder/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/wonder/img/logo.png -------------------------------------------------------------------------------- /public/realms/xLPFi/xLPFi-min.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/realms/xLPFi/xLPFi-min.png -------------------------------------------------------------------------------- /public/verify-wallet/img/Direction--straight--right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /public/verify-wallet/img/icon-connected.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /public/verify-wallet/img/logo-matchday.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/public/verify-wallet/img/logo-matchday.png -------------------------------------------------------------------------------- /scripts/skip-vercel-builds.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # copied from https://vercel.com/guides/how-do-i-use-the-ignored-build-step-field-on-vercel 4 | 5 | echo "VERCEL_ENV: $VERCEL_ENV" 6 | 7 | if [[ "$VERCEL_ENV" == "production" ]] ; then 8 | # Proceed with the build 9 | echo "✅ - Build can proceed" 10 | exit 1; 11 | 12 | else 13 | # Don't build 14 | echo "🛑 - Build cancelled" 15 | exit 0; 16 | fi -------------------------------------------------------------------------------- /sentry.properties: -------------------------------------------------------------------------------- 1 | defaults.url=https://sentry.io/ 2 | defaults.org=solana 3 | defaults.project=realms 4 | cli.executable=../../../.npm/_npx/a8388072043b4cbc/node_modules/@sentry/cli/bin/sentry-cli 5 | -------------------------------------------------------------------------------- /stores/useNotificationStore.tsx: -------------------------------------------------------------------------------- 1 | import create, { State } from 'zustand' 2 | import produce from 'immer' 3 | import { persist } from 'zustand/middleware' 4 | 5 | interface NotificationStore extends State { 6 | notifications: Array<{ 7 | type: string 8 | message: string 9 | description?: string 10 | txid?: string 11 | }> 12 | set: (x: any) => void 13 | } 14 | 15 | const useNotificationStore = create( 16 | persist( 17 | (set, _get) => ({ 18 | notifications: [], 19 | set: (fn) => set(produce(fn)), 20 | }), 21 | { 22 | name: 'notifications', 23 | } 24 | ) 25 | ) 26 | 27 | export default useNotificationStore 28 | -------------------------------------------------------------------------------- /stores/useRouterHistoryStore.tsx: -------------------------------------------------------------------------------- 1 | import create, { State } from 'zustand' 2 | 3 | interface RouterHistoryStore extends State { 4 | history: string[] 5 | setHistory: (history: string[]) => void 6 | } 7 | 8 | const useRouterHistoryStore = create((set, _get) => ({ 9 | history: [], 10 | setHistory: (history) => { 11 | set({ history: history }) 12 | }, 13 | })) 14 | 15 | export default useRouterHistoryStore 16 | -------------------------------------------------------------------------------- /stores/useSelectedDelegatorStore.tsx: -------------------------------------------------------------------------------- 1 | import { PublicKey } from '@solana/web3.js' 2 | import create from 'zustand' 3 | 4 | type Store = { 5 | communityDelegator?: PublicKey 6 | councilDelegator?: PublicKey 7 | setCommunityDelegator: (x?: PublicKey) => void 8 | setCouncilDelegator: (x?: PublicKey) => void 9 | } 10 | 11 | export const useSelectedDelegatorStore = create((set, _get) => ({ 12 | communityDelegator: undefined, 13 | councilDelegator: undefined, 14 | setCommunityDelegator: (x) => set({ communityDelegator: x }), 15 | setCouncilDelegator: (x) => set({ councilDelegator: x }), 16 | })) 17 | -------------------------------------------------------------------------------- /test/models/registry/api.test.ts: -------------------------------------------------------------------------------- 1 | import { getCertifiedRealmInfo } from 'models/registry/api' 2 | import { getConnectionContext } from 'utils/connection' 3 | import realms from 'public/realms/mainnet-beta.json' 4 | 5 | test('getCertifiedRealmInfo', async () => { 6 | const mango = realms.find(({ symbol }) => symbol === 'MNGO')! 7 | 8 | const realmInfo = await getCertifiedRealmInfo( 9 | mango.symbol, 10 | getConnectionContext('mainnet') 11 | ) 12 | 13 | expect(realmInfo!.realmId.toBase58()).toEqual(mango.realmId) 14 | }) 15 | -------------------------------------------------------------------------------- /test/setup.js: -------------------------------------------------------------------------------- 1 | import '@testing-library/jest-dom/extend-expect' 2 | 3 | jest.mock('next/router', () => require('next-router-mock')) 4 | -------------------------------------------------------------------------------- /tools/batman-small.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/solana-labs/governance-ui/888913a6c24de8f7bcd351de8d3651586a395218/tools/batman-small.jpeg -------------------------------------------------------------------------------- /tools/core/pubkey.ts: -------------------------------------------------------------------------------- 1 | import { PublicKey } from '@solana/web3.js' 2 | 3 | export function isPublicKey(pk: string) { 4 | try { 5 | new PublicKey(pk) 6 | return true 7 | } catch { 8 | return false 9 | } 10 | } 11 | 12 | export function tryParsePublicKey(pk: string) { 13 | try { 14 | return new PublicKey(pk) 15 | } catch { 16 | return undefined 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /tools/core/resources.ts: -------------------------------------------------------------------------------- 1 | /// Returns resource path part by replacing prohibited characters like white spaces with '-' 2 | export function getResourcePathPart(name: string | undefined) { 3 | return name?.replace(' ', '-') 4 | } 5 | -------------------------------------------------------------------------------- /tools/core/script.ts: -------------------------------------------------------------------------------- 1 | // Converts array of items to a Map 2 | export function arrayToMap(source: readonly T[], getKey: (item: T) => K) { 3 | return new Map(source.map((item) => [getKey(item), item] as [K, T])) 4 | } 5 | 6 | export function arrayToRecord( 7 | source: readonly T[], 8 | getKey: (item: T) => string 9 | ) { 10 | return source.reduce((all, a) => ({ ...all, [getKey(a)]: a }), {}) as Record< 11 | string, 12 | T 13 | > 14 | } 15 | 16 | export function getNameOf() { 17 | return (name: keyof T) => name 18 | } 19 | -------------------------------------------------------------------------------- /tools/core/strings.ts: -------------------------------------------------------------------------------- 1 | export function equalsIgnoreCase( 2 | str1: string | undefined, 3 | str2: string | undefined 4 | ) { 5 | return str1?.toUpperCase() === str2?.toUpperCase() 6 | } 7 | -------------------------------------------------------------------------------- /tools/routing.ts: -------------------------------------------------------------------------------- 1 | import { RealmInfo } from 'models/registry/api' 2 | 3 | export function getRealmExplorerHost(realmInfo: RealmInfo | undefined) { 4 | return realmInfo?.symbol === 'MNGO' 5 | ? 'dao.mango.markets' 6 | : 'solscan.io' 7 | } 8 | -------------------------------------------------------------------------------- /tools/sdk/accounts.ts: -------------------------------------------------------------------------------- 1 | import { ProgramAccount } from '@solana/spl-governance' 2 | import { arrayToRecord } from '@tools/core/script' 3 | 4 | /** 5 | * Maps the source array of account to a map keyed by pubkey of the accounts 6 | * @param accounts 7 | * @returns 8 | */ 9 | export function accountsToPubkeyMap(accounts: ProgramAccount[]) { 10 | return arrayToRecord(accounts, (a) => a.pubkey.toBase58()) 11 | } 12 | -------------------------------------------------------------------------------- /tools/sdk/bpfUpgradeableLoader/accounts.ts: -------------------------------------------------------------------------------- 1 | import { getProgramDataAccount } from '@solana/spl-governance' 2 | import { Connection, PublicKey } from '@solana/web3.js' 3 | 4 | export async function getProgramData( 5 | connection: Connection, 6 | programId: string 7 | ) { 8 | const programData = await getProgramDataAccount( 9 | connection, 10 | new PublicKey(programId) 11 | ) 12 | 13 | return programData 14 | } 15 | -------------------------------------------------------------------------------- /tools/sdk/solend/initObligationAccount.ts: -------------------------------------------------------------------------------- 1 | import { PublicKey, TransactionInstruction } from '@solana/web3.js' 2 | import { initObligationInstruction } from '@solendprotocol/solend-sdk' 3 | import SolendConfiguration from './configuration' 4 | import { deriveObligationAddressFromWalletAndSeed } from './utils' 5 | 6 | export async function initObligationAccount({ 7 | obligationOwner, 8 | }: { 9 | obligationOwner: PublicKey 10 | }): Promise { 11 | const obligationAddress = await deriveObligationAddressFromWalletAndSeed( 12 | obligationOwner 13 | ) 14 | 15 | return initObligationInstruction( 16 | obligationAddress, 17 | SolendConfiguration.lendingMarket, 18 | obligationOwner, 19 | SolendConfiguration.programID 20 | ) 21 | } 22 | -------------------------------------------------------------------------------- /tools/sdk/solend/refreshReserve.ts: -------------------------------------------------------------------------------- 1 | import { TransactionInstruction } from '@solana/web3.js' 2 | import { refreshReserveInstruction } from '@solendprotocol/solend-sdk' 3 | 4 | import SolendConfiguration, { SupportedMintName } from './configuration' 5 | 6 | export async function refreshReserve({ 7 | mintName, 8 | }: { 9 | mintName: SupportedMintName 10 | }): Promise { 11 | const { 12 | reserve, 13 | pythOracle, 14 | switchboardFeedAddress, 15 | } = SolendConfiguration.getSupportedMintInformation(mintName) 16 | 17 | return refreshReserveInstruction( 18 | reserve, 19 | SolendConfiguration.programID, 20 | pythOracle, 21 | switchboardFeedAddress 22 | ) 23 | } 24 | -------------------------------------------------------------------------------- /tools/sdk/solend/utils.ts: -------------------------------------------------------------------------------- 1 | import { PublicKey } from '@solana/web3.js' 2 | 3 | import SolendConfiguration from './configuration' 4 | 5 | export async function deriveObligationAddressFromWalletAndSeed( 6 | walletAddress: PublicKey 7 | ) { 8 | return PublicKey.createWithSeed( 9 | walletAddress, 10 | SolendConfiguration.createObligationConfiguration.seed, 11 | SolendConfiguration.programID 12 | ) 13 | } 14 | -------------------------------------------------------------------------------- /tools/sdk/splToken/withMintTo.ts: -------------------------------------------------------------------------------- 1 | import { Token, u64 } from '@solana/spl-token' 2 | import { PublicKey, TransactionInstruction } from '@solana/web3.js' 3 | 4 | import { TOKEN_PROGRAM_ID } from '@utils/tokens' 5 | 6 | export const withMintTo = async ( 7 | instructions: TransactionInstruction[], 8 | mintPk: PublicKey, 9 | destinationPk: PublicKey, 10 | mintAuthorityPk: PublicKey, 11 | amount: number | u64 12 | ) => { 13 | instructions.push( 14 | Token.createMintToInstruction( 15 | TOKEN_PROGRAM_ID, 16 | mintPk, 17 | destinationPk, 18 | mintAuthorityPk, 19 | [], 20 | amount 21 | ) 22 | ) 23 | } 24 | -------------------------------------------------------------------------------- /utils/debounce.tsx: -------------------------------------------------------------------------------- 1 | class Debounce { 2 | typingTimeout: null | ReturnType 3 | debounce: Debounce 4 | constructor() { 5 | this.typingTimeout = null 6 | return this.debounce 7 | } 8 | debounceFcn = (callback, timeoutDuration = 900) => { 9 | if (!callback) { 10 | console.log('missing argument callback') 11 | } 12 | if (this.typingTimeout) { 13 | clearTimeout(this.typingTimeout) 14 | } 15 | this.typingTimeout = setTimeout(() => { 16 | callback() 17 | }, timeoutDuration) 18 | } 19 | } 20 | export const debounce = new Debounce() 21 | -------------------------------------------------------------------------------- /utils/formatPercentage.ts: -------------------------------------------------------------------------------- 1 | export function formatPercentage(percentage: number) { 2 | if (percentage === 0 || percentage === Infinity) { 3 | return '0%' 4 | } 5 | 6 | if (percentage < 0.01) { 7 | return '<0.01%' 8 | } 9 | 10 | return `${+percentage.toFixed(2)}%` 11 | } 12 | -------------------------------------------------------------------------------- /utils/getUserLocale.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Get the user's locale using values on the browser. If unsuccessful, default 3 | * to `'en-US'`. 4 | */ 5 | export function getUserLocale() { 6 | if ( 7 | typeof window === 'undefined' || 8 | typeof window.navigator === 'undefined' 9 | ) { 10 | return 'en-US' 11 | } 12 | 13 | if (window.navigator.languages?.length) { 14 | return window.navigator.languages[0] 15 | } 16 | 17 | return window.navigator.language || 'en-US' 18 | } 19 | -------------------------------------------------------------------------------- /utils/group.ts: -------------------------------------------------------------------------------- 1 | export default function group(items: T[], groupSize = 100): T[][] { 2 | if (items.length <= groupSize) { 3 | return [items] 4 | } 5 | 6 | const some = items.slice(0, groupSize) 7 | const rest = items.slice(groupSize) 8 | 9 | return [some, ...group(rest, groupSize)] 10 | } 11 | -------------------------------------------------------------------------------- /utils/instructions/Mean/getMint.tsx: -------------------------------------------------------------------------------- 1 | import { PaymentStreamingAccount } from '@mean-dao/payment-streaming' 2 | import { AssetAccount } from '@utils/uiTypes/assets' 3 | 4 | export default function getMint( 5 | accounts: AssetAccount[] = [], 6 | paymentStreamingAccount: PaymentStreamingAccount 7 | ) { 8 | return accounts.find( 9 | (a) => 10 | a.extensions.mint?.publicKey.toBase58() === 11 | paymentStreamingAccount?.mint.toString() 12 | )?.extensions.mint?.account 13 | } 14 | -------------------------------------------------------------------------------- /utils/instructions/PsyFinance/types.ts: -------------------------------------------------------------------------------- 1 | import * as anchor from '@coral-xyz/anchor' 2 | import { PublicKey } from '@solana/web3.js' 3 | 4 | export type OptionMarket = { 5 | optionMint: PublicKey 6 | writerTokenMint: PublicKey 7 | underlyingAssetMint: PublicKey 8 | quoteAssetMint: PublicKey 9 | underlyingAssetPool: PublicKey 10 | quoteAssetPool: PublicKey 11 | mintFeeAccount: PublicKey 12 | exerciseFeeAccount: PublicKey 13 | underlyingAmountPerContract: anchor.BN 14 | quoteAmountPerContract: anchor.BN 15 | expirationUnixTimestamp: anchor.BN 16 | expired: boolean 17 | bumpSeed: number 18 | } 19 | 20 | export type OptionMarketWithKey = OptionMarket & { 21 | key: PublicKey 22 | } 23 | -------------------------------------------------------------------------------- /utils/logs.ts: -------------------------------------------------------------------------------- 1 | import * as Sentry from '@sentry/react' 2 | 3 | export const trySentryLog = ({ 4 | tag, 5 | objToStringify, 6 | }: { 7 | tag: string 8 | objToStringify: any 9 | }) => { 10 | try { 11 | Sentry.captureMessage(JSON.stringify(objToStringify), { 12 | tags: { tag: tag }, 13 | }) 14 | } catch (e) { 15 | console.log(e, 'error in sentry log') 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /utils/notifications.tsx: -------------------------------------------------------------------------------- 1 | import useNotificationStore from '../stores/useNotificationStore' 2 | 3 | export function notify(newNotification: { 4 | type?: string 5 | message: string 6 | description?: string 7 | txid?: string 8 | }) { 9 | const { 10 | notifications, 11 | set: setNotificationStore, 12 | } = useNotificationStore.getState() 13 | 14 | setNotificationStore((state) => { 15 | state.notifications = [ 16 | ...notifications, 17 | { type: 'success', ...newNotification }, 18 | ] 19 | }) 20 | } 21 | -------------------------------------------------------------------------------- /utils/ntext.ts: -------------------------------------------------------------------------------- 1 | export function ntext(count: number, singular: string, plural?: string) { 2 | if (count === 1) { 3 | return singular 4 | } 5 | 6 | return plural || `${singular}s` 7 | } 8 | -------------------------------------------------------------------------------- /utils/pause.ts: -------------------------------------------------------------------------------- 1 | export function pause(ms: number) { 2 | return new Promise((resolve) => { 3 | setTimeout(() => resolve(true), ms) 4 | }) 5 | } 6 | -------------------------------------------------------------------------------- /utils/textToAddressList.ts: -------------------------------------------------------------------------------- 1 | import { validatePubkey } from '@utils/formValidation' 2 | 3 | interface Addresses { 4 | valid: string[] 5 | invalid: string[] 6 | } 7 | 8 | export const textToAddressList = (textBlock: string): Addresses => { 9 | const valid: string[] = [] 10 | const invalid: string[] = [] 11 | 12 | textBlock.split(/[\s|,]/).forEach((address) => { 13 | if (validatePubkey(address)) { 14 | valid.push(address) 15 | } else if (address.trim() /* ignore empty strings */) { 16 | invalid.push(address.trim()) 17 | } 18 | }) 19 | 20 | return { valid, invalid } 21 | } 22 | -------------------------------------------------------------------------------- /utils/typescript/assertUnreachable.ts: -------------------------------------------------------------------------------- 1 | export default function assertUnreachable(_: never): never { 2 | throw new Error('An unreachability assertion was reached') 3 | } 4 | -------------------------------------------------------------------------------- /utils/uiTypes/Result.ts: -------------------------------------------------------------------------------- 1 | export * from '@hub/types/Result' 2 | -------------------------------------------------------------------------------- /utils/uiTypes/members.ts: -------------------------------------------------------------------------------- 1 | import { BN } from '@coral-xyz/anchor' 2 | import { PublicKey } from '@solana/web3.js' 3 | 4 | export interface Member { 5 | walletAddress: string 6 | councilVotes: BN 7 | communityVotes: BN 8 | hasCouncilTokenOutsideRealm?: boolean 9 | hasCommunityTokenOutsideRealm?: boolean 10 | delegateWalletCouncil?: PublicKey 11 | delegateWalletCommunity?: PublicKey 12 | } 13 | -------------------------------------------------------------------------------- /utils/uiTypes/nfts.ts: -------------------------------------------------------------------------------- 1 | interface NFTFiles { 2 | type: string 3 | uri: string 4 | } 5 | interface NFTProperties { 6 | category: string 7 | files: NFTFiles[] 8 | } 9 | 10 | interface NFTCreator { 11 | verified: boolean 12 | address: string 13 | } 14 | 15 | interface NFTCollectionProperties { 16 | mintAddress: string 17 | creators: NFTCreator[] 18 | verified?: boolean 19 | } 20 | export interface NFTWithMint { 21 | image: string 22 | name: string 23 | description: string 24 | properties: NFTProperties 25 | collection: NFTCollectionProperties 26 | mintAddress: string 27 | address: string 28 | tokenAccountAddress: string 29 | } 30 | -------------------------------------------------------------------------------- /verify-wallet/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "singleQuote": true, 4 | "trailingComma": "all", 5 | "quoteProps": "consistent" 6 | } 7 | -------------------------------------------------------------------------------- /verify-wallet/components/gql.ts: -------------------------------------------------------------------------------- 1 | import * as IT from 'io-ts'; 2 | import { gql } from 'urql'; 3 | 4 | const VerifyWalletResponse = IT.type({ 5 | publicKey: IT.string, 6 | }); 7 | 8 | export const verifyWallet = gql` 9 | mutation($code: String!, $application: DiscordApplication = SOLANA) { 10 | verifyWallet(code: $code, application: $application) { 11 | publicKey 12 | } 13 | } 14 | `; 15 | 16 | export const verifyWalletResp = IT.type({ 17 | verifyWallet: VerifyWalletResponse, 18 | }); 19 | -------------------------------------------------------------------------------- /verify-wallet/constants.ts: -------------------------------------------------------------------------------- 1 | export enum Application { 2 | SOLANA, 3 | MATCHDAY, 4 | } 5 | -------------------------------------------------------------------------------- /verify-wallet/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "strict": true 5 | } 6 | } 7 | --------------------------------------------------------------------------------