Repository: snapshot-labs/snapshot-v1 Branch: master Commit: 23ef14e9e821 Files: 634 Total size: 2.0 MB Directory structure: gitextract_yfac7sqe/ ├── .browserslistrc ├── .dockerignore ├── .eslintignore ├── .eslintrc-auto-import.json ├── .github/ │ ├── CODE_OF_CONDUCT.md │ ├── CONTRIBUTING.md │ ├── ISSUE_TEMPLATE/ │ │ ├── BUG_REPORT.yml │ │ └── FEATURE_REQUEST.yml │ ├── PULL_REQUEST_TEMPLATE.md │ ├── dependabot.yml │ ├── stale.yml │ └── workflows/ │ ├── codeql.yml │ ├── deploy.yml │ ├── nodejs.yml │ ├── test.yaml │ ├── update-snapshot-packages.yml │ └── update-snapshot-submodules.yml ├── .gitignore ├── .gitmodules ├── .gitpod.yml ├── .husky/ │ ├── post-checkout │ ├── post-merge │ ├── pre-commit │ └── pre-push ├── Dockerfile ├── FUNDING.json ├── LICENSE ├── README.md ├── babel.config.js ├── crowdin.yml ├── index.html ├── package.json ├── postcss.config.js ├── public/ │ ├── .well-known/ │ │ ├── assetlinks.json │ │ └── did.json │ ├── manifest.json │ └── service-worker.js ├── src/ │ ├── App.vue │ ├── assets/ │ │ ├── css/ │ │ │ ├── main.scss │ │ │ ├── tippy.scss │ │ │ └── tune.scss │ │ └── fonts/ │ │ ├── iconfont.css │ │ └── iconfont.json │ ├── components/ │ │ ├── AboutMembersListItem.vue │ │ ├── AvatarOverlayEdit.vue │ │ ├── AvatarSpace.vue │ │ ├── AvatarToken.vue │ │ ├── AvatarUser.vue │ │ ├── Banner.vue │ │ ├── BaseAvatar.vue │ │ ├── BaseBadge.vue │ │ ├── BaseBlock.vue │ │ ├── BaseBreadcrumbs.vue │ │ ├── BaseButtonIcon.vue │ │ ├── BaseButtonRound.vue │ │ ├── BaseCalendar.vue │ │ ├── BaseCombobox.vue │ │ ├── BaseContainer.vue │ │ ├── BaseCounter.vue │ │ ├── BaseIcon.vue │ │ ├── BaseIndicator.vue │ │ ├── BaseInput.vue │ │ ├── BaseInterpunct.vue │ │ ├── BaseLink.vue │ │ ├── BaseListbox.vue │ │ ├── BaseLoading.vue │ │ ├── BaseMarkdown.vue │ │ ├── BaseMenu.vue │ │ ├── BaseMessage.vue │ │ ├── BaseMessageBlock.vue │ │ ├── BaseModal.vue │ │ ├── BaseModalSelectItem.vue │ │ ├── BaseNetworkItem.vue │ │ ├── BaseNoResults.vue │ │ ├── BasePill.vue │ │ ├── BasePluginItem.vue │ │ ├── BasePopover.vue │ │ ├── BasePopoverHover.vue │ │ ├── BaseProgressBar.vue │ │ ├── BaseProgressRadial.vue │ │ ├── BaseSearch.vue │ │ ├── BaseSidebarNavigationItem.vue │ │ ├── BaseSkinItem.vue │ │ ├── BaseStrategyItem.vue │ │ ├── BaseUser.vue │ │ ├── BlockLink.vue │ │ ├── BlockSpacesList.vue │ │ ├── BlockSpacesListButtonMore.vue │ │ ├── BlockSpacesListItem.vue │ │ ├── BlockSpacesListSkeleton.vue │ │ ├── ButtonBack.vue │ │ ├── ButtonCard.vue │ │ ├── ButtonFollow.vue │ │ ├── ButtonPlayground.vue │ │ ├── ButtonShare.vue │ │ ├── ButtonSwitch.vue │ │ ├── ButtonTheme.vue │ │ ├── ComboboxNetwork.vue │ │ ├── ContainerParallelInput.vue │ │ ├── ExploreMenuCategories.vue │ │ ├── ExploreSkeletonLoading.vue │ │ ├── ExploreSpaces.vue │ │ ├── FooterLinks.vue │ │ ├── FooterLinksItem.vue │ │ ├── FooterSocials.vue │ │ ├── FooterSocialsItem.vue │ │ ├── FooterTitle.vue │ │ ├── FormArrayStrategies.vue │ │ ├── FormObjectStrategyParams.vue │ │ ├── IconDiscord.vue │ │ ├── IconInformationTooltip.vue │ │ ├── IconVerifiedSpace.vue │ │ ├── IndicatorAssetsChange.spec.js │ │ ├── IndicatorAssetsChange.vue │ │ ├── InputCheckbox.vue │ │ ├── InputComboboxToken.vue │ │ ├── InputDate.vue │ │ ├── InputEmail.vue │ │ ├── InputNewsletter.vue │ │ ├── InputSelect.vue │ │ ├── InputSelectPrivacy.vue │ │ ├── InputSelectVoteType.vue │ │ ├── InputSelectVoteValidation.vue │ │ ├── InputSwitch.vue │ │ ├── InputUploadAvatar.vue │ │ ├── LabelInput.vue │ │ ├── LabelProposalState.vue │ │ ├── LabelProposalVoted.vue │ │ ├── LinkSpace.vue │ │ ├── ListboxNetwork.vue │ │ ├── LoadingList.vue │ │ ├── LoadingPage.vue │ │ ├── LoadingRow.vue │ │ ├── LoadingSpinner.vue │ │ ├── MenuAccount.vue │ │ ├── MenuLanguages.vue │ │ ├── MessageWarningFlagged.vue │ │ ├── MessageWarningGnosisNetwork.vue │ │ ├── MessageWarningHibernated.vue │ │ ├── MessageWarningTestnet.vue │ │ ├── MessageWarningValidation.vue │ │ ├── ModalAccount.vue │ │ ├── ModalConfirmAction.vue │ │ ├── ModalConfirmLeave.vue │ │ ├── ModalControllerEdit.vue │ │ ├── ModalDelegate.vue │ │ ├── ModalEmail.vue │ │ ├── ModalEmailManagement.vue │ │ ├── ModalEmailResend.vue │ │ ├── ModalEmailSubscription.vue │ │ ├── ModalLinkPreview.vue │ │ ├── ModalMessage.vue │ │ ├── ModalNotice.vue │ │ ├── ModalOsnap.vue │ │ ├── ModalPendingTransactions.vue │ │ ├── ModalPlugins.vue │ │ ├── ModalPostPayment.vue │ │ ├── ModalPostVote.vue │ │ ├── ModalProfileForm.vue │ │ ├── ModalRevokeDelegate.vue │ │ ├── ModalSelectDate.vue │ │ ├── ModalSkins.vue │ │ ├── ModalSnapshotTerms.vue │ │ ├── ModalSpaces.vue │ │ ├── ModalSpacesListItem.vue │ │ ├── ModalStrategies.vue │ │ ├── ModalStrategy.vue │ │ ├── ModalTerms.vue │ │ ├── ModalTokens.vue │ │ ├── ModalTokensItem.vue │ │ ├── ModalTransactionStatus.vue │ │ ├── ModalTreasury.vue │ │ ├── ModalValidation.vue │ │ ├── ModalVote.vue │ │ ├── ModalVoteValidation.vue │ │ ├── ModalVotingPrivacy.vue │ │ ├── ModalVotingType.vue │ │ ├── ModalWrongNetwork.vue │ │ ├── NavbarAccount.vue │ │ ├── NavbarExtras.vue │ │ ├── NavbarNotifications.vue │ │ ├── PopoverHoverProfile.vue │ │ ├── ProfileAboutBiography.vue │ │ ├── ProfileAboutDelegate.vue │ │ ├── ProfileAboutDelegateListItem.vue │ │ ├── ProfileActivityList.vue │ │ ├── ProfileActivityListItem.vue │ │ ├── ProfileAddressCopy.vue │ │ ├── ProfileName.vue │ │ ├── ProfileSidebar.vue │ │ ├── ProfileSidebarHeader.vue │ │ ├── ProfileSidebarHeaderSkeleton.vue │ │ ├── ProfileSidebarNavigation.vue │ │ ├── ProposalsItem.vue │ │ ├── ProposalsItemBody.vue │ │ ├── ProposalsItemFooter.vue │ │ ├── ProposalsItemResults.vue │ │ ├── ProposalsItemTitle.vue │ │ ├── SettingsBoostBlock.vue │ │ ├── SettingsDangerzoneBlock.vue │ │ ├── SettingsDelegationBlock.vue │ │ ├── SettingsDomainBlock.vue │ │ ├── SettingsLinkBlock.vue │ │ ├── SettingsMembersBlock.vue │ │ ├── SettingsMembersPopoverContent.vue │ │ ├── SettingsPluginsBlock.vue │ │ ├── SettingsProfileBlock.vue │ │ ├── SettingsProposalBlock.vue │ │ ├── SettingsStrategiesBlock.vue │ │ ├── SettingsSubSpacesBlock.vue │ │ ├── SettingsTreasuriesBlock.vue │ │ ├── SettingsTreasuriesBlockItem.vue │ │ ├── SettingsTreasuriesBlockItemButton.vue │ │ ├── SettingsTreasuryActivateOsnapButton.vue │ │ ├── SettingsValidationBlock.vue │ │ ├── SettingsVotingBlock.vue │ │ ├── SetupButtonBack.vue │ │ ├── SetupButtonCreate.vue │ │ ├── SetupButtonNext.vue │ │ ├── SetupDomain.vue │ │ ├── SetupDomainRegister.vue │ │ ├── SetupExtras.vue │ │ ├── SetupIntro.vue │ │ ├── SetupMessageHelp.vue │ │ ├── SetupProfile.vue │ │ ├── SetupSidebarStepper.vue │ │ ├── SetupStrategy.vue │ │ ├── SetupStrategyAdvanced.vue │ │ ├── SetupStrategyBasic.vue │ │ ├── SetupStrategyVote.vue │ │ ├── SidebarSpacesSkeleton.vue │ │ ├── SidebarUnreadIndicator.vue │ │ ├── SpaceBoostCardProposal.vue │ │ ├── SpaceBoostDeposit.vue │ │ ├── SpaceBreadcrumbs.vue │ │ ├── SpaceCreateContent.vue │ │ ├── SpaceCreateLegacyOsnap.vue │ │ ├── SpaceCreateOsnap.vue │ │ ├── SpaceCreatePlugins.vue │ │ ├── SpaceCreateVoting.vue │ │ ├── SpaceCreateVotingDateEnd.vue │ │ ├── SpaceCreateVotingDateStart.vue │ │ ├── SpaceCreateWarnings.vue │ │ ├── SpaceDelegateEdit.vue │ │ ├── SpaceDelegatesAccount.vue │ │ ├── SpaceDelegatesCard.vue │ │ ├── SpaceDelegatesDelegateModal.vue │ │ ├── SpaceDelegatesSkeleton.vue │ │ ├── SpaceDelegatesSplitDelegationModal.vue │ │ ├── SpaceProposalBoost.vue │ │ ├── SpaceProposalBoostClaim.vue │ │ ├── SpaceProposalBoostClaimModal.vue │ │ ├── SpaceProposalBoostClaimModalItem.vue │ │ ├── SpaceProposalBoostClaimModalSuccess.vue │ │ ├── SpaceProposalBoostItem.vue │ │ ├── SpaceProposalBoostItemMenu.vue │ │ ├── SpaceProposalBoostModalCreate.vue │ │ ├── SpaceProposalBoostWinnersModal.vue │ │ ├── SpaceProposalContent.vue │ │ ├── SpaceProposalHeader.vue │ │ ├── SpaceProposalInformation.vue │ │ ├── SpaceProposalPage.vue │ │ ├── SpaceProposalPlugins.vue │ │ ├── SpaceProposalPluginsSidebar.vue │ │ ├── SpaceProposalResults.vue │ │ ├── SpaceProposalResultsList.vue │ │ ├── SpaceProposalResultsListItem.vue │ │ ├── SpaceProposalResultsProgressBar.vue │ │ ├── SpaceProposalResultsQuorum.vue │ │ ├── SpaceProposalResultsShutter.vue │ │ ├── SpaceProposalVote.vue │ │ ├── SpaceProposalVoteApproval.vue │ │ ├── SpaceProposalVoteQuadratic.vue │ │ ├── SpaceProposalVoteRankedChoice.vue │ │ ├── SpaceProposalVoteSingleChoice.vue │ │ ├── SpaceProposalVotes.vue │ │ ├── SpaceProposalVotesFilters.vue │ │ ├── SpaceProposalVotesItem.vue │ │ ├── SpaceProposalVotesListItemChoice.vue │ │ ├── SpaceProposalVotesModal.vue │ │ ├── SpaceProposalVotesModalDownload.vue │ │ ├── SpaceProposalsNotice.vue │ │ ├── SpaceProposalsSearch.vue │ │ ├── SpaceProposalsSearchFilter.vue │ │ ├── SpaceSettingsMessageHibernated.vue │ │ ├── SpaceSidebar.vue │ │ ├── SpaceSidebarFooter.vue │ │ ├── SpaceSidebarHeader.vue │ │ ├── SpaceSidebarMenuThreeDot.vue │ │ ├── SpaceSidebarNavigation.vue │ │ ├── SpaceSidebarSubspaces.vue │ │ ├── SpaceSplitDelegationRow.vue │ │ ├── StrategiesBlockWarning.vue │ │ ├── StrategiesListItem.vue │ │ ├── TextAutolinker.vue │ │ ├── TextareaArray.vue │ │ ├── TextareaAutosize.vue │ │ ├── TextareaJson.vue │ │ ├── TheActionbar.vue │ │ ├── TheFlashNotification.vue │ │ ├── TheFooter.vue │ │ ├── TheLayout.vue │ │ ├── TheModalNotification.vue │ │ ├── TheNavbar.vue │ │ ├── TheSearchBar.vue │ │ ├── TheSidebar.vue │ │ ├── TreasuryAssetsList.vue │ │ ├── TreasuryAssetsListItem.spec.js │ │ ├── TreasuryAssetsListItem.vue │ │ ├── TreasuryWalletsList.spec.js │ │ ├── TreasuryWalletsList.vue │ │ ├── TreasuryWalletsListItem.spec.js │ │ ├── TreasuryWalletsListItem.vue │ │ ├── Tune/ │ │ │ ├── TuneBlock.vue │ │ │ ├── TuneBlockFooter.vue │ │ │ ├── TuneBlockHeader.vue │ │ │ ├── TuneButton.story.vue │ │ │ ├── TuneButton.vue │ │ │ ├── TuneButtonSelect.story.vue │ │ │ ├── TuneButtonSelect.vue │ │ │ ├── TuneCheckbox.story.vue │ │ │ ├── TuneCheckbox.vue │ │ │ ├── TuneCombobox.story.vue │ │ │ ├── TuneCombobox.vue │ │ │ ├── TuneComboboxMultiple.story.vue │ │ │ ├── TuneComboboxMultiple.vue │ │ │ ├── TuneErrorInput.story.vue │ │ │ ├── TuneErrorInput.vue │ │ │ ├── TuneForm.story.vue │ │ │ ├── TuneForm.vue │ │ │ ├── TuneIconHint.story.vue │ │ │ ├── TuneIconHint.vue │ │ │ ├── TuneInput.story.vue │ │ │ ├── TuneInput.vue │ │ │ ├── TuneInputDuration.story.vue │ │ │ ├── TuneInputDuration.vue │ │ │ ├── TuneInputSocial.vue │ │ │ ├── TuneInputUrl.vue │ │ │ ├── TuneLabelInput.story.vue │ │ │ ├── TuneLabelInput.vue │ │ │ ├── TuneListbox.story.vue │ │ │ ├── TuneListbox.vue │ │ │ ├── TuneListboxMultiple.story.vue │ │ │ ├── TuneListboxMultiple.vue │ │ │ ├── TuneLoadingSpinner.story.vue │ │ │ ├── TuneLoadingSpinner.vue │ │ │ ├── TuneMenu.story.vue │ │ │ ├── TuneMenu.vue │ │ │ ├── TuneModal.story.vue │ │ │ ├── TuneModal.vue │ │ │ ├── TuneModalDescription.vue │ │ │ ├── TuneModalIndicator.vue │ │ │ ├── TuneModalTitle.vue │ │ │ ├── TunePopover.story.vue │ │ │ ├── TunePopover.vue │ │ │ ├── TuneRadio.story.vue │ │ │ ├── TuneRadio.vue │ │ │ ├── TuneSelect.vue │ │ │ ├── TuneSwitch.story.vue │ │ │ ├── TuneSwitch.vue │ │ │ ├── TuneTag.story.vue │ │ │ ├── TuneTag.vue │ │ │ ├── TuneTextarea.story.vue │ │ │ ├── TuneTextarea.vue │ │ │ ├── TuneTextareaArray.story.vue │ │ │ ├── TuneTextareaArray.vue │ │ │ ├── TuneTextareaJson.story.vue │ │ │ ├── TuneTextareaJson.vue │ │ │ └── _Form/ │ │ │ ├── FormArray.vue │ │ │ ├── FormBoolean.vue │ │ │ ├── FormNumber.vue │ │ │ └── FormString.vue │ │ └── Ui/ │ │ ├── UiCollapsible.vue │ │ ├── UiCollapsibleContent.vue │ │ ├── UiCollapsibleText.vue │ │ ├── UiInput.vue │ │ └── UiSelect.vue │ ├── composables/ │ │ ├── useAccount.ts │ │ ├── useAliasAction.ts │ │ ├── useApolloQuery.ts │ │ ├── useApp.ts │ │ ├── useBalances.ts │ │ ├── useBoost.ts │ │ ├── useChangeNetwork.ts │ │ ├── useClient.ts │ │ ├── useCopy.ts │ │ ├── useDelegate.ts │ │ ├── useDelegates.ts │ │ ├── useEmailFetchClient.ts │ │ ├── useEmailSubscription.ts │ │ ├── useEns.ts │ │ ├── useExtendedSpaces.ts │ │ ├── useFlaggedMessageStatus.ts │ │ ├── useFlashNotification.ts │ │ ├── useFollowSpace.ts │ │ ├── useFormSpaceProposal.ts │ │ ├── useFormSpaceSettings.ts │ │ ├── useFormValidation.ts │ │ ├── useGnosis.ts │ │ ├── useI18n.ts │ │ ├── useImageUpload.ts │ │ ├── useInfiniteLoader.ts │ │ ├── useIntl.ts │ │ ├── useMeta.ts │ │ ├── useModal.ts │ │ ├── useModalNotification.ts │ │ ├── useNetworksFilter.ts │ │ ├── useNotifications.ts │ │ ├── usePayment.ts │ │ ├── usePlugins.ts │ │ ├── useProfiles.ts │ │ ├── useProposalVotes.ts │ │ ├── useProposals.ts │ │ ├── useQuorum.ts │ │ ├── useReportDownload.ts │ │ ├── useResolveName.ts │ │ ├── useSafe.ts │ │ ├── useSharing.ts │ │ ├── useShortUrls.ts │ │ ├── useSkin.ts │ │ ├── useSkinsFilter.ts │ │ ├── useSnapshot.ts │ │ ├── useSpaceController.ts │ │ ├── useSpaceSubscription.ts │ │ ├── useSpaces.ts │ │ ├── useStatement.ts │ │ ├── useStrategies.ts │ │ ├── useTerms.ts │ │ ├── useTreasury.ts │ │ ├── useTxStatus.ts │ │ ├── useUnseenProposals.ts │ │ ├── useUsername.ts │ │ └── useWeb3.ts │ ├── env.d.ts │ ├── helpers/ │ │ ├── alchemy/ │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── apollo.ts │ │ ├── auth.ts │ │ ├── b64.ts │ │ ├── beams.ts │ │ ├── boost/ │ │ │ ├── abi.json │ │ │ ├── api.ts │ │ │ ├── index.ts │ │ │ ├── subgraph.ts │ │ │ ├── tokens.ts │ │ │ └── types.ts │ │ ├── clientEIP712.ts │ │ ├── connectors.ts │ │ ├── constants.ts │ │ ├── covalent.ts │ │ ├── delegation.ts │ │ ├── delegationV2/ │ │ │ ├── compound/ │ │ │ │ ├── index.ts │ │ │ │ ├── queries.ts │ │ │ │ ├── read.ts │ │ │ │ └── write.ts │ │ │ ├── index.ts │ │ │ ├── splitDelegation/ │ │ │ │ ├── abi.ts │ │ │ │ ├── index.ts │ │ │ │ ├── read.ts │ │ │ │ └── write.ts │ │ │ └── types.ts │ │ ├── ens.ts │ │ ├── i18n.ts │ │ ├── interfaces.ts │ │ ├── pin.ts │ │ ├── queries.ts │ │ ├── shutter.ts │ │ ├── sign.ts │ │ ├── snapshot.ts │ │ ├── transaction.ts │ │ ├── utils.test.js │ │ ├── utils.ts │ │ ├── validation.ts │ │ └── vitePlugins.ts │ ├── locales/ │ │ ├── ar-SA.json │ │ ├── de-DE.json │ │ ├── default.json │ │ ├── es-ES.json │ │ ├── fil-PH.json │ │ ├── fr-FR.json │ │ ├── hi-IN.json │ │ ├── id-ID.json │ │ ├── it-IT.json │ │ ├── ja-JP.json │ │ ├── ko-KR.json │ │ ├── languages.json │ │ ├── pt-PT.json │ │ ├── ro-RO.json │ │ ├── ru-RU.json │ │ ├── tr-TR.json │ │ ├── uk-UA.json │ │ ├── vi-VN.json │ │ └── zh-CN.json │ ├── main.ts │ ├── plugins/ │ │ ├── README.md │ │ ├── domino/ │ │ │ ├── ProposalSidebar.vue │ │ │ ├── components/ │ │ │ │ └── CustomBlock.vue │ │ │ └── plugin.json │ │ ├── gnosis/ │ │ │ ├── Create.vue │ │ │ ├── ProposalSidebar.vue │ │ │ ├── components/ │ │ │ │ ├── Config.vue │ │ │ │ └── CustomBlock.vue │ │ │ ├── index.ts │ │ │ └── plugin.json │ │ ├── oSnap/ │ │ │ ├── Create.vue │ │ │ ├── CreateSafe.vue │ │ │ ├── Proposal.vue │ │ │ ├── README.md │ │ │ ├── components/ │ │ │ │ ├── BotSupportWarning.vue │ │ │ │ ├── ExternalLink.vue │ │ │ │ ├── HandleOutcome/ │ │ │ │ │ ├── HandleOutcome.vue │ │ │ │ │ └── steps/ │ │ │ │ │ ├── CanProposeToOG.vue │ │ │ │ │ ├── CanRequestTxExecution.vue │ │ │ │ │ ├── InOOChallengePeriod.vue │ │ │ │ │ ├── RejectedBySnapshotVote.vue │ │ │ │ │ ├── TallyingSnapshotVotes.vue │ │ │ │ │ └── TransactionsExecuted.vue │ │ │ │ ├── Input/ │ │ │ │ │ ├── Address.vue │ │ │ │ │ ├── Amount.vue │ │ │ │ │ ├── FileInput/ │ │ │ │ │ │ ├── FileInput.vue │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── MethodParameter/ │ │ │ │ │ │ ├── MethodParameter.vue │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── ReadOnly.vue │ │ │ │ │ ├── SelectSafe.vue │ │ │ │ │ └── TransactionType.vue │ │ │ │ ├── OsnapMarketingWidget.vue │ │ │ │ ├── SafeLinkWithAvatar.vue │ │ │ │ └── TransactionBuilder/ │ │ │ │ ├── ContractInteraction.vue │ │ │ │ ├── ModalSafe.vue │ │ │ │ ├── ModalTransactionType.vue │ │ │ │ ├── RawTransaction.vue │ │ │ │ ├── SafeImport.vue │ │ │ │ ├── TenderlySimulation.vue │ │ │ │ ├── TokensModal.vue │ │ │ │ ├── TokensModalItem.vue │ │ │ │ ├── Transaction.vue │ │ │ │ ├── TransactionBuilder.vue │ │ │ │ ├── TransactionImport.vue │ │ │ │ ├── TransferFunds.vue │ │ │ │ └── TransferNFT.vue │ │ │ ├── constants.ts │ │ │ ├── plugin.json │ │ │ ├── types.ts │ │ │ └── utils/ │ │ │ ├── abi.ts │ │ │ ├── coins.ts │ │ │ ├── events.ts │ │ │ ├── getters.ts │ │ │ ├── index.ts │ │ │ ├── proposal.ts │ │ │ ├── safeImport.ts │ │ │ ├── tenderly.ts │ │ │ ├── transactions.ts │ │ │ └── validators.ts │ │ ├── poap/ │ │ │ ├── ProposalSidebar.vue │ │ │ ├── components/ │ │ │ │ └── CustomBlock.vue │ │ │ ├── index.ts │ │ │ └── plugin.json │ │ ├── progress/ │ │ │ ├── ProposalSidebar.vue │ │ │ ├── components/ │ │ │ │ └── CustomBlock.vue │ │ │ ├── index.ts │ │ │ ├── plugin.json │ │ │ └── readme.md │ │ ├── projectGalaxy/ │ │ │ ├── ProposalSidebar.vue │ │ │ ├── README.md │ │ │ ├── components/ │ │ │ │ └── CustomBlock.vue │ │ │ ├── index.ts │ │ │ └── plugin.json │ │ ├── quorum/ │ │ │ ├── examples.json │ │ │ └── plugin.json │ │ └── safeSnap/ │ │ ├── Create.vue │ │ ├── Proposal.vue │ │ ├── components/ │ │ │ ├── Config.vue │ │ │ ├── Form/ │ │ │ │ ├── ContractInteraction.vue │ │ │ │ ├── ImportTransactionsButton.vue │ │ │ │ ├── RawTransaction.vue │ │ │ │ ├── SendAsset.vue │ │ │ │ ├── TokensModal.vue │ │ │ │ ├── TokensModalItem.vue │ │ │ │ ├── Transaction.vue │ │ │ │ ├── TransactionBatch.vue │ │ │ │ └── TransferFunds.vue │ │ │ ├── HandleOutcome.vue │ │ │ ├── HandleOutcomeUma.vue │ │ │ ├── Input/ │ │ │ │ ├── Address.vue │ │ │ │ ├── Amount.vue │ │ │ │ ├── ArrayType.vue │ │ │ │ └── MethodParameter.vue │ │ │ ├── Modal/ │ │ │ │ └── OptionApproval.vue │ │ │ ├── SafeTransactions.vue │ │ │ └── Tooltip.vue │ │ ├── constants.ts │ │ ├── index.ts │ │ ├── plugin.json │ │ ├── types/ │ │ │ └── index.ts │ │ └── utils/ │ │ ├── abi.ts │ │ ├── coins.ts │ │ ├── decoder.ts │ │ ├── events.ts │ │ ├── index.ts │ │ ├── multiSend.ts │ │ ├── realityETH.ts │ │ ├── realityModule.ts │ │ ├── safe.ts │ │ ├── transactions.ts │ │ ├── umaModule.ts │ │ └── validator.ts │ ├── router/ │ │ └── index.ts │ ├── sentry.ts │ └── views/ │ ├── DelegateView.vue │ ├── ExploreView.vue │ ├── PlaygroundView.vue │ ├── ProfileAbout.vue │ ├── ProfileActivity.vue │ ├── ProfileView.vue │ ├── RankingView.vue │ ├── SetupView.vue │ ├── SpaceAbout.vue │ ├── SpaceBoost.vue │ ├── SpaceCreate.vue │ ├── SpaceDelegate.vue │ ├── SpaceDelegates.vue │ ├── SpaceProposal.vue │ ├── SpaceProposals.vue │ ├── SpaceSettings.vue │ ├── SpaceTreasury.vue │ ├── SpaceView.vue │ ├── StrategyView.vue │ ├── TermsView.vue │ └── TimelineView.vue ├── tailwind.config.js ├── tsconfig.json ├── vercel.json └── vite.config.ts ================================================ FILE CONTENTS ================================================ ================================================ FILE: .browserslistrc ================================================ > 1% last 2 versions not dead ================================================ FILE: .dockerignore ================================================ node_modules ================================================ FILE: .eslintignore ================================================ src/plugins/* ================================================ FILE: .eslintrc-auto-import.json ================================================ { "globals": { "Component": true, "ComponentPublicInstance": true, "ComputedRef": true, "DARK": true, "EffectScope": true, "InjectionKey": true, "LIGHT": true, "PropType": true, "Ref": true, "VNode": true, "computed": true, "createApp": true, "customRef": true, "defineAsyncComponent": true, "defineComponent": true, "effectScope": true, "getCurrentInstance": true, "getCurrentScope": true, "getRanking": true, "h": true, "inject": true, "isProxy": true, "isReactive": true, "isReadonly": true, "isRef": true, "markRaw": true, "nextTick": true, "onActivated": true, "onBeforeMount": true, "onBeforeRouteLeave": true, "onBeforeRouteUpdate": true, "onBeforeUnmount": true, "onBeforeUpdate": true, "onDeactivated": true, "onErrorCaptured": true, "onMounted": true, "onRenderTracked": true, "onRenderTriggered": true, "onScopeDispose": true, "onServerPrefetch": true, "onUnmounted": true, "onUpdated": true, "provide": true, "reactive": true, "readonly": true, "ref": true, "resolveComponent": true, "shallowReactive": true, "shallowReadonly": true, "shallowRef": true, "toRaw": true, "toRef": true, "toRefs": true, "triggerRef": true, "unref": true, "useAliasAction": true, "useApolloQuery": true, "useApp": true, "useAttrs": true, "useClient": true, "useCopy": true, "useCssModule": true, "useCssVars": true, "useDelegate": true, "useEns": true, "useExtendedSpaces": true, "useFlashNotification": true, "useFollowSpace": true, "useFormSpaceProposal": true, "useFormSpaceSettings": true, "useFormValidation": true, "useGnosis": true, "useI18n": true, "useImageUpload": true, "useInfiniteLoader": true, "useIntl": true, "useLink": true, "useMeta": true, "useModal": true, "useModalNotification": true, "useNetworksFilter": true, "useNotifications": true, "usePlugins": true, "useProfiles": true, "useProposalVotes": true, "useProposals": true, "useQuorum": true, "useReportDownload": true, "useRoute": true, "useRouter": true, "useSafe": true, "useSharing": true, "useShortUrls": true, "useSkin": true, "useSkinsFilter": true, "useSlots": true, "useSnapshot": true, "useSpaceController": true, "useSpaceSubscription": true, "useSpaces": true, "useStrategies": true, "useTerms": true, "useTreasury": true, "useTxStatus": true, "useUnseenProposals": true, "useUsername": true, "useWeb3": true, "useDelegates": true, "useResolveName": true, "watch": true, "watchEffect": true, "watchPostEffect": true, "watchSyncEffect": true, "watchTxStatus": true, "toValue": true, "useFlaggedMessageStatus": true, "useEmailSubscription": true, "useEmailFetchClient": true, "useStatement": true, "useBalances": true, "useAccount": true, "usePayment": true, "useChangeNetwork": true, "useBoost": true } } ================================================ FILE: .github/CODE_OF_CONDUCT.md ================================================ # Contributor Covenant Code of Conduct ## Our Pledge In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards Examples of behavior that contributes to creating a positive environment include: * Using welcoming and inclusive language * Being respectful of differing viewpoints and experiences * Gracefully accepting constructive criticism * Focusing on what is best for the community * Showing empathy towards other community members Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic address, without explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. ## Scope This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at fabien@bonustrack.co. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] [homepage]: http://contributor-covenant.org [version]: http://contributor-covenant.org/version/1/4/ ================================================ FILE: .github/CONTRIBUTING.md ================================================ ### Opening an issue You should usually open an issue in the following situations: * Report an error you can’t solve yourself * Discuss a high-level topic or idea (for example, community, vision or policies) * Propose a new feature or other project idea Tips for communicating on issues: * **If you see an open issue that you want to tackle,** comment on the issue to let people know you’re on it. That way, people are less likely to duplicate your work. * **If an issue was opened a while ago,** it’s possible that it’s being addressed somewhere else, or has already been resolved, so comment to ask for confirmation before starting work. * **If you opened an issue, but figured out the answer later on your own,** comment on the issue to let people know, then close the issue. Even documenting that outcome is a contribution to the project. ### Opening a pull request You should usually open a pull request in the following situations: * Submit trivial fixes (for example, a typo, a broken link or an obvious error) * Start work on a contribution that was already asked for, or that you’ve already discussed, in an issue A pull request doesn’t have to represent finished work. It’s usually better to open a pull request early on, so others can watch or give feedback on your progress. Just mark it as a “WIP” (Work in Progress) in the subject line. You can always add more commits later. If the project is on GitHub, here’s how to submit a pull request: * **Fork the repository** and clone it locally. Connect your local to the original repository by adding it as a remote. Pull in changes from this repository often so that you stay up to date so that when you submit your pull request, merge conflicts will be less likely. * **Create a branch** for your edits. * **Reference any relevant issues** or supporting documentation in your PR (for example, “Closes #37.”) * **Include screenshots of the before and after** if your changes include differences in HTML/CSS. Drag and drop the images into the body of your pull request. * **Test your changes!** Run your changes against any existing tests if they exist and create new ones when needed. Whether tests exist or not, make sure your changes don’t break the existing project. * **Contribute in the style of the project** to the best of your abilities. This may mean using indents, semi-colons or comments differently than you would in your own repository, but makes it easier for the maintainer to merge, others to understand and maintain in the future. ================================================ FILE: .github/ISSUE_TEMPLATE/BUG_REPORT.yml ================================================ name: Bug report description: File a bug report title: "[BUG] - " labels: ["bug-report"] body: - type: markdown attributes: value: Thanks for making Snapshot awesome for everyone. - type: input id: title attributes: label: Briefly describe the bug. description: A clear and concise description of what the bug is. placeholder: ex. Unable to vote using metamask wallet on chrome. validations: required: true - type: textarea id: reproduce attributes: label: How can we reproduce the bug? placeholder: Steps to reproduce the behaviour. value: | 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See error validations: required: true - type: textarea id: expectation attributes: label: What is the expected behaviour? description: A clear and concise description of what you expected to happen. placeholder: ex. I should be able to vote using metamask wallet on chrome. validations: required: false - type: textarea id: screenshots attributes: label: Can you attach screenshots? description: Please attach all the screenshots that can help us visually see the problem. placeholder: You can drag-and-drop the image, copy paste the image in the field below. validations: required: false - type: textarea id: device attributes: label: Can you provide your device specific details below? value: | 1. Device Type - [ex. Desktop or Mobile] 2. Device OS - [ex. Android, MacOS, Windows, iOS] 3. OS Version - [ex. iOS 11, Windows 10] 4. Browser - [ex. chrome, safari] 5. Browser Version - [ex. 101] 6. Wallet - [metamask, portis, walletconnect] 7. Space - [ex. ENS, Gitcoin] 8. Any additional information we should know - validations: required: false ================================================ FILE: .github/ISSUE_TEMPLATE/FEATURE_REQUEST.yml ================================================ name: Feature request description: Suggest an idea for this project title: "[NEW FEATURE] - " labels: ["feature-request"] body: - type: markdown attributes: value: Thanks for making Snapshot awesome for everyone. - type: input id: title attributes: label: Briefly describe the feature. description: A clear and concise description of the feature you are requesting. validations: required: true - type: textarea id: problem attributes: label: Which problem is this feature trying to solve? description: A clear description of the problem or frustration that will be solved with this feature. placeholder: ex. I'm always frustrated when I am viewing the proposal metrics validations: required: true - type: textarea id: solution attributes: label: What is the expected solution? description: A clear and concise description of what you expected to happen. placeholder: ex. Having a chart to read the votes on the proposal will make it very easy to read the proposal metrics. validations: required: true - type: textarea id: alternatives attributes: label: How do you currently handle this problem? description: A clear and concise description of any alternative solutions or features you've considered. validations: required: false - type: textarea id: additional attributes: label: Anything else you'd like to mention? description: Please mention any technical details, screenshots, mock-ups that you might have for us to better understand the feature. validations: required: false ================================================ FILE: .github/PULL_REQUEST_TEMPLATE.md ================================================ ### Summary Closes: # ### How to test 1. ### To-Do - [ ] ================================================ FILE: .github/dependabot.yml ================================================ version: 2 updates: - package-ecosystem: "npm" directory: "/" schedule: interval: "weekly" ignore: - dependency-name: "@snapshot-labs/*" groups: production-dependencies: dependency-type: "production" development-dependencies: dependency-type: "development" ================================================ FILE: .github/stale.yml ================================================ daysUntilStale: 120 daysUntilClose: 14 exemptLabels: - pinned - enhancement - bug staleLabel: stale markComment: > This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. closeComment: false ================================================ FILE: .github/workflows/codeql.yml ================================================ name: "CodeQL" on: push: branches: [ 'master' ] pull_request: # The branches below must be a subset of the branches above branches: [ 'master' ] schedule: - cron: '36 5 * * 6' jobs: analyze: name: Analyze runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }} timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }} permissions: actions: read contents: read security-events: write strategy: fail-fast: false matrix: language: [ 'javascript' ] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] # Use only 'java' to analyze code written in Java, Kotlin or both # Use only 'javascript' to analyze code written in JavaScript, TypeScript or both # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support steps: - name: Checkout repository uses: actions/checkout@v3 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs # queries: security-extended,security-and-quality # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild uses: github/codeql-action/autobuild@v2 # ℹ️ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun # If the Autobuild fails above, remove it and uncomment the following three lines. # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. # - run: | # echo "Run, Build Application using script" # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 with: category: "/language:${{matrix.language}}" ================================================ FILE: .github/workflows/deploy.yml ================================================ name: Deploy on: workflow_dispatch: inputs: target: type: choice description: Target options: - stable jobs: deploy: runs-on: ubuntu-latest steps: # Checks-out repo on develop branch - uses: actions/checkout@v3 with: ref: 'master' # Overwrite target - run: | git checkout -b ${{ github.event.inputs.target }} git push --set-upstream origin ${{ github.event.inputs.target }} --force ================================================ FILE: .github/workflows/nodejs.yml ================================================ name: Node CI on: push: jobs: build: runs-on: ubuntu-latest strategy: matrix: node-version: [16.x] steps: - name: Checkout repository uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - name: Install dependencies run: yarn - name: Build run: yarn run build - name: Lint run: yarn run lint ================================================ FILE: .github/workflows/test.yaml ================================================ name: Tests on: [push] jobs: test: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: '16' cache: 'yarn' - run: yarn - run: yarn test:unit:coverage - name: Upload coverage reports to Codecov uses: codecov/codecov-action@v3 with: token: ${{ secrets.CODECOV_TOKEN }} ================================================ FILE: .github/workflows/update-snapshot-packages.yml ================================================ name: Update Snapshot packages on: workflow_dispatch jobs: update-dep: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 with: node-version: '16.x' - name: Update snapshot.js run: | yarn upgrade @snapshot-labs/snapshot.js --latest - name: Update lock.js run: | yarn upgrade @snapshot-labs/lock --latest - name: Create Pull Request uses: peter-evans/create-pull-request@v3 with: commit-message: Update Snapshot packages title: Update Snapshot packages body: | - Updates from snapshot.js or lock packages Auto-generated by Github Actions branch: update-snapshot-packages ================================================ FILE: .github/workflows/update-snapshot-submodules.yml ================================================ name: Update Snapshot submodules on: workflow_dispatch jobs: update-dep: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 with: submodules: 'recursive' - uses: actions/setup-node@v1 with: node-version: '16.x' - name: Update submodules run: | git submodule update --remote - name: Create Pull Request uses: peter-evans/create-pull-request@v3 with: title: Update Snapshot submodules body: | - Updates from submodules Auto-generated by Github Actions branch: update-snapshot-submodules ================================================ FILE: .gitignore ================================================ .DS_Store node_modules /dist .yalc components.d.ts auto-imports.d.ts # local env file .env.local .env.*.local # Log files npm-debug.log* yarn-debug.log* yarn-error.log* pnpm-debug.log* # Editor directories and files .idea .vscode *.suo *.ntvs* *.njsproj *.sln *.sw? # Vitest /coverage # Sentry Auth Token .env.sentry-build-plugin ================================================ FILE: .gitmodules ================================================ [submodule "snapshot-spaces"] path = snapshot-spaces url = https://github.com/snapshot-labs/snapshot-spaces ================================================ FILE: .gitpod.yml ================================================ tasks: - name: Setup init: | yarn install --frozen-lockfile --silent --network-timeout 100000 command: yarn dev ports: - port: 3000 onOpen: open-preview ================================================ FILE: .husky/post-checkout ================================================ #!/bin/sh . "$(dirname "$0")/_/husky.sh" yarn run init-submodules ================================================ FILE: .husky/post-merge ================================================ #!/bin/sh . "$(dirname "$0")/_/husky.sh" yarn run init-submodules ================================================ FILE: .husky/pre-commit ================================================ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" ================================================ FILE: .husky/pre-push ================================================ #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" ================================================ FILE: Dockerfile ================================================ FROM node:18-alpine RUN apk update && apk upgrade && \ apk add --no-cache git py3-pip python3 gcc g++ make WORKDIR /app COPY . . RUN yarn install --frozen-lockfile RUN yarn install --frozen-lockfile RUN yarn run build EXPOSE 8080 CMD ["yarn", "run", "dev", "--host"] ================================================ FILE: FUNDING.json ================================================ { "drips": { "ethereum": { "ownedBy": "0x8C28Cf33d9Fd3D0293f963b1cd27e3FF422B425c" } }, "opRetro": { "projectId": "0x5e6c436e48e56d6d9622ba5d0be0035c314e2b29d2afc8f5f1ee8ac75cd42532" } } ================================================ FILE: LICENSE ================================================ The MIT License (MIT) Copyright (c) Snapshot Labs Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================
Snapshot Logo

Snapshot

Snapshot is an off-chain gasless multi-governance client with easy to verify and hard to contest results.

Node CI GitHub commit activity GitHub issues help wanted Discord

snapshot.org »

DocumentationFeature requestsContribute
## Project setup ``` yarn ``` ### Compiles and hot-reloads for development ``` yarn dev ``` ### Compiles and minifies for production ``` yarn build ``` ### Lints and fixes files ``` yarn run lint ``` ### Development Guide Use `http://localhost:8080/#/fabien.eth` for testing your code. By default your instance will connect to the hub at `https://testnet.hub.snapshot.org`. To change that (or other values) you can create a `.env.local` and overwrite the values from `.env`. ## Running service locally with Docker 1. Run `docker build -t snapshot .` to build the image 2. Run `docker run --name snapshot -p 8080:8080 snapshot` to run the container 3. Go to `http://localhost:8080/#/fabien.eth` to test your code ## License Snapshot is open-sourced software licensed under the © [MIT license](LICENSE). ================================================ FILE: babel.config.js ================================================ module.exports = { presets: ['@vue/cli-plugin-babel/preset'] }; ================================================ FILE: crowdin.yml ================================================ files: - source: /src/locales/default.json translation: /src/locales/%locale%.json ================================================ FILE: index.html ================================================ Snapshot