{"id":20169972,"url":"https://github.com/birthdayresearch/defichain-wallet","last_synced_at":"2025-04-04T11:11:40.200Z","repository":{"id":36953647,"uuid":"352711570","full_name":"BirthdayResearch/defichain-wallet","owner":"BirthdayResearch","description":"DeFiChain Wallet. The DeFi Blockchain Light Wallet for iOS, Android \u0026 Web.","archived":false,"fork":false,"pushed_at":"2024-10-28T10:03:46.000Z","size":151331,"stargazers_count":125,"open_issues_count":198,"forks_count":47,"subscribers_count":9,"default_branch":"main","last_synced_at":"2024-10-29T14:22:29.578Z","etag":null,"topics":["android","blockchain","decentralized","defi","dfi","finance","ios","native"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BirthdayResearch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":".github/governance.yml","roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-03-29T16:31:37.000Z","updated_at":"2024-08-27T07:31:44.000Z","dependencies_parsed_at":"2023-01-17T08:03:03.851Z","dependency_job_id":"2857e7f2-5f50-4f7b-a3f8-4464a054fa0a","html_url":"https://github.com/BirthdayResearch/defichain-wallet","commit_stats":{"total_commits":2229,"total_committers":37,"mean_commits":60.24324324324324,"dds":0.8272768057424854,"last_synced_commit":"5b6667515dad7d2ac88596f51ed3db058ba2f1b5"},"previous_names":[],"tags_count":428,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BirthdayResearch%2Fdefichain-wallet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BirthdayResearch%2Fdefichain-wallet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BirthdayResearch%2Fdefichain-wallet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BirthdayResearch%2Fdefichain-wallet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BirthdayResearch","download_url":"https://codeload.github.com/BirthdayResearch/defichain-wallet/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247166168,"owners_count":20894654,"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","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":["android","blockchain","decentralized","defi","dfi","finance","ios","native"],"created_at":"2024-11-14T01:15:04.667Z","updated_at":"2025-04-04T11:11:40.185Z","avatar_url":"https://github.com/BirthdayResearch.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![CI](https://github.com/BirthdayResearch/defichain-wallet/actions/workflows/ci.yml/badge.svg)](https://github.com/BirthdayResearch/defichain-wallet/actions/workflows/ci.yml)\n[![wallet](https://img.shields.io/endpoint?url=https://dashboard.cypress.io/badge/count/oqk3fk/main\u0026style=flat\u0026logo=cypress)](https://dashboard.cypress.io/projects/oqk3fk/runs)\n[![codecov](https://codecov.io/gh/DeFiCh/wallet/branch/main/graph/badge.svg?token=83SCBQBEVJ)](https://codecov.io/gh/DeFiCh/wallet)\n[![Maintainability](https://api.codeclimate.com/v1/badges/30297425fadcab8fbba4/maintainability)](https://codeclimate.com/github/DeFiCh/wallet/maintainability)\n\n\u003cdiv\u003e\n  \u003ca href=\"https://apps.apple.com/us/app/defichain-wallet/id1572472820\"\u003e\u003cimg width=\"130\" height=\"50\" src=\"/.github/images/app_store.svg\" alt=\"app store\" /\u003e\u003c/a\u003e\n  \u003ca href='https://play.google.com/store/apps/details?id=com.defichain.app'\u003e\u003cimg width=\"130\" height=\"50\" alt='Get it on Google Play' src='/.github/images/play_store.svg'/\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n# DeFiChain Wallet\n\nDeFi Blockchain Light Wallet for iOS, Android \u0026 Web.\n\n## Releases\n\nDeFiChain Wallet has 3 releases channel and unique environment for each of those channel. [`shared/environment.ts`](/shared/environment.ts) carries the environment state for those releases channel.\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eProduction\u003c/b\u003e\u003c/summary\u003e\n\nCreated by Expo Application Service and configured in [`eas.json`](/eas.json), it creates a native build\nwith [`release-publish.yml`](/.github/workflows/eas-publish.yml) workflow on type \"published\". Builds can only be\ntriggered by DeFiChain engineers, they are automatically uploaded into native app store for distribution.\n\nIn the production environment, only **MainNet** is available, and debugging is not enabled.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003ePreview\u003c/b\u003e\u003c/summary\u003e\n\nPreview builds are created by 2 workflow. First at each pull request\nvia [`expo-preview.yml`](/.github/workflows/expo-preview.yml) workflow, release are prefixed `pr-preview-`. Secondly\nat [`release-publish.yml`](/.github/workflows/eas-publish.yml) workflow on type \"prereleased\".\n\nIn the preview environment, all networks are available, and debugging is enabled.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eDevelopment\u003c/b\u003e\u003c/summary\u003e\n\nDevelopment builds are created on local machine and not triggered by any CI workflow.\n\nIn the development environment, all playground networks are available, and debugging is enabled.\n\n\u003c/details\u003e\n\n## Developing \u0026 Contributing\n\nThanks for contributing, appreciate all the help we can get. Feel free to make a pull-request, we will guide you along\nthe way to make it mergeable. Here are some of our documented [contributing guidelines](CONTRIBUTING.md).\n\nWe use `npm 7` for this project, it's required to set\nup [npm workspaces](https://docs.npmjs.com/cli/v7/using-npm/workspaces).\n\n```shell\nnpm install\n```\n\n### Project Structure\n\n```txt\nmobile-app/\n├─ .github/\n├─ app/\n│  ├─ components/\n│  ├─ contexts/\n│  ├─ hooks/\n│  ├─ middleware/\n│  ├─ screens/\n│  │  ├─ ...Navigator/\n│  │  └─ Main.tsx\n└─ cypress/\nshared/\n├─ assets/\n├─ store/\n└─ translations/\n   └─ languages/\n```\n\nDeFiChain Wallet project is structured with 3 core directories. Each pull request will likely carry significant changes\ninto those directories.\n\n| Directory              | Description                                                                     |\n| ---------------------- | ------------------------------------------------------------------------------- |\n| `/.github`             | GitHub Workflow for shift left automation                                       |\n| `/app/api`             | API and middlewares logic for application, for non-UI logic only                |\n| `/shared/assets`       | assets of the project that can be loaded at startup                             |\n| `/app/components`      | top level components for a atomic shared design language                        |\n| `/app/contexts`        | shared contexts for application, non-UI logic                                   |\n| `/app/hooks`           | shared hooks for application, for UI logic only                                 |\n| `/app/screens`         | screens hierarchy tree matching directory hierarchy tree                        |\n| `/shared/store`        | global state that is used at least more than once in screens, for UI logic only |\n| `/shared/translations` | various language translations                                                   |\n| `/cypress`             | E2E tested facilitated through web testing technologies                         |\n\n### Testing\n\nThere are 2 types of tests in DeFiChain Wallet.\n\n#### Unit Testing\n\nUnit testing is created to test each individual units/components of a software. As they are unit tests, they should be\nclosely co-located together with the unit. They follow the naming semantic of `*.test.ts` and placed together in the\nsame directory of the code you are testing.\n\nUnit tests are written for `/app/contexts`, `/app/api`, `/app/components`, `/app/screens` and `/app/store`. Code\ncoverage is collected for this.\n\n#### End-to-end Testing\n\nOn top of unit tests, end-to-end provides additional testing that tests the entire lifecycle of DeFiChain Wallet. All\ncomponents and screen are integrated together as expected for real use cases. As such test are written for real usage\nnarrative as a normal consumer would. They are placed in the `/cypress` directory, and we\nuse [Cypress](https://github.com/cypress-io/cypress) to facilitate the testing.\n\nCypress is a modern end-to-end testing framework for web. It uses a sequential jest like approach for testing with\nautomatic wait and retrofitted with many utilities for great testing quality of life. Utilities are further customized\nfor DeFiChain Wallet with our own construct. As cypress is for web only testing, we set up a web environment to run\nend-to-end testing together with a local [playground](https://github.com/DeFiCh/playground). React(-Native) is platform\nagnostic and that allow us to test with high confidence that the expected logic will follow the same flow in native.\n\nTo facilitate fast and ephemeral testing culture, we use [DeFi Playground](https://github.com/DeFiCh/playground). DeFi\nPlayground is a specialized testing blockchain isolated from MainNet for testing DeFi applications. It uses `regtest`\nunder the hood, you can `npm run playground` for the local playground environment or let it default to remote. Assets\nare not real, it can be minted by anyone. Blocks are generated every 3 seconds, the chain resets daily on remote\nplayground.\n\n`/app/screens/PlaygroundNavigator/*` contains various end user (cypress included) testing screen for debugging and setup\npurpose that can be accessed in development and preview environment. Code coverage is collected for this.\n\n### IntelliJ IDEA\n\nIntelliJ IDEA is the IDE of choice for writing and maintaining this library. IntelliJ's files are included for\nconvenience with basic toolchain setup but use of IntelliJ is totally optional.\n\n### Security issues\n\nIf you discover a security vulnerability in\n`DeFiChain Wallet`, [please see submit it privately](https://github.com/DeFiCh/.github/blob/main/SECURITY.md).\n\n## License \u0026 Disclaimer\n\nBy using `DeFiChain Wallet` (this repo), you (the user) agree to be bound by [the terms of this license](LICENSE).\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FDeFiCh%2Fwallet.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2FDeFiCh%2Fwallet?ref=badge_large)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbirthdayresearch%2Fdefichain-wallet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbirthdayresearch%2Fdefichain-wallet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbirthdayresearch%2Fdefichain-wallet/lists"}