Skip to content
Snippets Groups Projects
README.md 7.53 KiB
Newer Older
vjrj's avatar
vjrj committed
# Ğ1nkgo
Flojito Stillnet's avatar
Flojito Stillnet committed
![Ğ1nkgo logo](./assets/img/logo.png "Ğ1nkgo logo")
vjrj's avatar
vjrj committed

Ğ1nkgo (aka Ginkgo) is a lightweight Ğ1 wallet for Duniter v1 written in Flutter. The app allows
users to manage their Ğ1 currency on their mobile device using just a browser.
anfeichtinger's avatar
anfeichtinger committed

vjrj's avatar
vjrj committed
## Features
anfeichtinger's avatar
anfeichtinger committed

Flojito Stillnet's avatar
Flojito Stillnet committed
-   Introduction for beginners
-   Generation of Cesium wallet and persistence (if you refresh the page, it should display the same
    wallet address).
-   A point-of-sale device that generates a QR code for the public address and other QR codes with
    amounts (which lightweight wallets will understand).
-   Send Ğ1 transactions
-   Transactions history page and Balance with persistence to load last transactions on boot
-   Contact management and cache (to avoid too much API petitions)
-   Internationalization (i18n)
-   QR code reader
-   Import/export of your wallet
-   Automatic discover and selection of nodes, error recovery & retry
-   Customizable via [env file](https://git.duniter.org/vjrj/ginkgo/-/blob/master/assets/env.production.txt)
-   Inline tutorials
-   Pagination of transactions
-   Some contextual help (for example, by tapping on "Validity").
vjrj's avatar
vjrj committed

vjrj's avatar
vjrj committed
## Demo

vjrj's avatar
vjrj committed
This is a demo used for testing a development, please use a production server for stability:

vjrj's avatar
vjrj committed
[https://g1demo.comunes.net/](https://g1demo.comunes.net/)

vjrj's avatar
vjrj committed
## Ğ1nkgo in production

Flojito Stillnet's avatar
Flojito Stillnet committed
-   [https://g1nkgo.comunes.org](https://g1nkgo.comunes.org)
-   (...)
vjrj's avatar
vjrj committed

vjrj's avatar
vjrj committed
## Translations

First of all, you can contribute translating Ğ1nkgo to your language:

[https://weblate.duniter.org/projects/g1nkgo/g1nkgo/](https://weblate.duniter.org/projects/g1nkgo/g1nkgo/)
vjrj's avatar
vjrj committed
## Docker

mkdir -p ~/.ginkgo/nginx-conf
Flojito Stillnet's avatar
Flojito Stillnet committed
mkdir -p ~/.ginkgo/www
vjrj's avatar
vjrj committed

vjrj's avatar
vjrj committed
## Dev contributions

### Prerequisites
anfeichtinger's avatar
anfeichtinger committed

This repository requires [Flutter](https://flutter.dev/docs/get-started/install) to be installed and
present in your development environment.
anfeichtinger's avatar
anfeichtinger committed

anfeichtinger's avatar
anfeichtinger committed
Clone the project and enter the project folder.
anfeichtinger's avatar
anfeichtinger committed
```sh
vjrj's avatar
vjrj committed
git clone https://git.duniter.org/vjrj/ginkgo.git
vjrj's avatar
vjrj committed
cd ginkgo
anfeichtinger's avatar
anfeichtinger committed
```

Get the dependencies.
anfeichtinger's avatar
anfeichtinger committed
```sh
anfeichtinger's avatar
anfeichtinger committed
flutter pub get
anfeichtinger's avatar
anfeichtinger committed
```

### Launch all the tests

```sh
flutter test
```

vjrj's avatar
vjrj committed
### Build & deploy
#### Build for web

Use first this command to enable web support:
Flojito Stillnet's avatar
Flojito Stillnet committed

```sh
flutter config --enable-web
```

Then, build the app:

```sh
flutter build web --no-tree-shake-icons
Flojito Stillnet's avatar
Flojito Stillnet committed

NB: Add `--release` for a production build.

If you are using a web browser different from Chrome, you should first find your browser's executable (example for Brave):
Flojito Stillnet's avatar
Flojito Stillnet committed

```sh
which brave-browser
```

Then, you should add the executable path to the environment variable `CHROME_EXECUTABLE` by typing the following command:

```sh
export CHROME_EXECUTABLE=/usr/bin/brave-browser
```

NB: This is a temporary solution that will be reset when you close your terminal. If you want to make it permanent, you should add this variable to your `.bashrc` or `.zshrc` file:

```sh
nano ~/.bashrc
```

Then, add the following line at the end of the file:

```sh
export CHROME_EXECUTABLE=/usr/bin/brave-browser
```

Finally, reload your terminal:

```sh
source ~/.bashrc
Flojito Stillnet's avatar
Flojito Stillnet committed
```

#### Build and deploy to your server

```sh
rsync --progress=info2 --delete -aH build/web/ youruser@yourserver:/var/www/ginkgo/
```

vjrj's avatar
vjrj committed
### Run dev environment
Run the app via command line or through your development environment. It will run the default built version.
anfeichtinger's avatar
anfeichtinger committed
```sh
Flojito Stillnet's avatar
Flojito Stillnet committed
flutter run
anfeichtinger's avatar
anfeichtinger committed
```

NB: If there are more than one built version, there will be a prompt asking for the version you want to use (for example, web or desktop)

If you want to directly run a specific version (for example, the web version), use:

```sh
flutter run -d "chrome"
```

vjrj's avatar
vjrj committed
In order to do gva operations, you should disable cors in the flutter run config:

```
--web-browser-flag "--disable-web-security"
```

![cors disable](./assets/img/cors.png "CORS disabled")

### Pub packages used
anfeichtinger's avatar
anfeichtinger committed

This repository makes use of the following pub packages:

Flojito Stillnet's avatar
Flojito Stillnet committed
| Package                                                             | Version | Usage                                                 |
| ------------------------------------------------------------------- | ------- | ----------------------------------------------------- |
| [Durt](https://pub.dev/packages/durt)                               | ^0.1.6  | Duniter crypto lib                                    |
| [Bloc](https://pub.dev/packages/bloc)                               | ^8.1.0  | State management                                      |
| [Flutter Bloc](https://pub.dev/packages/flutter_bloc)               | ^8.1.1  | State management                                      |
| [Hydrated Bloc](https://pub.dev/packages/hydrated_bloc)             | ^9.0.0  | Persists Bloc state with Hive                         |
| [Equatable](https://pub.dev/packages/equatable)                     | ^2.0.5  | Easily compare custom classes, used for Bloc states\* |
| [Flutter Lints](https://pub.dev/packages/flutter_lints)             | ^2.0.1  | Stricter linting rules                                |
| [Path Provider](https://pub.dev/packages/path_provider)             | ^2.0.11 | Get the save path for Hive                            |
| [Flutter Displaymode](https://pub.dev/packages/flutter_displaymode) | ^0.5.0  | Support high refresh rate displays                    |
| [Easy Localization](https://pub.dev/packages/easy_localization)     | ^3.0.1  | Makes localization easy                               |
| [Hive](https://pub.dev/packages/hive)                               | ^2.2.3  | Platform independent storage.                         |
| [Url Launcher](https://pub.dev/packages/url_launcher)               | ^6.1.7  | Open urls in Browser                                  |
| [Ionicons](https://pub.dev/packages/ionicons)                       | ^0.2.2  | Modern icon library                                   |
vjrj's avatar
vjrj committed
### Easy Localization
anfeichtinger's avatar
anfeichtinger committed

vjrj's avatar
vjrj committed
To add translations, add it to `assets/translations` and enable it in `main.dart`. Also go
to [ios/Runner/Info.plist](./ios/Runner/Info.plist) and update the following code:
anfeichtinger's avatar
anfeichtinger committed

```
<key>CFBundleLocalizations</key>
<array>
vjrj's avatar
vjrj committed
  <string>en</string>
vjrj's avatar
vjrj committed
  <string>es</string>
vjrj's avatar
vjrj committed
  <string>fr</string>
  <string>ca</string>
anfeichtinger's avatar
anfeichtinger committed
</array>
```
vjrj's avatar
vjrj committed

vjrj's avatar
vjrj committed
``
anfeichtinger's avatar
anfeichtinger committed

## Troubleshooting

1. If you cannot build the app, try to run `flutter clean` and then `flutter pub get`.
2. If it still doesn't work, try to delete the `build` folder and run `flutter pub get` again.
3. At least, you can try to run `flutter pub upgrade` to upgrade all the dependencies.
4. And in last resort, you can try to delete the `pubspec.lock` file and run `flutter pub get` again.
5. Finally, there is a troubleshooting command in flutter: `flutter doctor -v`.

anfeichtinger's avatar
anfeichtinger committed
## Screenshots

Flojito Stillnet's avatar
Flojito Stillnet committed
| Wallet                                                           | Terminal card                                                          |
| ---------------------------------------------------------------- | ---------------------------------------------------------------------- |
vjrj's avatar
vjrj committed
| ![Card](./assets/img/card.png "A walled in form of credit card") | ![Terminal card](./assets/img/terminal.png "A terminal card metaphor") |
vjrj's avatar
vjrj committed

## Credits

vjrj's avatar
vjrj committed
### Translations

Flojito Stillnet's avatar
Flojito Stillnet committed
-   ast: dixebral
-   ca: calbasi
-   de: FW
-   eu: Anna Ayala Alcalá
vjrj's avatar
vjrj committed
-   fr: flodef, Hugo, Maaltir, poka and vincentux
Flojito Stillnet's avatar
Flojito Stillnet committed
-   gl: Vijitâtman
-   it: Anna Ayala Alcalá
-   nl: Maria Rosa Costa i Alandi
-   pt: Carlos Neto
Flojito Stillnet's avatar
Flojito Stillnet committed
-   Ğ1 logos from duniter.org
-   undraw intro images: https://undraw.co/license
-   Chipcard https://commons.wikimedia.org/wiki/File:Chipcard.svg under the Creative Commons
    Attribution-Share Alike 3.0 Unported license.
-   [POS svg from wikimedia](https://commons.wikimedia.org/wiki/File:Card_Terminal_POS_Flat_Icon_Vector.svg) CC-BY-SA 4.0
vjrj's avatar
vjrj committed

Thanks!

anfeichtinger's avatar
anfeichtinger committed
## License

vjrj's avatar
vjrj committed
GNU AGPL v3 (see LICENSE)