{"id":13639432,"url":"https://github.com/raid-guild/open-grants","last_synced_at":"2025-08-18T13:33:56.565Z","repository":{"id":38986144,"uuid":"290295855","full_name":"raid-guild/open-grants","owner":"raid-guild","description":"Funding public goods on ethereum using open grants.","archived":false,"fork":false,"pushed_at":"2023-01-27T02:21:53.000Z","size":28272,"stargazers_count":13,"open_issues_count":18,"forks_count":5,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-06T05:41:51.179Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://opengrants.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/raid-guild.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-08-25T18:43:53.000Z","updated_at":"2023-06-26T15:37:32.000Z","dependencies_parsed_at":"2023-01-29T01:30:42.386Z","dependency_job_id":null,"html_url":"https://github.com/raid-guild/open-grants","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/raid-guild/open-grants","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raid-guild%2Fopen-grants","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raid-guild%2Fopen-grants/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raid-guild%2Fopen-grants/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raid-guild%2Fopen-grants/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raid-guild","download_url":"https://codeload.github.com/raid-guild/open-grants/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raid-guild%2Fopen-grants/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271003023,"owners_count":24683219,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-18T02:00:08.743Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T01:01:00.552Z","updated_at":"2025-08-18T13:33:56.171Z","avatar_url":"https://github.com/raid-guild.png","language":"TypeScript","funding_links":[],"categories":["合约开发"],"sub_categories":[],"readme":"# open-grants mono repo\n\nTogether we empower developers to build the next generation of ethereum.\nCome fund public goods on ethereum using open grants.\n\n## Project Structure\n\nThis project is a monorepo created with [Yarn Workspaces](https://classic.yarnpkg.com/en/docs/workspaces/).\n\n[comment]: # 'git ls-tree -r --name-only HEAD | tree --fromfile'\n\n```\nopen-grants\n├── .firebaserc\n├── .github\n│   ├── ISSUE_TEMPLATE\n│   │   └── add-featured-grant.md\n│   └── workflows\n│       ├── check.yml\n│       ├── deploy-kovan.yml\n│       └── deploy-mainnet.yml\n├── .gitignore\n├── .prettierrc.json\n├── README.md\n├── firebase.json\n├── package.json\n├── packages\n│   ├── contracts\n│   │   ├── AUDIT_SCOPE.md\n│   │   ├── LICENSE\n│   │   ├── QUESTIONS.md\n│   │   ├── README.md\n│   │   ├── _archive_test\n│   │   │   ├── ManagedCapped\n│   │   │   │   ├── Grant-Cancel.spec.ts\n│   │   │   │   ├── Grant-Factory.spec.ts\n│   │   │   │   ├── Grant-Funding.spec.ts\n│   │   │   │   ├── Grant-Payout.spec.ts\n│   │   │   │   ├── Grant-Refunds-MultipleDonors.spec.ts\n│   │   │   │   ├── Grant-Refunds.spec.ts\n│   │   │   │   └── Grant.spec.ts\n│   │   │   └── helpers\n│   │   │       └── helpers.ts\n│   │   ├── buidler-env.d.ts\n│   │   ├── buidler.config.ts\n│   │   ├── circle_waffle.js\n│   │   ├── contracts\n│   │   │   ├── D24nGrant._sol\n│   │   │   ├── EtherVesting.sol\n│   │   │   ├── ManagedCappedGrant._sol\n│   │   │   ├── UnmanagedGrant.sol\n│   │   │   ├── shared\n│   │   │   │   ├── WIP\n│   │   │   │   │   ├── CancelableRefundable._sol\n│   │   │   │   │   ├── FundGrant._sol\n│   │   │   │   │   ├── GranteeAllocation._sol\n│   │   │   │   │   ├── ManagedAllocation._sol\n│   │   │   │   │   ├── ManagedPayout._sol\n│   │   │   │   │   ├── ManagedRefund._sol\n│   │   │   │   │   ├── PullPaymentGrant._sol\n│   │   │   │   │   ├── Refundable._sol\n│   │   │   │   │   └── Signal._sol\n│   │   │   │   ├── factory\n│   │   │   │   │   ├── EtherVestingFactory.sol\n│   │   │   │   │   ├── IFactory.sol\n│   │   │   │   │   ├── MasterFactory.sol\n│   │   │   │   │   └── UnmanagedGrantFactory.sol\n│   │   │   │   ├── interfaces\n│   │   │   │   │   ├── IBaseGrant.sol\n│   │   │   │   │   ├── IDonorFund.sol\n│   │   │   │   │   ├── IDonorRefund.sol\n│   │   │   │   │   ├── IFunding.sol\n│   │   │   │   │   ├── IGrantee.sol\n│   │   │   │   │   ├── IGranteeAllocation.sol\n│   │   │   │   │   ├── IManager.sol\n│   │   │   │   │   ├── ISignal.sol\n│   │   │   │   │   └── ITrustedToken.sol\n│   │   │   │   ├── libraries\n│   │   │   │   │   ├── Percentages.sol\n│   │   │   │   │   └── abdk-libraries\n│   │   │   │   │       ├── ABDKMath64x64.md\n│   │   │   │   │       ├── ABDKMath64x64.sol\n│   │   │   │   │       ├── ABDKMathQuad.md\n│   │   │   │   │       ├── ABDKMathQuad.sol\n│   │   │   │   │       ├── LICENSE.md\n│   │   │   │   │       └── README.md\n│   │   │   │   ├── modules\n│   │   │   │   │   └── GranteeConstructor.sol\n│   │   │   │   └── storage\n│   │   │   │       ├── AbstractDonorFund.sol\n│   │   │   │       ├── AbstractManager.sol\n│   │   │   │       ├── BaseGrant.sol\n│   │   │   │       ├── Funding.sol\n│   │   │   │       └── Grantee.sol\n│   │   │   └── test\n│   │   │       └── GrantToken._sol\n│   │   ├── deployments.json\n│   │   ├── package.json\n│   │   ├── scripts\n│   │   │   ├── grantFactory.ts\n│   │   │   └── vestingFactory.ts\n│   │   ├── test\n│   │   │   ├── GranteeConstructor.spec.ts\n│   │   │   ├── UnmanagedStream.spec.ts\n│   │   │   └── shared\n│   │   │       ├── BaseGrantConstructor.ts\n│   │   │       ├── Funding.ts\n│   │   │       ├── GranteeConstructor.ts\n│   │   │       └── helpers.ts\n│   │   ├── truffle-config.js\n│   │   ├── tsconfig.json\n│   │   └── waffle.js\n│   ├── dapp\n│   │   ├── @types\n│   │   │   ├── base-58\n│   │   │   │   └── index.d.ts\n│   │   │   ├── fake-tag\n│   │   │   │   └── index.d.ts\n│   │   │   ├── ipfs-http-client\n│   │   │   │   └── index.d.ts\n│   │   │   └── react-vis\n│   │   │       └── index.d.ts\n│   │   ├── README.md\n│   │   ├── codegen.yml\n│   │   ├── package.json\n│   │   ├── public\n│   │   │   ├── android-chrome-192x192.png\n│   │   │   ├── android-chrome-256x256.png\n│   │   │   ├── apple-touch-icon.png\n│   │   │   ├── browserconfig.xml\n│   │   │   ├── favicon-16x16.png\n│   │   │   ├── favicon-32x32.png\n│   │   │   ├── favicon.ico\n│   │   │   ├── index.html\n│   │   │   ├── manifest.json\n│   │   │   ├── mstile-150x150.png\n│   │   │   ├── robots.txt\n│   │   │   └── safari-pinned-tab.svg\n│   │   ├── src\n│   │   │   ├── App.tsx\n│   │   │   ├── Routes.tsx\n│   │   │   ├── assets\n│   │   │   │   ├── chest.svg\n│   │   │   │   ├── discord.svg\n│   │   │   │   ├── done.svg\n│   │   │   │   ├── eth-crystal-wave.png\n│   │   │   │   ├── eth-icon.png\n│   │   │   │   ├── github.svg\n│   │   │   │   ├── header.jpg\n│   │   │   │   ├── loading.svg\n│   │   │   │   ├── navbar.jpg\n│   │   │   │   ├── success.svg\n│   │   │   │   ├── tile-background.svg\n│   │   │   │   ├── twitter.svg\n│   │   │   │   ├── waves.svg\n│   │   │   │   ├── whale.svg\n│   │   │   │   └── whaleLoader__data.json\n│   │   │   ├── components\n│   │   │   │   ├── AmountDisplay.tsx\n│   │   │   │   ├── ChartHint.tsx\n│   │   │   │   ├── CreateGrantForm.tsx\n│   │   │   │   ├── CreateGrantModal.tsx\n│   │   │   │   ├── DistributeFunds.tsx\n│   │   │   │   ├── DurationSelector.tsx\n│   │   │   │   ├── ErrorAlert.tsx\n│   │   │   │   ├── ErrorBoundary.tsx\n│   │   │   │   ├── ExploreHeader.tsx\n│   │   │   │   ├── FAQContent.tsx\n│   │   │   │   ├── FAQHeader.tsx\n│   │   │   │   ├── FundGrantModal.tsx\n│   │   │   │   ├── GrantChart.tsx\n│   │   │   │   ├── GrantChartPlot.tsx\n│   │   │   │   ├── GrantContent.tsx\n│   │   │   │   ├── GrantDetails.tsx\n│   │   │   │   ├── GrantFunder.tsx\n│   │   │   │   ├── GrantFunders.tsx\n│   │   │   │   ├── GrantHeader.tsx\n│   │   │   │   ├── GrantRecipient.tsx\n│   │   │   │   ├── GrantRecipients.tsx\n│   │   │   │   ├── GrantStream.tsx\n│   │   │   │   ├── GrantTextInput.tsx\n│   │   │   │   ├── GrantTile.tsx\n│   │   │   │   ├── GranteesInput.tsx\n│   │   │   │   ├── GrantsSorter.tsx\n│   │   │   │   ├── Header.tsx\n│   │   │   │   ├── InProgressStream.tsx\n│   │   │   │   ├── Layout.tsx\n│   │   │   │   ├── Leader.tsx\n│   │   │   │   ├── Leaderboard.tsx\n│   │   │   │   ├── Link.tsx\n│   │   │   │   ├── Loader.tsx\n│   │   │   │   ├── LoadingModal.tsx\n│   │   │   │   ├── LoadingPage.tsx\n│   │   │   │   ├── MethodSelector.tsx\n│   │   │   │   ├── NavBar.tsx\n│   │   │   │   ├── ProfileContent.tsx\n│   │   │   │   ├── ProfileHeader.tsx\n│   │   │   │   ├── ProfileImage.tsx\n│   │   │   │   ├── SearchBar.tsx\n│   │   │   │   ├── StopStreamModal.tsx\n│   │   │   │   ├── StreamTile.tsx\n│   │   │   │   └── SuccessModal.tsx\n│   │   │   ├── config.ts\n│   │   │   ├── contexts\n│   │   │   │   ├── SearchContext.tsx\n│   │   │   │   └── Web3Context.tsx\n│   │   │   ├── graphql\n│   │   │   │   ├── client.ts\n│   │   │   │   ├── fragments.ts\n│   │   │   │   ├── getGrant.ts\n│   │   │   │   ├── getGrants.ts\n│   │   │   │   ├── getLeaders.ts\n│   │   │   │   ├── getProfile.ts\n│   │   │   │   ├── getRank.ts\n│   │   │   │   ├── search.ts\n│   │   │   │   └── utils.ts\n│   │   │   ├── hooks\n│   │   │   │   └── useGraphHealth.ts\n│   │   │   ├── icons\n│   │   │   │   ├── ArrowDownIcon.tsx\n│   │   │   │   ├── CloseIcon.tsx\n│   │   │   │   ├── CopyIcon.tsx\n│   │   │   │   ├── FeaturedIcon.tsx\n│   │   │   │   ├── InNeedIcon.tsx\n│   │   │   │   ├── InfoIcon.tsx\n│   │   │   │   ├── LatestIcon.tsx\n│   │   │   │   ├── QuestionIcon.tsx\n│   │   │   │   ├── SearchIcon.tsx\n│   │   │   │   └── TrendingIcon.tsx\n│   │   │   ├── index.tsx\n│   │   │   ├── pages\n│   │   │   │   ├── create.tsx\n│   │   │   │   ├── explore.tsx\n│   │   │   │   ├── faq.tsx\n│   │   │   │   ├── grant\n│   │   │   │   │   ├── address.tsx\n│   │   │   │   │   ├── funders.tsx\n│   │   │   │   │   ├── recipients.tsx\n│   │   │   │   │   └── streams.tsx\n│   │   │   │   ├── leaderboard.tsx\n│   │   │   │   └── profile\n│   │   │   │       └── address.tsx\n│   │   │   ├── react-app-env.d.ts\n│   │   │   ├── theme.ts\n│   │   │   └── utils\n│   │   │       ├── 3box.ts\n│   │   │       ├── chart.ts\n│   │   │       ├── constants.ts\n│   │   │       ├── grants.ts\n│   │   │       ├── graphHealth.ts\n│   │   │       ├── helpers.ts\n│   │   │       ├── ipfs.ts\n│   │   │       ├── streams.ts\n│   │   │       └── types.ts\n│   │   └── tsconfig.json\n│   └── subgraph\n│       ├── README.md\n│       ├── abis\n│       │   ├── EtherVesting.json\n│       │   ├── EtherVestingFactory.json\n│       │   ├── UnmanagedGrant.json\n│       │   └── UnmanagedGrantFactory.json\n│       ├── config\n│       │   ├── kovan.json\n│       │   └── mainnet.json\n│       ├── package.json\n│       ├── schema.graphql\n│       ├── src\n│       │   ├── grants.ts\n│       │   ├── helpers.ts\n│       │   └── stream.ts\n│       └── subgraph.template.yaml\n├── tsconfig.base.json\n├── tsconfig.json\n└── yarn.lock\n```\n\nOwing to this dependency on Yarn Workspaces, open-grants can't be used with npm.\n\n## Available Scripts\n\nIn the project directory, you can run:\n\n### React App\n\n#### `yarn dapp:start`\n\nRuns the React app in development mode.\u003cbr\u003e\nOpen [http://localhost:3000](http://localhost:3000) to view it in the browser.\n\nThe page will automatically reload if you make changes to the code.\u003cbr\u003e\nYou will see the build errors and lint warnings in the console.\n\n#### `yarn dapp:test`\n\nRuns the React test watcher in an interactive mode.\u003cbr\u003e\nBy default, runs tests related to files changed since the last commit.\n\n#### `yarn dapp:build`\n\nBuilds the React app for production to the `build` folder.\u003cbr /\u003e\nIt correctly bundles React in production mode and optimizes the build for the best performance.\n\nThe build is minified and the filenames include the hashes.\u003cbr /\u003e\nYour app is ready to be deployed!\n\n### Subgraph\n\n#### `yarn subgraph:auth`\n\n```sh\nGRAPH_ACCESS_TOKEN=your-access-token-here yarn subgraph:auth\n```\n\n#### `yarn subgraph:codegen`\n\nGenerates AssemblyScript types for smart contract ABIs and the subgraph schema.\n\n#### `yarn subgraph:build`\n\nCompiles the subgraph to WebAssembly.\n\n#### `yarn subgraph:deploy-\u003cnetwork\u003e`\n\nDeploys the subgraph for particular network to the official Graph Node.\u003cbr/\u003e\n\n### Contracts\n\n#### `yarn contracts:build`\n\nCompiles the smart contracts for deployment.\n\n#### `yarn contracts:deploy-\u003cnetwork\u003e`\n\nDeploys the smart contracts for particular network.\u003cbr/\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraid-guild%2Fopen-grants","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraid-guild%2Fopen-grants","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraid-guild%2Fopen-grants/lists"}