Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • elmau/silkaj
  • Mr-Djez/silkaj
  • jbar/silkaj
  • clients/python/silkaj
  • Bernard/silkaj
  • cebash/silkaj
  • jytou/silkaj
  • c-geek/silkaj
  • vincentux/silkaj
  • jeanlucdonnadieu/silkaj
  • matograine/silkaj
  • zicmama/silkaj
  • manutopik/silkaj
  • atrax/silkaj
14 results
Select Git revision
Show changes
Showing
with 2492 additions and 0 deletions
---
date:
created: 2023-11-22
authors:
- moul
categories:
- minor
---
- Add support for Python v3.12 and drop support for Python v3.7
---
date:
created: 2025-04-22
authors:
- moul
categories:
- release
---
# Silkaj v0.12.0 release
I am pleased to announce the stable release of Silkaj version 0.12.0
In this article, the most important changes are highlighted. if you are looking for a comprehensive list of changes, check out the changelog.
## Introduction
The original plan changed, a difficult choice has been made to work on a second development cycle tied to v1 ecosystem, because v2 ecosystem was not fully ready.
It was worth it for Silkaj project’s growth with huge improvements not tied to v1 nor v2 ecosystems.
It was difficult to go in a slightly different direction, since all contributors’ energy was directed to v2 ecosystem development.
Ğcli took over the role as the first CLI client on v2 ecosystem. Silkaj made little progress on v2 ecosystem.
But, as for v0.11.0, this release also paves the way for implementations based on v2 ecosystem.
This release comes with the account storage implementation which greatly improves the authentication and revocation files management.
A new documentation website has been set up.
`money history` command features the comma-separated value (CSV) output file format option.
The command line interface has seen great improvements such as a usage with colors, a better error output, the shell completion, and a small help option.
Ğ1 monetary license have been updated, and DeathReaper is now released as part of Silkaj.
Last but not least, Silkaj comes with minor network optimisations and Python 3.13 support.
This release is the last planned major release with Duniter v1/BMA support.
<!-- more -->
## Account storage: authentication and revocation files storage improvements
Account storage has been implemented to store authentication and revocation files in a common place organized per account and per currency.
Therefore, authentication and revocation files generated by Silkaj would no longer lay anywhere on the operating system.
By default, they used to be saved to and read from current working directory.
This wrong practice is now behind us.
In addition the files are now stored with `600` permissions, meaning that only the Unix user who created them are allowed to read and edit them.
Furthermore, a consequent change has been made to restrict the storage to only WIF and EWIF authentication file formats defined in the approved [RFC#13](https://git.duniter.org/documents/rfcs/-/blob/master/rfc/0013_Duniter_Encrypted_Wallet_Import_Format.md).
It improves the security, by focusing the effort on a single authentication file format for v1 ecosystem.
v2 ecosystem might bring in an additional file format, which could bring additional confusions.
Therefore, it is no longer possible to authenticate with all the implemented methods.
The authentication is now restricted to WIF or EWIF authentication files format stored in the account storage.
`authentication` command the only one still allowing all the implemented authentication methods as input in order to perform the migration.
To migrate to this new authentication method stored into the account storage, you have to run follow command:
```
silkaj --account <account_name> authentication <--auth-method>
```
Based on this new authentication way, you can run commands using (E)WIF authentication from the account storage, i.e.:
```
silkaj --account <account_name> money balance
```
For further details, check out the [account storage documentation](../../usage/account_storage.md).
## New documentation website
[Previous website](https://git.duniter.org/websites/silkaj_website), created in 2019 by Attilax, was based on a solution not maintainable over time.
Its technology couldn’t scale up and integrate markdown documentation from the repository.
Therefore, its content quickly became outdated.
In 2020, an [other website solution](https://git.duniter.org/websites/doc_silkaj) based on VuePress was suggested by ManUtopiK which uses markdown documentation.
This solution wasn’t selected and didn’t went productive mainly because I did not have the full control over it.
The fact that VuePress is based on JavaScript technologies is a downside to me.
![MkDocs Material icon](../../images/mkdocs-material-favicon.png)
I found out about [MkDocs](https://www.mkdocs.org/) and the great [Material theme](https://squidfunk.github.io/mkdocs-material/).
This documentation software based on Python is widely used in Python community.
I decided to go with this solution which ticked all the check-boxes.
The initial structure has been set up within the repository.
Following integration plugins have been set up: Click command line interface documentation, test coverage, GitLab issue and merge requests links which is useful in the changelog.
A blog contains the releases announcements.
Continuous deployment has been set up to automatically build and deploy documentation updates to GitLab Pages.
Mike, a system which allows to display the documentation for multiple major releases of Silkaj have been set up.
A drop-down allows to select the documentation dedicated to a version. This should, at least, be helpful for Silkaj v0.1x and v0.2x which will greatly differ.
Finally, a [page](../../contributing/documentation.md) describes how to contribute to the website.
## CSV output on `money history` command
```
silkaj money history <pubkey> --csv-file history.csv
```
This command will save the account’s money movements history in the specified file in CSV format (comma-separated value).
You can then operate the data with a spreadsheet software.
The output looks as follow:
```{..yaml .no-copy}
Date,Issuers/Recipients,Amounts Ğ1,Amounts UDĞ1,Reference
2024-10-24 16:26:55,8ve5XAupWT9NMRbXUnZvQwBCFoq5DQ18bBdjGZciw3wm:Dpf,30.96,2.7992766726943943,Oignons fantastiques merci
2024-10-24 01:34:28,8jWwwyRZMrRsidfVpsGdQGC5zd8pbRDTHrYDwf2kDcrL:9YE,0.25,0.022603978300180832,Dividende Epicerie
```
## Command line interface
### Rich-click
The command line interface now has a nicer usage interface and looking with colors (missing below) thanks to [`rich-click`](https://github.com/ewels/rich-click), a Click add-on.
```{..yaml .no-copy}
silkaj --help
Usage: silkaj [OPTIONS] COMMAND [ARGS]...
╭─ Basic options ─────────────────────────────────────────────────────────────╮
│ --help -h Show this message and exit. │
│ --version -v Show the version and exit. │
╰─────────────────────────────────────────────────────────────────────────────╯
╭─ Endpoint and currency specification ───────────────────────────────────────╮
│ --endpoint -ep TEXT Without specifying this option, the default endpoint │
│ reaches Ğ1 currency on its official endpoint: │
│ https://g1.duniter.org. --endpoint allows to specify │
│ a custom endpoint following `<host>:<port>/<path>` │
│ format. `port` and `path` are optional. In case no │
│ port is specified, it defaults to 443. NOTE: This │
│ argument is mutually exclusive with arguments: │
│ [gtest]. │
│ --gtest -gt Uses official ĞTest currency endpoint: │
│ https://g1-test.duniter.org NOTE: This argument is │
│ mutually exclusive with arguments: [endpoint]. │
╰─────────────────────────────────────────────────────────────────────────────╯
╭─ Account and authentication specification ──────────────────────────────────╮
│ --account -a TEXT Account name used in storage │
│ `$HOME/.local/share/silkaj/$currency/$account_name` │
│ for authentication and revocation. │
│ --password -p TEXT EWIF authentication password. If you use this option, │
│ prefix the command with a space so the password is │
│ not saved in your shell history. In case of an │
│ encrypted file, password input will be prompted. │
╰─────────────────────────────────────────────────────────────────────────────╯
╭─ Options ───────────────────────────────────────────────────────────────────╮
│ --display -d Display the generated document before sending it │
│ --dry-run -n By-pass the licence and confirmation. Do not send the │
│ document, but display it instead │
╰─────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ──────────────────────────────────────────────────────────────────╮
│ about Display program information │
│ authentication Generate and store authentication file │
│ blockchain Blockchain related commands │
│ checksum Generate checksum out of a passed pubkey or an │
│ authentication method. Checks if the passed checksum is │
│ valid. │
│ license Display Ğ1 monetary license │
│ money Money management related commands │
│ wot Web-of-Trust related commands │
╰─────────────────────────────────────────────────────────────────────────────╯
```
A better error output:
```{..yaml .no-copy}
silkaj -a test wot revocation verify
Usage: silkaj wot revocation verify [OPTIONS]
Try 'silkaj wot revocation verify -h' for help
╭─ Error ─────────────────────────────────────────────────────────────────────╮
│ /home/moul/.local/share/silkaj/g1/test/revocation.txt not found for account │
│ name: test │
╰─────────────────────────────────────────────────────────────────────────────╯
```
### Shell completion
This information has been missed, but Click v8.0 comes with an integrated shell completion feature.
Therefore, it can be set from Silkaj v0.10.0 onward. To set up the shell completion follow the [shell completion documentation](../../install.md#shell-completion).
### Small help option
In addition to the `--help` option, it is now possible to pass the small help option `-h` to all sub-commands.
## Renaming transfer comment to reference
The free "comment" field in Duniter v1’s Transaction document has been extensively used in a slightly wrong manner.
Banks use _Payment reference_ term for this field which can be used to refer to a contract number for instance.
It has been decided to rename it in order for the users to think about using it the appropriate way.
The fields in `money transfer` and `money history` user interface has been renamed to "reference".
The important change here is `--comment/-c` option from `money transfer` has been renamed to `--reference/-ref`.
## `wot status` command displays precise expiration date of received certifications
For better monitoring of our certifications and to maintain our membership, `wot status` command now displays precise expiration dates of received certifications.
Previously they were computed and were very imprecise with three months of inaccuracy!
Silkaj v0.11:
```{..yaml .no-copy}
│───────────────────│──────────────────│────────────────│──────────────────│
│ received_expire │ received │ sent │ sent_expire │
│═══════════════════│══════════════════│════════════════│══════════════════│
│ December 3, 2024 │ Matograine ✔ │ vit │ October 1, 2024 │
│ October 11, 2025 │ HugoTrentesaux ✔ │ Zheny │ October 26, 2025 │
│ December 19, 2025 │ BenoitLavenier ✔ │ HugoTrentesaux │ August 17, 2026 │
│ December 21, 2025 │ nicoleC ✔ │ Matograine │ August 17, 2026 │
│ July 9, 2026 │ vit ✔ │ │ │
│ August 20, 2026 │ tuxmain ✔ │ │ │
│ August 20, 2026 │ kapis │ │ │
│───────────────────│──────────────────│────────────────│──────────────────│
```
Silkaj v0.12:
```{..yaml .no-copy}
│───────────────────│──────────────────│────────────────│──────────────────│
│ received_expire │ received │ sent │ sent_expire │
│═══════════════════│══════════════════│════════════════│══════════════════│
│ February 21, 2025 │ Matograine ✔ │ vit │ October 1, 2024 │
│ January 8, 2026 │ HugoTrentesaux ✔ │ Zheny │ October 26, 2025 │
│ March 21, 2026 │ BenoitLavenier ✔ │ HugoTrentesaux │ August 17, 2026 │
│ March 23, 2026 │ nicoleC ✔ │ Matograine │ August 17, 2026 │
│ October 16, 2026 │ vit ✔ │ │ │
│ November 28, 2026 │ tuxmain ✔ │ │ │
│ January 28, 2025 │ kapis ✘ │ │ │
│───────────────────│──────────────────│────────────────│──────────────────│
✔: Certification written in the blockchain
✘: Pending certification, deadline treatment
```
The expiration date of sent certifications are still computed and should not be really taken into account.
They were not changed since this is a bit more complex to do with BMA API, and also less important than the received certifications.
No additional time should be spent on v1 ecosystem, but should instead go to v2 ecosystem :wink:
## Ğ1 monetary license update
German and Catalan new translations have been added to Ğ1 monetary license.
Spanish and Italian translations have been improved.
The French copy has been updated to v0.3 which includes rules on how to change the document.
## DeathReaper is now released as part of Silkaj
DeathReaper used to be maintained on a separated `git` branch and only distributed via containers.
This was made because its main dependency `pydiscourse` is not packaged in Debian repositories.
This could be a reason to make an update of Silkaj Debian package unnecessary harder.
A solution has been set up to activate `wot exclusions` command only once `pydiscourse` dependency is installed.
This way, Debian packaging is still possible without having to package `pydiscourse`.
Therefore, DeathReaper has been merged on `main` branch.
Check out [DeathReaper documentation](../../usage/deathreaper.md) on how to install and use it.
## BMA optimisations
On BMA API, the Web-of-Trust related requests now have an argument to specify whether we passed a public key or an identity username.
Silkaj is specifying this argument which provides faster replies to the queries.
## Python versions support
This release introduces official support for Python v3.12 and v3.13.
[Pendulum](https://pendulum.eustace.io/) datetime library was lacking maintenance and had no Python v3.13 support.
I replaced Pendulum with [Arrow](https://arrow.readthedocs.io/).
Just before Silkaj release, Pendulum v3.1 has been released with Python 3.13 support.
I reverted back to Pendulum usage.
`request_url()` has been fixed in [DuniterPy v1.2.1](https://git.duniter.org/clients/python/duniterpy/-/blob/main/CHANGELOG.md#v121-26th-march-2025) to support Python 3.13.
On the other hand, Python v3.7 and v3.8 support have been dropped.
## Development Environment
Ruff replaces `black`, `autoflake`, `pylint`, `isort` and `pyupgrade` pre-commit hooks.
The latter is written in Rust and is blazing faster compared to the latter.
When publishing a release, the pipeline will automatically create a release page on Silkaj repository.
## Removals
With this release being the last one planned with Duniter v1/BMA support, some commands do not make sense anymore with v2 Substrate ecosystem.
Therefore `blockchain verify` has been removed from this release.
`checksum` and `blockchain difficulty` commands will be removed out of next release.
## Outlook
v0.20.0 is planned to be the next release.
It will be focus onto adding support for Duniter v2 based on Substrate framework.
Duniter v1/BMA support will be dropped from Silkaj v0.2x branch, while v0.1x will be on maintenance mode until Ğ1 currency switches productively to Duniter v2 ecosystem.
No new features will be implemented on v0.1x branch.
v0.20 development cycle might take some time, therefore it is expected to get preview releases.
The migration to v2 ecosystem is planned as follow: The network layer will be adapted to use following APIs: Substrate RPC, and Subsquid indexer via its Hasura GraphQL API.
Then, it is planned to migrate current features and commands.
Finally, in a following release new v2 related features will be implemented.
We are looking forward for a better experience with Ğ1 currency migration to v2 ecosystem based on Substrate framework and Subsquid indexer.
Once the porting to Duniter v2 Substrate reaches an interesting point, a v0.30.0 release is planned to implement a GUI based on [Textual](https://www.textualize.io/) framework which run in the terminal, and can also run in a web browser.
---
date:
created: 2017-03-27
authors:
- moul
categories:
- release
---
# Silkaj v0.2.0 release
This release introduce the `transaction` feature, the `amount` command to check out the balance of a wallet, and the initial authentication support.
<!-- more -->
## New money management commands
- `transaction` command with its main options: `--amountDU`, `--amount`, `--output`, `--comment`
- `amount` command to display account balance
## Authentication
- `generate_auth_file` command to generate seed authentication file
- authentication methods implementation: scrypt, seed, seed authentication file with `--auth-scrypt`, `--auth-seed`, `--auth-file` options
## Under the hood
- function to post request onto BMA API
- function to sign document
- function to check public key format and checksum
## Others
- In tables, the columns were randomly ordered. The columns in the table are now ordered thanks to `OrderedDict`.
- Output information on the drop-down menu with Argos (GNOME Shell extension)
## Thanks
A huge thanks to Tortue who brought a huge contribution to this release.
Thanks mmuman.
---
date:
created: 2017-04-17
authors:
- moul
categories:
- release
---
# Silkaj v0.3.0 release: Let's send money!
This release comes with user experience enhancements on the `transaction` command and the authentication in general. A new `id` command allows to look-up for identities.
Efforts were put into improving the installation process.
<!-- more -->
## Transactions
`transaction` command enhancements:
- ask for confirmation: #27, !30.
- confirmation table containing transaction informations: !38
- don't prompt `scrypt` parameters. See `Authentication` § below.
## New command `id` to search for pubkey/identity
- new command `id` to search identities with pubkey or id: !29.
## Tutorial to install a Python environment
- pyenv installation tutorial: #23, !40.
## Authentication
- new authentication method: WIF. For future paper wallet feature: !45
- Don't prompt scrypt parameters at authentication. Use default ones: #39, !43
## Builds
- with Pyinstaller: #5.
## Other
- Ability to sort the table of `network` command: !33, !37.
- Change license from GNU GPLv3 to AGPLv3.
- Code formatting with `pep8`: !31.
Thanks Tortue and jytou.
---
date:
created: 2018-01-28
authors:
- moul
categories:
- release
---
# Silkaj v0.4.0 release
A new `wot` command allows to display received and sent certifictaions of an identity.
Additionnal user experience enhancements have been added to the transaction feature.
It is now possible to check the balance of multiple public keys and get a sum of the balances.
<!-- more -->
## New `wot` command to display received and sent certifications
You can now explore the Web-of-Trust by displaying in a table the received and sent certifications of an identity.
```{..yaml .no-copy}
silkaj wot moul
moul (GfKER…) from block 0-E3B0C44298FC1…
received 23 and sent 27 certifications:
| received | sent |
|----------------+------------------|
| Alfybe | gerard94 |
| cuckooland | jeanferreira |
| Loda | elois |
| jeanferreira | Galuel |
| BenoitLavenier | smyds |
| smyds | CaizohanFerreira |
| gpsqueeek | gpsqueeek |
| fbuland | inso |
| gerard94 | vit |
| SebasC | Thatoo |
| Thatoo | William |
| inso | cuckooland |
| Paulart | greyzlii |
| vincentux | mathieuBize |
| greyzlii | cgeek |
| Mententon | PierreYves |
| PierreYves | mmu_man |
| paidge | OlivierAuber |
| cgeek | paidge |
| Nicolas | Alfybe |
| jeangraine | 1000i100 |
| pafzedog | dig |
| Zheny | BenoitLavenier |
| | MystraSam |
| | jeangraine |
| | Zheny |
| | roodinux |
```
## Transaction command provides a better UX
The `transaction` command will beforehand check that the comment and recipient’s public key are in right format before it actually prompt for the authentication.
## Balance of multiple public keys
With the `amount` command, you can now pass multiple public keys `:` separated. The balance will be displayed for each of them, and a sum will be displayed at the end.
```{..yaml .no-copy}
silkaj amount --pubkeys GfKERHnJTYzKhKUma5h1uWhetbA8yHKymhVH2raf2aCP:fyqm24NzN7D2Lr4ssrNMacsctymQ2NzBqH9YUYuxSmy
Requested default node: <g1.duniter.org:443>
Total amount of: GfKERHnJTYzKhKUma5h1uWhetbA8yHKymhVH2raf2aCP
----------------------------------------------------------------
Total Relative = 206.23 UD g1
Total Quantitative = 2064.41 g1
Total amount of: fyqm24NzN7D2Lr4ssrNMacsctymQ2NzBqH9YUYuxSmy
----------------------------------------------------------------
Total Relative = 89.72 UD g1
Total Quantitative = 898.08 g1
Total amount of: Total
----------------------------------------------------------------
Total Relative = 295.95 UD g1
Total Quantitative = 2962.49 g1
```
## Installation
- [Installation documentation](https://github.com/duniter/silkaj#install)
## Certification feature
- [Crowdfunding](https://gannonce.duniter.org/#/announce/916a521d-9131-4c78-9c0b-d8cf2b78ac6e)
---
date:
created: 2018-05-21
authors:
- moul
categories:
- release
---
# Silkaj v0.5.0 release: Let’s certify!
For the [eleventh Libre Currency Meeting (RML)](https://rml.creationmonetaire.info/), I am pleased to announce Silkaj v0.5.0 release.
![](../../images/silkaj_logo.png){ width="200" }
This new release comes with the long awaited certification feature, `wot` command now displays expiration dates of certifications, a new logo, and the repository migration to GitLab. This release includes 35 new commits done during four months of developments.
<!-- more -->
## Certification feature
Now, you can certify other identities (send certification document to the network):
```{..yaml .no-copy}
silkaj cert jytou --auth-scrypt -p g1-test.duniter.org:443
In which language would you like to display Ğ1 license [en/fr]? fr
Do you approve Ğ1 license [yes/no]? yes
Please enter your Scrypt Salt (Secret identifier):
Please enter your Scrypt password (masked):
Using default values. Scrypt parameters not specified or wrong format
Scrypt parameters used: N: 4096, r: 16, p: 1
╒════════╤══════════════════════════════════════════════╤════╤══════════════════════════════════════════════╕
│ Cert │ From │ –> │ To │
├────────┼──────────────────────────────────────────────┼────┼──────────────────────────────────────────────┤
│ ID │ moul-test │ –> │ jytou │
├────────┼──────────────────────────────────────────────┼────┼──────────────────────────────────────────────┤
│ Pubkey │ 5B8iMAzq1dNmFe3ZxFTBQkqhq4fsztg1gZvxHXCk1XYH │ –> │ 2pyPsXM8UCB88jP2NRM4rUHxb63qm89JMEWbpoRrhyDK │
╘════════╧══════════════════════════════════════════════╧════╧══════════════════════════════════════════════╛
Do you confirm sending this certification? [yes/no]: yes
Certification successfully sent.
```
Certification command will display Ğ1’s license in your web browser or in your terminal within a `less` in case you are running a headless computer.
## `wot` command now displays expiration dates of certifications
The table listing the received and sent certifications of an identity, now displays the expirations dates of the certifications.
```{..yaml .no-copy}
silkaj wot moul
moul (GfKER…) from block #0-E3B0C44298FC1…
received 24 and sent 27 certifications:
| received_expire | received | sent | sent_expire |
|-------------------+----------------+------------------+---------------|
| 2019-03-09 | cuckooland | cgeek | 2019-03-09 |
| 2019-03-09 | Paulart | elois | 2019-03-09 |
| 2019-03-09 | vincentux | mathieuBize | 2019-03-09 |
| 2019-03-09 | BenoitLavenier | gerard94 | 2019-03-09 |
| 2019-03-09 | Loda | smyds | 2019-03-09 |
| 2019-03-09 | smyds | CaizohanFerreira | 2019-03-09 |
| 2019-03-09 | gpsqueeek | gpsqueeek | 2019-03-09 |
| 2019-03-09 | fbuland | inso | 2019-03-09 |
| 2019-03-09 | jeanferreira | vit | 2019-03-09 |
| 2019-03-09 | gerard94 | Thatoo | 2019-03-09 |
| 2019-03-09 | SebasC | cuckooland | 2019-03-09 |
| 2019-03-09 | Thatoo | William | 2019-03-09 |
| 2019-03-09 | inso | greyzlii | 2019-03-09 |
| 2019-03-09 | Alfybe | Galuel | 2019-03-09 |
| 2019-03-12 | greyzlii | jeanferreira | 2019-03-09 |
| 2019-03-18 | Mententon | PierreYves | 2019-03-09 |
| 2019-04-02 | PierreYves | mmu_man | 2019-03-09 |
| 2019-04-03 | paidge | OlivierAuber | 2019-03-13 |
| 2019-05-24 | cgeek | paidge | 2019-03-13 |
| 2019-06-10 | Nicolas | Alfybe | 2019-03-19 |
| 2019-07-04 | jeangraine | 1000i100 | 2019-03-26 |
| 2019-07-23 | pafzedog | dig | 2019-03-31 |
| 2019-08-07 | Zheny | BenoitLavenier | 2019-04-22 |
| 2020-03-17 | HugoTrentesaux | MystraSam | 2019-06-16 |
| | | jeangraine | 2019-06-22 |
| | | Zheny | 2019-06-25 |
| | | roodinux | 2019-07-01 |
```
## Logo
Silkaj now has a logo thanks to [Attilax](https://forum.monnaie-libre.fr/u/attilax/). You can find it [in this repository](https://git.duniter.org/communication/g1/-/tree/master/logos/logiciels?ref_type=heads). I choose the black and white one. Here is [a crowdfunding to free the logo](https://gannonce.duniter.org/#/announce/d82696ce-03f5-4e13-9316-20c94f00f76d).
## Repository migration to GitLab
I migrated the repository to our GitLab instance and archived the GitHub repository:
- [https://git.duniter.org/clients/python/silkaj](https://git.duniter.org/clients/python/silkaj)
## Website
[Silkaj's website](https://silkaj.duniter.org) has been published among other websites on our GitLab instance.
New revisions will be automatically published thanks to GitLab Pages. Here you can find the repository:
[https://git.duniter.org/websites/silkaj_website/](https://git.duniter.org/websites/silkaj_website/)
## Install
- [Install documentation](https://git.duniter.org/clients/python/silkaj#install)
## Future
You can have a look at the next [v0.6.0 milestone](https://git.duniter.org/clients/python/silkaj/-/milestones/7) to have an idea of what could be included into next Silkaj development cycle.
## Helps
This whole work has been done voluntarily aside a dept-salary’s paid job.
If you like what have been achieve, please contribute, by giving libre units to its only and main developer or to [Duniter’s developers](https://demo.cesium.app/#/app/wot/78ZwwgpgdH5uLZLbThUQH7LKwPgjMunYfLiCfUCySkM8/) to improve our little world.
---
date:
created: 2018-11-18
authors:
- moul
categories:
- release
---
# Silkaj v0.6.0 release: Let’s install
Six months after the previous release, I am pleased to announce Silkaj v0.6.0 for the [twelfth Libre Currency Meeting](https://rml.creationmonetaire.info/).
This release comes with 124 commits including eased installation procedures, multi-recipients transaction, `wot` command view improvements, scrypt authentication set by default, network performances, and much more.
<!-- more -->
## User installation eased via PyPI/pip
Installing Silkaj has been a burning issue: Only Fedora users could install Silkaj with the Pyinstaller binary, since that’s where I was building it. The others, would have had to install a development environment with `pyenv` and the Python dependencies in order to make it work.
Thanks to Cebash’s work. Now, we are able to install Silkaj with `pip`, the Python package manager, which retrieves the package from Python Package Indexer (PyPI):
```bash
pip3 install silkaj --user
```
## Development environment with Pipenv
We switched from `pyenv+pip` to Pipenv because Pipenv offers a better development environment.
## Transaction
### Multi-recipients transaction
Thanks to cgeek, Silkaj is the first client, besides [Remuniter](https://remuniter.cgeek.fr/#/), able to send multi-recipients transaction.
This means, that we will be able to transfer money to several recipients within a single transaction.
To do so, we have to pass recipients’ public keys separated with a colon `:` operator, as follow:
```{..yaml .no-copy}
silkaj tx --auth-file --amount 2 --gtest --output \
DpJse2t7fyH9LC9FTMQHsMGZToXLmVQ8EV2eP47ipHDC:7KL2QXXFULDpsQY4UdSr5oEVx6rFE6oxeagRdkCX35bf
╒═══════════════════════════╤══════════════════════════════════════════════╕
│ pubkey’s amount before tx │ 15375.33 ĞTest │
├───────────────────────────┼──────────────────────────────────────────────┤
│ tx amount (unit) │ 4.0 ĞTest │
├───────────────────────────┼──────────────────────────────────────────────┤
│ tx amount (relative) │ 0.0104 UD ĞTest │
├───────────────────────────┼──────────────────────────────────────────────┤
│ pubkey’s amount after tx │ 15371.33 ĞTest │
├───────────────────────────┼──────────────────────────────────────────────┤
│ from (pubkey) │ 5B8iMAzq1dNmFe3ZxFTBQkqhq4fsztg1gZvxHXCk1XYH │
├───────────────────────────┼──────────────────────────────────────────────┤
│ from (id) │ moul-test │
├───────────────────────────┼──────────────────────────────────────────────┤
│ to (pubkey) │ DpJse2t7fyH9LC9FTMQHsMGZToXLmVQ8EV2eP47ipHDC │
├───────────────────────────┼──────────────────────────────────────────────┤
│ to (id) │ vit │
├───────────────────────────┼──────────────────────────────────────────────┤
│ to (pubkey) │ 7KL2QXXFULDpsQY4UdSr5oEVx6rFE6oxeagRdkCX35bf │
├───────────────────────────┼──────────────────────────────────────────────┤
│ to (id) │ cuckooland │
├───────────────────────────┼──────────────────────────────────────────────┤
│ comment │ │
╘═══════════════════════════╧══════════════════════════════════════════════╛
Do you confirm sending this transaction? [yes/no]: yes
Generate Transaction:
- From: 5B8iMAzq1dNmFe3ZxFTBQkqhq4fsztg1gZvxHXCk1XYH
- To: DpJse2t7fyH9LC9FTMQHsMGZToXLmVQ8EV2eP47ipHDC
- To: 7KL2QXXFULDpsQY4UdSr5oEVx6rFE6oxeagRdkCX35bf
- Amount: 4.0
Transaction successfully sent.
```
Notes:
- Each pubkey will receive the same amount of money. The amount per recipients can not be specified yet.
- The purpose of this feature is to remunerate Duniter developers.
### Display confirmation panel
Before the transaction is actually sent, the balance before and after the transaction is displayed in the summary table. Check the example above.
### Two wrappers
- [Multi-recipients transfers and automation](../../usage/multi-recipients_transfers_and_automation.md)
- [Transaction generator written in Shell](https://gitlab.com/jytou/tgen)
## WoT view improvements
- Display of the certifications stock
- Membership expiration due to the membership expiration or due the fact that the threshold of minimal number of certifications is about to be crossed by certifications expirations
- Identity status
```{..yaml .no-copy}
moul-test (5B8iM…) from block 167750-0000A51F…
received 8 and sent 15/100 certifications:
| received_expire | received | sent | sent_expire |
|-------------------+---------------------+-------------------+---------------|
| 2018-11-21 | esprit ✔ | MeluaTest | 2018-11-19 |
| 2018-12-15 | GAS2000 ✔ | esprit | 2018-11-21 |
| 2018-12-19 | matograine-G1Test ✔ | GAS2000 | 2018-12-10 |
| 2018-12-20 | scanlegentil ✔ | guwop | 2018-12-10 |
| 2019-01-29 | vit ✔ | matograine-G1Test | 2019-02-04 |
| 2019-02-07 | Elois ✔ | Elois | 2019-02-07 |
| 2019-02-15 | cuckooland ✔ | Vincentest | 2019-02-07 |
| 2019-02-16 | piaaf31GT ✔ | cuckooland | 2019-02-07 |
| | | vit | 2019-02-07 |
| | | scanlegentil | 2019-02-07 |
| | | cgeek | 2019-02-07 |
| | | isawien45 | 2019-02-07 |
| | | aguy-dev | 2019-02-07 |
| | | piaaf31GT | 2019-02-14 |
| | | kimamila | 2019-02-15 |
Membership expiration due to certification expirations: 2018-12-20
member: True
Membership document expiration: 2018-12-31
Sentry: True
outdistanced: False
```
## Scrypt authentication by default
Previously, the authentication method had to be specified.
Now, when no authentication method is specified, two inputs will be prompted in order to authenticate with the scrypt method.
You can still specify other authentication methods, with following options:
```{..yaml .no-copy}
Authentication:
for amount, transaction, certification, and generate_auth_file commands
- Scrypt is the default authentication method with 4096,16,1 as default values
you can specify others values specifying following parameters: -n <N> -r <r> -p <p>
- Seed: --auth-seed
- File: --auth-file [--file=<path file>], './authfile' will be taken if there is no path specified
- WIF: --auth-wif
```
## Ğtest
A new `--gtest` option has been added to ease the connection to Ğ1-test currency network for testing purposes.
It uses the official node: https://g1-test.duniter.org.
## Network performances
With this update, Silkaj is retrieving information only once. Before, data was retrieved every time it was needed. Now, once the information has been fetched, it is kept into the memory and reused.
## Python 3.7 support
Silkaj has been tested with Python 3.7. Results show that there has been no issues.
Python 3.7 has been set as the current version in Pipenv development environment.
## New commands
### License
Originally built for the certification feature, the `license` command allows the consultation of the Ğ1’s license at any time given.
### About
A new command displays information about Silkaj:
```{..yaml .no-copy}
silkaj about
@@@@@@@@@@@@@
@@@ @ @@@
@@@ @@ @@@@@@ @@. silkaj 0.6.0
@@ @@@ @@@@@@@@@@@ @@,
@@ @@@ &@@@@@@@@@@@@@ @@@ Powerfull and lightweight command line client
@@ @@@ @@@@@@@@@# @@@@ @@(
@@ @@@@ @@@@@@@@@ @@@ @@ Built in Python for Duniter’s currencies: Ğ1 and Ğ1-Test
@@ @@@ @@@@@@@@ @ @@@ @@
@@ @@@ @@@@@@ @@@@ @@ @@ Authors: moul, tortue, jytou, cebash, cgeek
@@ @@@@ @@@ @@@@@@@ @@ @@
@@ @@@@* @@@@@@@@@ @# @@ Website: https://silkaj.duniter.org
@@ @@@@@ @@@@@@@@@@ @ ,@@
@@ @@@@@ @@@@@@@@@@ @ ,@@ Repository: https://git.duniter.org/clients/python/silkaj
@@@ @@@@@@@@@@@@ @ @@*
@@@ @@@@@@@@ @ @@@ License: GNU AGPLv3
@@@@ @@ @@@,
@@@@@@@@@@@@@@@
```
## Logo
![](../../images/silkaj_logo.png){ width="200" }
Silkaj’s logo, designed by Attilax, is now [fully funded](https://gannonce.duniter.org/#/announce/d82696ce-03f5-4e13-9316-20c94f00f76d)!
## Thanks
Special thanks to Moul, Cebash, cgeek, and Attilax.
Thanks to vit, Inso, vincentux, and jardin.
______________________________________________________________________
## Install
- [Install documentation](https://git.duniter.org/clients/python/silkaj#install)
## Future development cycles
- [v0.7.0](https://git.duniter.org/clients/python/silkaj/-/milestones/10) will be focused on refactoring Silkaj in order to be ported to [DuniterPy](https://git.duniter.org/clients/python/duniterpy/) usage, a more robust API implementation. This mean sharing a common code with Sakia.
- [v0.8.0](https://git.duniter.org/clients/python/silkaj/-/milestones/8) will add new features based on DuniterPy such as new authentication methods as well as being allowed to send the remaining Web-of-Trust documents: identity publication, membership publication and renewal, and revocation.
- [v0.9.0](https://git.duniter.org/clients/python/silkaj/-/milestones/9) Let’s see what come to this milestone.
## Contribute
If you are pleased with the achievements, please contribute by reporting bugs, contributing to the code or giving [Duniter’s developers](https://g1.duniter.fr/#/app/wot/78ZwwgpgdH5uLZLbThUQH7LKwPgjMunYfLiCfUCySkM8/) libre units to improve our little world.
---
date:
created: 2018-12-10
authors:
- moul
categories:
- release
---
# Silkaj v0.6.1 release
I am pleased to announce Silkaj v0.6.1 release. This release comes with a major bug fix for transactions with big amounts. It also come with the ability to renew certifications.
<!-- more -->
## Bug fix in intermediaries transactions
When sending a transaction with a big amount, there is a limit of forty sources per transaction allowed by Ğ1 protocol. In order to reach a big amount of money with only forty sources, the clients proceed beforehand to change operations to merge more money into fewer sources.
Since the multi-recipients feature, a regression was introduced, the intermediaries transaction’s recipient were wrong and sent to the recipient of the transaction.
This release fixes it!
## Certification renewal
Duniter v1.7 now allows to renew certification before their expiration.
This protocol modification is now live on the Ğ1-Test currency since [December 2018](https://forum.duniter.org/t/g1-test-dans-les-choux-rejouage-des-certifications/4192/271?u=moul) in order to check that everything is working fine.
You can already renew certifications on the Ğ1-Test currency.
This protocol modification will be published on the Ğ1 currency when ready.
Before processing the certification, Silkaj will check if the certification can be renewed.
In the case of Ğ1, you will be able to renew the certification two months after the previous one. And, on the Ğ1-test, after twelve and half a day.
## Tests on Windows
Silkaj have been installed for the first time on the Windows platform via `pip`. It works!
There is still fixes needed in order to have Silkaj to work properly.
## Thanks
Thanks to Moul, Galuel, and Bernard.
______________________________________________________________________
## Upgrade
```bash
pip3 install silkaj --user --upgrade
```
- [Install with `pip` documentation](../../install.md) for more details.
---
date:
created: 2019-05-22
authors:
- moul
categories:
- release
---
# Silkaj v0.7.0 release: DuniterPy, click, transactions history, Debian, website
Six months after the [previous major release](https://forum.duniter.org/t/silkaj-v0-6-0-release-let-s-install/4858/1), I am pleased to announce the release of Silkaj v0.7.0 for the [thirteenth Free Currency Meeting](http://rml13.creationmonetaire.info/).
This release comes with 157 commits, the migration to DuniterPy and Click, the display of transaction history, the packaging into Debian Buster and Ubuntu 19.04, and a new website.
Those two migrations bring few new features as the goal was to migrate to better libraries while keeping the same functionalities.
<!-- more -->
## DuniterPy migration
![](../../images/duniterpy_logo.png){ width="150" }
[DuniterPy](https://git.duniter.org/clients/python/duniterpy) is a Python library which implements methods to request from and send information to the Duniter nodes. It also has authentication methods to sign documents such as transactions and certifications. DuniterPy was initially written for the Sakia client. Silkaj and Sakia are now sharing the same common code. The migration to DuniterPy was tough, but it was worth it: It will allow the implementation of new features in future versions.
There were many challenges: keeping the same functionalities, making Silkaj’s code asynchronous, and replacing the authentication and the network code by the ones implemented in DuniterPy. One struggling issue was that the [intermediaries transactions were no longer working](https://git.duniter.org/clients/python/silkaj/issues/178), because, the equality method of the transaction output source was not implemented, as they used to be stored in a string and are now stored into an `OutputSource` object. So, the equality had to be implemented.
Check-out [DuniterPy versions from v0.50.0 to v0.54.1](https://forum.duniter.org/t/duniterpy-evolution-de-la-bibliotheque-python/5127) to follow the evolution of DuniterPy. These versions were specially made for Silkaj. In the future, following functionalities are planned: sending identity, membership, and revocation documents, the usage of authentication methods implemented in DuniterPy, and the usage of the planned GVA API.
## Click migration
[![](../../images/click_logo.png){ width="200" }](https://click.palletsprojects.com/)
Since Debian Buster freeze was going to happen very soon and [`commandlines`](https://github.com/chrissimpkins/commandlines) library wasn’t packaged into Debian, the migration to [Click](https://click.palletsprojects.com/) “_Command Line Interface Creation Kit_” had to be done quickly. I decided to migrate to this really nice library, since it is much more maintained, comes with a better code, and is less buggy. Here you can see the new command line interface:
```{..yaml .no-copy}
Usage: silkaj [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
-v, --version Show the version and exit.
-p, --peer TEXT Default endpoint will reach Ğ1 currency with
`https://g1.duniter.org` endpoint. Custom endpoint
can be specified with `-p` option followed by
<domain>:<port>
-gt, --gtest ĞTest: `https://g1-test.duniter.org` endpoint
--auth-scrypt, --scrypt Scrypt authentication: default method
--nrp TEXT Scrypt parameters: defaults N,r,p: "4096,16,1"
-af, --auth-file Authentication file. Defaults to: './authfile'
--file TEXT Path file specification with '--auth-file'
[default: authfile]
--auth-seed, --seed Seed hexadecimal authentication
--auth-wif, --wif WIF and EWIF authentication methods
Commands:
about Display program information
argos Display currency information formatted for Argos or BitBar
authfile Generate authentication file
balance Get wallet balance
blocks Display blocks: default: 0 for current window size
cert Send certification
diffi Display the current Proof of Work difficulty level to generate...
history Display transaction history
id Find corresponding identity or pubkey from pubkey or identity
info Display information about currency
license Display Ğ1 license
net Display network view
tx Send transaction
wot Check received and sent certifications and consult the...
```
The command line interface has changed. General parameters (options and arguments) should be placed in between the command and the sub-command. Specific parameters should be placed after the sub-command.
```{..yaml .no-copy}
silkaj --gtest --auth-file tx --amount 5 --output <pubkey>
```
For instance, in previous command `--gtest` and `--auth-file` are general parameters, where `--amount` and `--output` are specific parameters separated by `tx` sub-command.
You can display general parameters with `silkaj --help` and specific parameters with `silkaj tx --help` for instance.
## CLI changes
- `issuers`, `amount`, and `generate_auth_file` commands have been respectively renamed to `blocks`, `balance`, and `authfile`.
- The long sub-commands `certification`, `transaction`, `network`, `identities` have been removed. Now the small ones have to be used: `cert`, `tx`, `net`, `id`.
- `blocks` defaults to `0` which stands for the current windows size and now has a limit of 5.000 blocks as set by BMA.
- `balance`: public keys separator does no longer use colons `:`, it uses spaces instead.
- Additionally, there are the new smaller authentication options: `--scrypt`, `-af`, `--seed`, `--wif`, without the `--auth` prefix.
You might discover other breaking changes. For more details regarding these changes check out [this list](https://git.duniter.org/clients/python/silkaj/issues/77#breaking-changes).
## Transaction history
It is now possible to display the transactions history of a wallet:
```{..yaml .no-copy}
silkaj history GfKERHnJTYzKhKUma5h1uWhetbA8yHKymhVH2raf2aCP --uids
Transactions history from: moul GfKERHnJTYzKhKUma5h1uWhetbA8yHKymhVH2raf2aCP
Current balance: 17296.86 Ğ1, 1717.66 UD Ğ1 on the 2019-05-12 13:32:30
+---------------------+------------------------+------------+--------------+-----------------------+
| Date | Issuers/Recipients | Amounts Ğ1 | Amounts UDĞ1 | Comment |
+=====================+========================+============+==============+=======================+
| 2019-04-23 21:31:27 | CvrMiUhAJpNyX5sdAy | 100.700 | 10 | Silkaj sur Ubuntu c |
| | | | | est une tres belle |
| | | | | surprise. Merci ! |
+---------------------+------------------------+------------+--------------+-----------------------+
| 2019-04-22 18:59:34 | HugoTrentesaux - | 100.700 | 10 | Merci pour Duniter |
| | 55oM6F9ZE2MGi | | | v1.7.16 ! |
+---------------------+------------------------+------------+--------------+-----------------------+
| 2019-04-15 14:35:15 | ArthurLutz - | 200 | 19.861 | pour les paquets |
| | 4C4jsvxmFQBoH | | | yunohost ! |
+---------------------+------------------------+------------+--------------+-----------------------+
| 2019-04-15 10:40:11 | SonqoZEfZXHDBxi4Kx | 30.210 | 3 | [G1SMS] VIREMENT 300 |
| | | | | LOVE (30.21 G1) |
+---------------------+------------------------+------------+--------------+-----------------------+
| 2019-04-15 08:04:58 | fbuland - | 200 | 19.861 | merci resolution bug |
| | 4bD7J3uA5pH2N | | | |
+---------------------+------------------------+------------+--------------+-----------------------+
| 2019-04-13 16:37:20 | Vivakvo - | 100.700 | 10 | Merci pour Duniter |
| | 4wUdA1dx1NCZU | | | v1.7.16 ! |
+---------------------+------------------------+------------+--------------+-----------------------+
| 2019-04-12 08:59:04 | C4pUj26pVgPVPLEZ96 | 50 | 4.965 | Bravo pour le bug |
+---------------------+------------------------+------------+--------------+-----------------------+
| 2019-04-08 16:48:04 | 73ArdqtsQScypV35H4 | 100.700 | 10 | Merci pour Duniter |
| | | | | v1.7.16 ! |
+---------------------+------------------------+------------+--------------+-----------------------+
| 2019-04-08 15:58:06 | Lucas - HY2nJUyxpzyrw | 100.700 | 10 | Merci pour Duniter |
| | | | | v1.7.16 ! |
+---------------------+------------------------+------------+--------------+-----------------------+
| 2019-04-08 15:10:25 | BenoitLavenier - | 100.700 | 10 | Merci pour Duniter |
| | 38MEAZN68Pz1D | | | v1.7.16 ! |
+---------------------+------------------------+------------+--------------+-----------------------+
| 2019-04-08 14:11:00 | 4sfQWXBBy811CCDV6J | 100.700 | 10 | 1.7.16 |
+---------------------+------------------------+------------+--------------+-----------------------+
| 2019-04-07 22:59:00 | elois - D9D2zaJoWYWve | 100 | 9.930 | merci pour le debug |
| | | | | de duniter et du |
| | | | | process de release |
| | | | | aussi |
+---------------------+------------------------+------------+--------------+-----------------------+
| 2019-04-07 21:51:41 | Matograine - | 100.700 | 10 | V1.7.16 |
| | CmFKubyqbmJWb | | | |
+---------------------+------------------------+------------+--------------+-----------------------+
| 2019-04-07 01:18:44 | cgeek - 2ny7YAdmzReQx | 1007 | 100 | Duniter v1.7.16 |
+---------------------+------------------------+------------+--------------+-----------------------+
```
## Debian and Ubuntu package
[![](../../images/debian_logo.svg){ width="100" }](https://packages.debian.org/buster/silkaj)
Silkaj v0.6.5 was packaged for Debian Buster v10, which is planned te be released on July 6th 2019. This package greatly benefits all Debian-based distributions. Moreover, Silkaj was also added into Ubuntu 19.04 repository, which was published on March 2019. For more details check-out [where Silkaj was included into the Debian-based distributions](https://repology.org/project/silkaj/versions). Silkaj v0.6.5 now comes with Click migration, auto-completion, and bug fixes, however it does not include DuniterPy migration and v0.7.0 features.
You can install Silkaj with following command:
```
sudo apt install silkaj
```
This work have been made possible thanks to jonas, a Debian developer.
## Proof-of-Work difficulty level
Since we are using DuniterPy which includes WebSocket management, this latter can be used to improve the network connection. Previously, Silkaj was sending queries every five seconds to check if a new block was added to the blockchain. Now, Silkaj gets a notification every time a new block is appended to the blockchain. This improvement dramatically reduces traffic network.
To better monitor the network, the header was improved and now displays current block’s number and its date of generation:
```{..yaml .no-copy}
Current block: n°219981, generated on the 2019-05-12 14:36:35
Generation of next block n°219982 possible by at least 31/44 members
Common Proof-of-Work difficulty level: 89, hash starting with `00000[0-6]*`
```
## New website
[![](../../images/silkaj_website_screenshot.png)](https://silkaj.duniter.org/)
At the beginning of the project, a simple [website](https://silkaj.duniter.org/) was made.
Since then, Silkaj evolved and have brought new features which should be reflected on the website.
More content was added to the website, which now has three pages: a main one, one for the features and the other one for the installation.
Attilax worked to give the website a new black style, to make it looks like a terminal.
He also translated it in French which makes the website available in two languages.
## Thanks
Attilax, Bernard, cebash, jonas, matograine, vit
______________________________________________________________________
## Install and upgrade
- [Install and upgrade documentation](../../install.md)
## Future development cycles
Future releases will add new features based on DuniterPy such as [new authentication methods](https://git.duniter.org/clients/python/silkaj/issues/173) as well as being able to send WoT documents: [identity publication](https://git.duniter.org/clients/python/silkaj/issues/90), [membership publication and renewal](https://git.duniter.org/clients/python/silkaj/issues/88), and [revocation](https://git.duniter.org/clients/python/silkaj/issues/89). It is also planned to use features brought by Click usage, to set-up a CI/CD pipeline, and locking the code with tests.
## Contribute
If you are pleased with the achievement, please contribute by reporting bugs, contributing to the code or giving to [Duniter developers](https://demo.cesium.app/#/app/wot/78ZwwgpgdH5uLZLbThUQH7LKwPgjMunYfLiCfUCySkM8/) libre units to improve our little world.
## Share on social networks
- [Mastodon](https://framapiaf.org/@inso/102143656918574377)
---
date:
created: 2019-05-29
authors:
- moul
categories:
- minor
---
- Bug fix transaction generation
---
date:
created: 2019-06-25
authors:
- moul
categories:
- minor
---
- Fix result of the multiplication of the amount passed as float for the transaction command
---
date:
created: 2019-07-25
authors:
- moul
categories:
- minor
---
- #239: Bug fix release for broken successives transactions due to wrongly calculated pending inputs:
- remove already used inputs: restore previous behaviour which haven’t been kept the same during the migration
- `enumerate()` wrongly moved to the non appropriate `for` loop
---
date:
created: 2020-01-22
authors:
- moul
categories:
- minor
---
- #273: Fix broken PubSec authfile importation regex
Thanks to matograine for this bugfix and the release!
---
date:
created: 2020-01-23
authors:
- moul
categories:
- minor
---
- #276: Publish on PyPI with the previous method: `setup.py`, `wheel`, and `twine`.
- `silkaj` binary does not get installed to `$HOME/.local/bin` via Poetry
---
date:
created: 2020-01-24
authors:
- moul
categories:
- minor
---
- Update DuniterPy to v0.55.1 in order to have the PubSec regex fixed
---
date:
created: 2020-10-18
authors:
- moul
categories:
- release
---
# Silkaj v0.8.0 release
## Introduction
The Silkaj team is pleased to announce the release of Silkaj 0.8.0. A new team member joined us at the beginning of this development cycle: Matograine. We highly appreciate his commitment, his improvements of the transaction code and his work on the checksum.
This release comes along with a number of new features and improvements.
The most important of them are highlighted in this article, if you are looking for a comprehensive list of changes, check out the changelog.
<!-- more -->
Version 0.8.0 was done in 145 commits, and features seven major improvements:
1. `membership`: We developed a command to allow users to send membership documents.
1. Identity choice: We can now manually choose the desired identity among other identities.
1. Multi-recipients transactions: Users can simultaneously send a different amount of Ğ1 to different recipients.
1. Display improvements for `tx` and `balance`: For a better overview, we modified the `tx` table and added a `balance` table.
1. Public key checksum display and verification: For security purposes, Silkaj displays and verifies the checksum.
1. `verify`: We set up a command to check whether a block is valid.
1. Dev Env: We set up a solid development environment for Poetry, CI/CD, and Tests.
______________________________________________________________________
- A. Poetry: We migrated to Poetry.
- B. CI/CD: We set up a pipeline to run automatic jobs.
- C. Tests: We started to write tests.
## 1. Membership
After the transaction and the certification commands, the much awaited `membership` command is now available.
Users can send their first membership request to be a certified member of the Ğ1 community. As certified members have to renew their membership each year, this command allows to send the renewal application in question. It displays the expiration date of the current membership and indicates the identification blockstamp of the user. In the event a user forgets that they have already sent a membership request, a pop up displays if there is a pending membership request in the mempool.
```{ ..yaml .no-copy }
silkaj membership
Please enter your Scrypt Salt (Secret identifier):
Please enter your Scrypt password (masked):
You will be asked to approve Ğ1 license. Would you like to display it? [y/N]: n
Do you approve Ğ1 license? [y/N]: y
╒════════════════════════════════════════════════════╤═══════════════════════════════════════════════════╕
│ Expiration date of current membership │ in 3 weeks │
├────────────────────────────────────────────────────┼───────────────────────────────────────────────────┤
│ Number of pending membership(s) in the mempool │ 1 │
├────────────────────────────────────────────────────┼───────────────────────────────────────────────────┤
│ Pending membership documents will expire │ in 1 year │
├────────────────────────────────────────────────────┼───────────────────────────────────────────────────┤
│ User Identifier (UID) │ moul │
├────────────────────────────────────────────────────┼───────────────────────────────────────────────────┤
│ Public Key │ GfKERHnJTYzKhKUma5h1uWhetbA8yHKymhVH2raf2aCP:J1k │
├────────────────────────────────────────────────────┼───────────────────────────────────────────────────┤
│ Block Identity │ 0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B93… │
├────────────────────────────────────────────────────┼───────────────────────────────────────────────────┤
│ Identity published │ March 8, 2017 │
├────────────────────────────────────────────────────┼───────────────────────────────────────────────────┤
│ Expiration date of new membership │ in 1 year │
├────────────────────────────────────────────────────┼───────────────────────────────────────────────────┤
│ Expiration date of new membership from the mempool │ in 2 months │
╘════════════════════════════════════════════════════╧═══════════════════════════════════════════════════╛
Do you confirm sending a membership document for this identity? [y/N]:
```
## 2. Identity choice
When using the commands `wot`, `cert`, and `membership`, Silkaj used to select the first identity on the list. As this can lead to fishing, we added a new feature to pick the identity of your choice. Now, you can use the `uid` and the `pubkey` to certify an identity and study its status in the Web of Trust.
Please note that identities can have the same user identifier and the same public key.
```{ ..yaml .no-copy }
silkaj -gt wot moul
| id | uid | pubkey | timestamp |
|------+-----------+--------------------------------------------------+-----------------------|
| 00 | moul1 | WULdRTxspGdJzrs4vpZsWLGWsu37DjqoHyhGDFr5amh:45s | 614118-00000EE8DFC0F… |
| 01 | moul2 | WULdRTxspGdJzrs4vpZsWLGWsu37DjqoHyhGDFr5amh:45s | 614227-00000ED689406… |
| 10 | moul1 | 3rp7ahDGeXqffBQTnENiXEFXYS7BRjYmS33NbgfCuDc8:DFQ | 614227-00000ED689406… |
| 20 | moul-test | 5B8iMAzq1dNmFe3ZxFTBQkqhq4fsztg1gZvxHXCk1XYH:baK | 167750-0000A51FF952B… |
Which identity would you like to select (id)?:
```
## 3. Transactions: multi-recipients & different amounts of Ğ1
Thanks to Matograine, users can now send different amounts of Ğ1 to multiple recipients in the same document.
Working on this feature offered us the opportunity to rethink and clean up the CLI and the code related to the `tx` command.
However, further efforts are required to build a more solid code base foundation.
<br />
v0.8.0 comes with three **breaking changes** and four small options:
- `--output` was renamed to `--recipient`
- recipients public key are splits with the option `--recipient` instead of a colon character.
- The public key's checksum separator `!` is being replaced by the colon.
- small options have been introduced:
- `-a/--amount`
- `-d/--amountUD`
- `-r/--recipient`
- `-c/--comment`
<br />
The follow examples illustrates the change operated on the CLI.
With the previous version of Silkaj, the following procedure was operated to send one unit to `pubkey1` and `pubkey2`:
```{ ..yaml .no-copy }
silkaj tx --amount 1 --output <pubkey>1!<checksum1>:<pubkey2>!<checksum2>
```
With the current version of Silkaj, the following procedures are operated to send one unit to `pubkey1` and two units to `pubkey2`:
```
silkaj tx --amount 1 --recipient <pubkey1>:<checksum1> --amount 2 --recipient <pubkey2>:<checksum2>
```
With small options:
```
silkaj tx -a 1 -r <pubkey1>:<checksum1> -a 2 -r <pubkey2>:<checksum2>
```
In the case one amount is passed, the same amount will be send to the passed recipients. The `--allSources` option is only working with one recipient.
## 4. Display improvements for `tx` and `balance`
We merged the relative and absolute amounts into one cell. This applies to the cells: initial balance, total transaction amount, balance after the transaction, and individual amounts.
To send a different amount of Ğ1 to multi-recipient proceed following:
```{ ..yaml .no-copy }
silkaj tx -d 1 -d 2 \
-r CrznBiyq8G4RVUprH9jHmAw1n1iuzw8y9FdJbrESnaX7 \
-r d88fPFbDdJXJANHH7hedFMaRyGcnVZj9c5cDaE76LRN:FVm \
-c "Test different amounts to two different recipients"
╒════════════════════════════════════════════╤════════════════════════════════════════════════════╕
│ Initial balance (unit|relative) │ 2207757.83 ĞTest | 145.63 UD ĞTest │
├────────────────────────────────────────────┼────────────────────────────────────────────────────┤
│ Total transaction amount (unit|relative) │ 45480.0 ĞTest | 3.0 UD ĞTest │
├────────────────────────────────────────────┼────────────────────────────────────────────────────┤
│ Balance after transaction (unit|relative) │ 2162277.83 ĞTest | 142.63 UD ĞTest │
├────────────────────────────────────────────┼────────────────────────────────────────────────────┤
│ From (pubkey) │ 5B8iMAzq1dNmFe3ZxFTBQkqhq4fsztg1gZvxHXCk1XYH:baK │
├────────────────────────────────────────────┼────────────────────────────────────────────────────┤
│ From (id) │ moul-test │
├────────────────────────────────────────────┼────────────────────────────────────────────────────┤
│ To (pubkey) │ CrznBiyq8G4RVUprH9jHmAw1n1iuzw8y9FdJbrESnaX7:8Sj │
├────────────────────────────────────────────┼────────────────────────────────────────────────────┤
│ To (id) │ Elois │
├────────────────────────────────────────────┼────────────────────────────────────────────────────┤
│ Amount (unit|relative) │ 15160.0 ĞTest | 1.0 UD ĞTest │
├────────────────────────────────────────────┼────────────────────────────────────────────────────┤
│ To (pubkey) │ d88fPFbDdJXJANHH7hedFMaRyGcnVZj9c5cDaE76LRN:FVm │
├────────────────────────────────────────────┼────────────────────────────────────────────────────┤
│ To (id) │ matograine-G1Test │
├────────────────────────────────────────────┼────────────────────────────────────────────────────┤
│ Amount (unit|relative) │ 30320.0 ĞTest | 2.0 UD ĞTest │
├────────────────────────────────────────────┼────────────────────────────────────────────────────┤
│ Comment | Test different amounts to two different recipients │
╘════════════════════════════════════════════╧════════════════════════════════════════════════════╛
Do you confirm sending this transaction? [yes/no]:
```
The balance of a given public key is now displayed in a table. Bellow you can find an example of such a display.
```{ ..yaml .no-copy }
silkaj balance 78ZwwgpgdH5uLZLbThUQH7LKwPgjMunYfLiCfUCySkM8
╒═════════════════════════════════════╤══════════════════════════════════════════════════╕
│ Balance of pubkey │ 78ZwwgpgdH5uLZLbThUQH7LKwPgjMunYfLiCfUCySkM8:4VT │
├─────────────────────────────────────┼──────────────────────────────────────────────────┤
│ Blockchain (unit|relative) │ 94322.48 Ğ1 | 9220.18 UD Ğ1 │
├─────────────────────────────────────┼──────────────────────────────────────────────────┤
│ Pending transaction (unit|relative) │ 100.0 Ğ1 | 9.78 UD Ğ1 │
├─────────────────────────────────────┼──────────────────────────────────────────────────┤
│ Total amount (unit|relative) │ 94422.48 Ğ1 | 9229.96 UD Ğ1 │
├─────────────────────────────────────┼──────────────────────────────────────────────────┤
│ Total relative to M/N │ 13.35 x M/N │
╘═════════════════════════════════════╧══════════════════════════════════════════════════╛
```
## 5. Pubic key checksum display, verification, and checksum command
For security purposes, Silkaj now displays the checksum associated with the public key, and verifies it when passed to a command.
If a public key or an authentication method is passed to the newly introduced `checksum` command, the later generates the associated checksum to the public key. if a public key and a checksum are passed, Silkaj displays whether the checksum is valid or not.
## 6. `verify`
We introduced the new `verify` command to check whether the signatures of the blocks of the blockchain are valid since there was a bug in the cryptography library of Duniter.
Cf [Forum topic](https://forum.duniter.org/t/duniter-utilise-une-ancienne-version-buggee-de-tweetnacl-que-faire/6633) and [Duniter ticket](https://git.duniter.org/nodes/typescript/duniter/-/issues/1390)
To verify blocks proceed following:
```{ ..yaml .no-copy }
silkaj verify
Processing blocks verification [####################################] 100%
Within 0-342803 range, blocks with a wrong signature: 15144 31202 85448 87566 90830 109327 189835 199172 221274 253582
```
## 7. Development Environment
### A. Poetry
![Poetry logo](../../images/poetry-logo.svg){: style="height:120px;width:120px"}
We migrated the packaging and the dependency management tool from Pipenv to Poetry since Pipenv has been quite problematic recently and is also more suitable for larger projects.
In comparison, [Poetry](https://python-poetry.org/) is a well thought and stable tool which has been released by the end of 2019. In the former development environment, we had to define the dependencies twice in the `requirements.txt`, `setup.{py,cfg}`, `Pipenv` files. Poetry, however, supports the `pyproject.toml` file standardized by the Python project and is able to define the dependencies at once.
If you would like to install Silkaj for development purposes, please follow [this tutorial](../../contributing/install_poetry.md). You may also interested by checking the newly introduced contribution process documentation `CONTRIBUTING.md`.
### B. Automatic container generation
We set up an [automated pipeline to generate containers](https://git.duniter.org/docker/python3/poetry/) for all supported Python versions: 3.5, 3.6, 3.7, and 3.8. These containers are based on official Python containers, which use Debian Buster Slim. On top of that, Poetry, `libsodium`, and other development tools are installed to continually check and test Silkaj in its pipeline. Since DuniterPy uses the same containers, it also profits from this automated container generation.
### C. CI/CD pipelines
Based on the containers set out above, a continuous integration and delivery pipeline has been set up to automatically run:
- Checks: format, build,
- Tests on all supported Python versions,
- Release publication automation on PyPI and PyPI test.
![Silkaj pipeline](../../images/v0.8_pipeline.png)
## 7. Tests
We started to write tests to ensure that all features of Silkaj are still functional when changing the code.
However, in order to have all Silkaj commands fully tested, further efforts are required.
During this development cycle, the test coverage raised from 37% to 69% and Silkaj is now covered by more than hundred tests.
## Outlook
Silkaj is compatible with a range of Python versions. Currently, it can be used with Python 3.5, 3.6, 3.7, and 3.8. v0.8.x will be the last releases with Python 3.5 support. In v0.9.0, we will support Python 3.6, 3.7, 3.8, and 3.9.
Since there is a deadline for packaging Silkaj and DuniterPy into Debian Bullseye (v11), we are putting all our efforts into the upcoming packaging. As for the coming version, DeathReaper, the `excluded` command, for which the crowdfunding has been completed, and the newly revamped `info` command will be stabilized and automatic tests will be written.
ManUtopiK revamped [Silkaj website](https://git.duniter.org/websites/silkaj_website/) in which you can look up all the presentations, the major features and documentations related to Silkaj. We are working on integrating the website into the project.
For further details check out the presentations of the [RML14](https://rml14.monnaielibreoccitanie.org/). The oral presentations are in French and the slides in English:
- [Moul's: How to contribute to Silkaj](https://git.duniter.org/moul/slides/#rml14-toulouse-28th-november-2019)
- [Matograine's: Envoyer des transactions exotiques avec Silkaj](https://www.youtube.com/watch?v=Fbwy5ovEkSg)
### Thanks
moul, matograine
---
date:
created: 2020-11-30
authors:
- moul
categories:
- minor
---
- #358, !152: Update DuniterPy to v0.58.1, to support `libnacl` v1.7.2
Thanks matograine for your first release \\o/
---
date:
created: 2021-03-24
authors:
- moul
categories:
- rc
---
## Call for testing Silkaj v0.9.0rc
Hello everyone!
We are pleased to publish a release candidate of Silkaj v0.9.0, and we would be happy to receive feedback before releasing it as a stable version.
<!-- more -->
To install this pre-release version from PyPI, use this command:
```
pip3 install silkaj --user --upgrade --pre
```
Please test it globally, and check the changelog which contains the changes which happen during this development cycle.
Pay a special attention to the transaction part where a part of the algorithm changed.
There are new options on following commands:
```{ ..yaml .no-copy }
silkaj history --full-pubkey
silkaj --dry-run cert
silkaj --dry-run/--display membership
```
Dry-run and display options are defined as general options, and only defined for this three cases for this release.
# Tests
Manual tests help us making sure everything works fine for different cases.
Here are some tests we think are necessary.
Make sure you test on Ğ1-Test network to avoid any loss of money.
## `tx`
- send a TX to a unique recipient
- send a TX to multiple recipients
- with one amount
- with multiple amounts
- send a TX to 92 recipients (can be 92 times the same)
- send a TX to 93 recipients (should fail)
## `membership`
- renew membership with `--dry-run` global option
- renew membership with `--display` global option
- renew membership without these two options
## `cert`
- send a certification with `--display` global option
- cert all identities you can on GTest network (thanks for keeping it alive ;-) )
- cert pubkey `4KEA63RCFF7AXUePPg5Q7JX9RtzXjywai1iKmE7LcoEC:DRz` on Ğ1-Test -> you should be suggested two identities
- cert identity `ggg_ggg_2` on Ğ1-Test -> you should NOT be proposed many identities
## `history`
- check you history
- check you history and display userIDs
- check you history and display pubkeys in full-length
- check you history and display userIDs and pubkeys in full-length
## `wot`
- check your WoT infos are correct with `wot` command
## `checksum`
- use `checksum` command to compute a checksum for one of your public keys.
- verify it with Silkaj
- verify it with Cesium
- try to change a character in the public key (with the checksum), then verify that it is wrong.
## auth
- create an authfile for a Ğ1-Test account
- send txs or certs using the authfile
## Other
Feel free to play!
______________________________________________________________________
The release is planned for the 17th April of 2021, which will contain a detailed announcement of the changes and the new features.
Silkaj team
---
date:
created: 2021-04-17
authors:
- moul
categories:
- release
---
# Silkaj v0.9.0 release
## Introduction
The Silkaj team is pleased to announce the release of Silkaj 0.9.0.
The most important changes are highlighted in this article, if you are looking for a comprehensive list of changes, check out the changelog.
<!-- more -->
#### Transaction
Silkaj is now properly handling the transaction document size limit.
The 100 lines limit length of the transaction document in the compact format is now properly fulfilled by computing the length of the generated document.
An important bug has been fixed regarding intermediaries transactions:
When spending lots of sources (i.e. huge amounts from member wallets), many useless intermediaries transactions were sent and displayed. Intermediaries transactions are now correctly handled.
Unit tests have been written on the `tx` command, which comforts us into developing new features.
#### Refactored `id`/`lookup` command
The `id` command has been completely refactored. It now offers comprehensive results when looking for an identity by specifying a user identifier or a public key.
Now the non-member user identifier are displayed.
The command now uses same algorithm as `choose_identity()` which relies exclusively on `/wot/lookup` BMA's path.
The command has been renamed to `lookup` to represent more closely what it does. This command renaming will also allow to introduce the future `identity` command.
```{ ..yaml .no-copy }
silkaj lookup titi
Public keys or user id found matching 'titi':
→ 4qJZFRfArLaUMEXDhsd69unsKynEFNLFazAVij4HNsBa:F4z ↔ laetitia97421
→ 4LCdTC9QsmqbFSHAhyaqGdDCVPr8Ywu2DZ8hDCzkdx4n:8ta ↔ Amandinelaetitia
→ CehfxBHrowP6tXouR73GS52QhGAoNMtabooKbCvT7f3j:6cG ↔ Laetiti974
→ FtZdA1HzHcDG6utoEgg6R5jjXfEne2ftS2UzvXajKurp:6Sm ↔ Laetitia
→ EUn8uLJxgc3fVXJ1fBA74re4iD4Ws8Nk2xHytX1wLMfK:AQ2 ↔ LaetitiaCarivenc
→ HqHZt9J1U7MwC3RF1bSjPgxACsTypfNjUThYFMZZfK6X:Dk1 ↔ LaetitiaHOFF
→ 5Vcm1zkHKoAMo9yy7Lk2HDX2Yn54agavtEUdrcFNmqkP:8mU ↔ laetitiajanot
→ BfncGdTeq8qvhPZnBaM8T76SHM9xfx78ASRNZtGp64rZ:7tP ↔ titi
→ BWKuSHYojjwzAXZZxSFTf5XVWneUMZqoWGUJEfWaFRL9:21F ↔ titi43
→ 49nWdTQqDT8qpazzPeP6NH92NwppG7YEh6PFYC2VecNA:Ba6 ↔ titix
```
#### New `--full-pubkey` option on the `history` command
The `history` command adds a new option to display the whole public keys `--full-pubkey`:
```{ ..yaml .no-copy }
silkaj -gt history 5B8iMAzq1dNmFe3ZxFTBQkqhq4fsztg1gZvxHXCk1XYH --full-pubkey
Transactions history from: moul-test 5B8iMAzq1dNmFe3ZxFTBQkqhq4fsztg1gZvxHXCk1XYH:baK
Current balance: 9012407.83 ĞTest, 161.34 UD ĞTest on the 2021-04-09 15:16:42
+---------------------+------------------------------+---------------+-----------------+-----------------------------+
| Date | Issuers/Recipients | Amounts ĞTest | Amounts UDĞTest | Comment |
+=====================+==============================+===============+=================+=============================+
| 2021-03-29 20:42:33 | | | | Change operation |
+---------------------+------------------------------+---------------+-----------------+-----------------------------+
| 2021-03-22 20:51:05 | WULdRTxspGdJzrs4vpZsWLGWsu37 | -193320 | -3.460 | |
| | DjqoHyhGDFr5amh:45s | | | |
+---------------------+------------------------------+---------------+-----------------+-----------------------------+
| 2021-03-22 20:51:05 | WULdRTxspGdJzrs4vpZsWLGWsu37 | -338310 | -6.060 | |
| | DjqoHyhGDFr5amh:45s | | | |
+---------------------+------------------------------+---------------+-----------------+-----------------------------+
```
#### `balance` command is now displaying corresponding member identity user identifier
```{ ..yaml .no-copy }
silkaj -gt balance 5B8iMAzq1dNmFe3ZxFTBQkqhq4fsztg1gZvxHXCk1XYH
╒══════════════════════════════╤══════════════════════════════════════════════════╕
│ Balance of pubkey │ 5B8iMAzq1dNmFe3ZxFTBQkqhq4fsztg1gZvxHXCk1XYH:baK │
├──────────────────────────────┼──────────────────────────────────────────────────┤
│ User identifier │ moul-test │
├──────────────────────────────┼──────────────────────────────────────────────────┤
│ Total amount (unit|relative) │ 8634537.83 ĞTest | 162.21 UD ĞTest │
├──────────────────────────────┼──────────────────────────────────────────────────┤
│ Total relative to M/N │ 1.05 x M/N │
╘══════════════════════════════╧══════════════════════════════════════════════════╛
```
#### Display option on `cert`, `membership` commands
This general option allows to display the generated document aside of the confirmation prompt before sending the document.
It can be used for debugging, safety, or curiosity purposes.
This option has only been implemented on the `cert` and the `membership` commands for now.
The option should be available in next releases for the three others send-documents commands.
```{ ..yaml .no-copy }
silkaj --gtest --auth-file --display cert KapisTest
╒════════╤══════════════════════════════════════════════════╤════╤══════════════════════════════════════════════════╕
│ Cert │ Issuer │ –> │ Recipient: Published: #block-hash date │
├────────┼──────────────────────────────────────────────────┼────┼──────────────────────────────────────────────────┤
│ ID │ moul-test │ –> │ KapisTest: #673782-00001519… 2020-12-11 11:37:42 │
├────────┼──────────────────────────────────────────────────┼────┼──────────────────────────────────────────────────┤
│ Pubkey │ 5B8iMAzq1dNmFe3ZxFTBQkqhq4fsztg1gZvxHXCk1XYH:baK │ –> │ HGuKgbo7s8wjKF8gQwpdPQGG8mLW9vNMq1ZFxMEZgD8c:GZp │
├────────┼──────────────────────────────────────────────────┼────┼──────────────────────────────────────────────────┤
│ Valid │ 2021-04-09 │ —> │ 2021-09-02 │
╘════════╧══════════════════════════════════════════════════╧════╧══════════════════════════════════════════════════╛
Version: 10
Type: Certification
Currency: g1-test
Issuer: 5B8iMAzq1dNmFe3ZxFTBQkqhq4fsztg1gZvxHXCk1XYH
IdtyIssuer: HGuKgbo7s8wjKF8gQwpdPQGG8mLW9vNMq1ZFxMEZgD8c
IdtyUniqueID: KapisTest
IdtyTimestamp: 673782-00001519FCBA6DDEFEE65B31ECD145B065F4404F870AAB272419EFA62BF5A677
IdtySignature: 1KX/Iuv7FuXsxhTwYU/RIO9L0F3I+lGvBLYXRexIoCz35H+yb2Wf3nEXA2XXCPl5aVxcxvreOW2HF43r7ezcDA==
CertTimestamp: 735968-00003F6B07F64573F6FABC510C1CEABEE8358426176BE7F190827A856873C517
Do you confirm sending this certification? [y/N]: y
Certification successfully sent.
```
```{ ..yaml .no-copy }
silkaj --gtest --auth-file --display membership
╒════════════════════════════════════════════════════╤══════════════════════════════════════════════════╕
│ Expiration date of current membership │ in 2 months │
├────────────────────────────────────────────────────┼──────────────────────────────────────────────────┤
│ User Identifier (UID) │ moul-test │
├────────────────────────────────────────────────────┼──────────────────────────────────────────────────┤
│ Public Key │ 5B8iMAzq1dNmFe3ZxFTBQkqhq4fsztg1gZvxHXCk1XYH:baK │
├────────────────────────────────────────────────────┼──────────────────────────────────────────────────┤
│ Block Identity │ 167750-0000A51FF952B76AAA594A46CA0C8156A56988… │
├────────────────────────────────────────────────────┼──────────────────────────────────────────────────┤
│ Identity published │ April 20, 2018 │
├────────────────────────────────────────────────────┼──────────────────────────────────────────────────┤
│ Expiration date of new membership │ in 2 months │
├────────────────────────────────────────────────────┼──────────────────────────────────────────────────┤
│ Expiration date of new membership from the mempool │ in 2 weeks │
╘════════════════════════════════════════════════════╧══════════════════════════════════════════════════╛
Version: 10
Type: Membership
Currency: g1-test
Issuer: 5B8iMAzq1dNmFe3ZxFTBQkqhq4fsztg1gZvxHXCk1XYH
Block: 735967-00028030F3E2AB38D7EACA997065F58E16F0497EE86BFA23B2DA222EEE80C23C
Membership: IN
UserID: moul-test
CertTS: 167750-0000A51FF952B76AAA594A46CA0C8156A56988D2B2B57BE18ECB4F3CFC25CEC2
phOKWXHxfPBgkTE+Mui8Fiqb7QSlhPrKalDOzhyUwwLySV/EE2Z/b+vZNfByTn7sFYaHWPck5dsbzJQ6M+fBBA==
Do you confirm sending this membership document for this identity? [y/N]: y
Membership successfully sent
```
#### Dry Run option is becoming a generic option
Before:
```{ ..yaml .no-copy }
silkaj membership --dry-run
```
Now:
```{ ..yaml .no-copy }
silkaj --dry-run membership
```
Note: This option is currently only implemented in the `membership` command.
Note: The difference between the `--display` and the `--dry-run` options are that the dry run option by-passes the license, and the confirmation approvals.
For safety reasons, the `--dry-run` option doesn't allow, at the end, to send the document on the network.
On contrary, the `--display` option allows to send the document to the network.
#### Python support
Support for Python 3.5 has been dropped and support for Python 3.9 has been added.
#### Silkaj v0.8.1 in Debian Bullseye
If you are a user of Debian or its derivatives, you will be able to find Silkaj v0.8.1 available into Debian Bullseye (v11) which is about to be released.
Silkaj package has been updated from v0.6.5 to v0.8.1 and DuniterPy v0.60.1 entered Debian repository for the first time.
#### Outlook
In the next developments, we are planning to work on DeathReaper, the implementations of the `revoke` and the `identity` commands.
The removal of the asynchronous property, the migration from `tabulate` to `Texttable`, and the migration from BMA to GVA.
### Thanks
matograine, moul, jonas, atrax
---
hide:
- navigation
---
## v0.12.0 <small>April 22, 2025</small> { id="0.12.0" }
### [Milestone v0.12.0](https://git.duniter.org/clients/python/silkaj/-/milestones/20)
### Code
- !244, #470: Support BMA optimizations
- !253, !254, !256, #443: Merge DeathReaper `256_excluded` branch on `main` branch
- !265, !270, !276, #258: Implement CSV output on `history` command
- !268, #490: `wot status`: Display precise expiration date of received certifications
- !283, #471: Rename transfer’s comment to reference
- !251, #351: Delete `blockchain verify` command
- !267, #124: Convert `OrderedDict` to `dict`
#### Account storage support: authentication and revocation improvements
- !277, #477: Account storage support: `authentication`, `revocation`
- !240, #420: Rework authentication file path
- !249, #481: Save revocation file as only readable and writeable as user (`600` permission)
- !248, #435: Revocation: remove `--dry-run` and `--display` options from `save` and `verify` commands, drop default revocation file path
#### Command-line interface
- !241, #466: Make the CLI looks better with `rich-click`
- #166: Document shell completion set-up
- !242, #469: Use `click.Path()`
- !243, #419: Implement `-h` small `--help` option for all commands
- !279, #501: Replace `sys.exit()` with `click.Context.fail()` for better user output
- !246: Rework endpoints usage doc and CLI options help
### Website
- !271, !281, #433, #196: Set up new website structure with MkDocs
- !280, #277: Integrate releases announcements into the website
- !282, #502: Generate automatic CLI interface documentation with mkdocs-click
- !285: Add v0.12.0 announcement and changelog, release v0.12.0
### Project
- #483: Switch DuniterPy usage back to PyPI release
- !257, !278, #473: Update Ğ1 Monetary license
- !247, #459: Rework project description
- !233: CI change, coverage url fix, documentation, hooks bump
#### Python versions
- !237, #457: Drop Python v3.7 support
- !263, #464: Drop Python v3.8 support
- !238, #474: Initial Python v3.12 support
- !250, #448: Add support for Python v3.12
- !264, #482: Add support for Python v3.13
- !269, !284, #492: Migrate from Pendulum to Arrow datetime lib
#### Copyright
- !231, #417: Update copyright to 2023
- !258, #456: Update copyright to 2024
- !272, #485: Update copyright to 2025
### Development Environment
- !234, !236, !245, !273, #458: Introduce Ruff pre-commit hook to replace black, autoflake, pylint, isort and pyupgrade
- !275, #499: Support Poetry v2 syntax
- !274, #498: pip container does no longer include `g1_monetary_license`
- !252, #480: Update `.gitignore`
- [duniterpy#205](https://git.duniter.org/clients/python/duniterpy/-/issues/205): `gitlab-ci-linter` is broken since GitLab v16
- !259, #454: Set up release feature from gitlab-ci
## v0.11.2 <small>November 22, 2023</small> { id="0.11.2" }
- #484: Support Python v3.12 on v0.11 release
### Pre-requisites
- disable `pylint` and `pyupgrade` hooks
- switch jobs to `3.12` image containing `pre-commit`
- !195, [duniterpy#205](https://git.duniter.org/clients/python/duniterpy/-/issues/205): Fix `gitlab-ci-linter` hook
### Support Python v3.12
- !237, #457: Drop Python v3.7 support
- Bump `pendulum` to `v3.0.0b1`
- !238, !250, #448: Add support for Python v3.12
## v0.11.1 <small>August 14, 2023</small> { id="0.11.1" }
Bug fix release, because `libnacl` brought in a breaking change.
- Bump DuniterPy to v1.1.1 [duniterpy#206](https://git.duniter.org/clients/python/duniterpy/-/issues/206)
- Set tilde requirement, to allow future patch updates
## v0.11.0 <small>November 27, 2022</small> { id="0.11.0" }
(**Please see the full set of changes for this release also in v0.10.0rc0 note below**)
#### CLI
- !229, #430: Rename `certification` cmd to `certify` and `revocation save` to `revocation create`
### [Milestone v0.11.0](https://git.duniter.org/clients/python/silkaj/-/milestones/15)
## v0.11.0rc0 <small>November 12, 2022</small> { id="0.11.0rc0" }
### Code
- !199, #203: Migrate from `tabulate` to `texttable`
- !216, #330: Repository restructuration
#### Network
- !211, #397: Replace singletons with `@functools.lru_cache()` decorator
- !220, #438, #411, #3: Add `sleep()` between `identity_of()` calls in a loop
#### CLI
- !219, #430: Organize commands into subcommands
- !218, #436: Rename `tx` command to `transfer`
- !223, #449: Get rid of `argos`
### Dev Env
- !214, #163: Introduce type annotations for static typing with `mypy`
- !227, #453: Support new `mypy` v0.990 reports
- !215, #292: Introduce `pylint` tool
- !212, #424: Introduce `flake8`
- !222, #450: Replace `flake8` with `autoflake`
- !210, #428: Introduce `pre-commit-hooks` and `mdformat` hooks
- !226, #451: `pre-commit:hooks` job doesn’t appear
- !209, #408: Change workflow by changing from `master` and default `dev` branches to a single `main` branch
- !224, #441: Separate `unit` and `integration` tests
- !221, #442: Add support for Python v3.11
- !217, #447: Fix coverage integration into GitLab
### Documentation
- !225, #224: Refactor `pip` install documentation: remove Windows part
- !225, #188, #293: Replace `pip` installation with `pipx`
- #432: List printqrjune in wrappers list
## v0.10.0 <small>April 18, 2022</small> { id="0.10.0" }
(**Please see the full set of changes for this release also in the v0.10.0rc0 and rc1 notes below**)
### [Milestone v0.10.0](https://git.duniter.org/clients/python/silkaj/-/milestones/9)
## v0.10.0rc1 <small>April 6, 2022</small> { id="0.10.0rc1" }
- #426, !207: Ğ1 Monetary License refactoring:
- Drop display in a browser
- Discover available languages
- Create `G1MonetaryLicense` class out of existing functions
- Add Italian translation of Ğ1 monetary license
- #421, !204 : `wot` command can display membership status from an other identity sharing same `uid`/`pubkey`
- #422: `excluded` command displays information of an other identity sharing same uid/pubkey, not the one excluded
- #216 `diffi`: Catch WS disconnection exception
## v0.10.0rc0 <small>March 21, 2022</small> { id="0.10.0rc0" }
### Code
#### Features
- #89, !170: Manage the revocation document
- #134, !202: Read transaction recipients and amounts from a file
#### Ğ1 Monetary license
- #221, !181: Research about Ğ1 monetary license integration and refactor of its handling in Silkaj
- #308, !181: Ğ1 license display on a workstation: give the choice how to display it
- #392, !181: Ğ1 monetary license files not included into the Python package
- !181: subtree updated bringing new translations: Esperanto, Espagnol, and Portuguese
#### DeathReaper
- #256: Implement `excluded` command to report excluded identities from the WoT / DeathReaper
#### Network
- #373, #396, #410, !182, !194: Drop asynchronous property
- #390, !182, !196: Implement generic `network_tools.send_document()`
- #177, !188: Clean no longer used network layer functions
- Rename global option from `-p/--peer` to `-ep/--endpoint`
- #181, #409, !193: Improve endpoint determination code layer
- #260: Disconnection bug when sending a document to a local node
#### Other changes
- #407, !182: Support DuniterPy v1.0 Breaking Backward compatible changes in `Documents` classes
- #344, !177: Fix import loop issue
- !177: Generalize `pendulum` usage
- #416, !170: Move `wot_lookup()` exceptions handling in higher level functions
#### Minor impact changes
- #194, !195: Convert strings to `f-strings`
- #376, !195: Replace `tools.message_exit()` with `sys.exit()`
- #413, !170: Create `get_currency()` helper
- #264, !178: Remove unmaintained and commented `network` command
### Meta
- !200: Bump DuniterPy to v1.1.0
- #332, !200: Drop Python v3.6 support
- #374, !197: Add support for Python v3.10
- #401, !184: Bump to click v8.0
- #364, !187: Introduce insert-license pre-commit hook, Switch `#` comment instead of `"""` docstring for the copyright and license statements
- #365, !201: Update the copyright date to 2022 in the headers of every source files
### Documentation
- #384: Document how to release pre-releases
- !180: `README` and `CONTRIBUTING` enhancements
### Installation/Continuous Delivery
- #388, !198: Set up Silkaj Docker images build automation
### Development Environment/Continuous Integration
- #326, !189: Integrate coverage in GitLab coverage feature
- #355, !183: Set `Py:3.8` as default image and move coverage to `Py:3.9`
- #355, !185: Move the coverage and the badge generations to v3.9 test job
- #414, !197: Drop Poetry lock file usage
- !175: `pyproject.toml` and `release.sh` clean-ups, Pyinstaller removal
#### Introduce and generalize `pre-commit` usage
- #401, !183: Introduce `isort` and `gitlab-ci-linter` `pre-commit` hooks
- #403, !192: Introduce `pyupgrade`, Remove dev dep tools
- #406, !191: Set up `pre-commit` hooks CI jobs
- !179: Bump `black` to v21.4b2 and allow to install as pre-release
- !190: Update `pre-commit` doc. Document CI linter hook usage
______________________________________________________________________
Thanks moul, matograine
## v0.9.0 <small>April 17, 2021</small> { id="0.9.0" }
### [Milestone v0.9.0](https://git.duniter.org/clients/python/silkaj/-/milestones/13)
- #345, #385, !171: Refactor `id`/`lookup` command exclusively using `/wot/lookup`
- Display non-member uids when passing a pubkey
- Use same algorithm as `choose_identity()` uses
- Rename `id` to `lookup` command
- #377, !172: `balance`: Fix undefined variable in case of 'Total' label
Plus what can be found bellow in v0.9.0rc
## v0.9.0rc <small>March 24, 2021</small> { id="0.9.0rc" }
### Code
#### `tx`
- #281, !129: Handle transaction size limit properly
- #257, #312, #356: Handle chained transactions/Change txs lost while sending big amount
- #296, #362, !154, !157: Prevent sending transaction with 0 as amounts
- #172, !165: Refactor tx confirmation, by using `click.confirm()`
#### `balance`
- #300, !164: `balance`: Display corresponding member identity uid
- #366, !159: Fix wrong `DuniterError` exception handling in `wot.identity_of`
- #377, !166: `balance`: Document `money.show_amount_from_pubkey()`
- #342, !151: Don’t allow to pass multiple times the same pubkey to the `balance` command
#### Others
- #218, !160: `history`: Add option to display the complete pubkeys
- #314, !165: Display option for `cert`, `membership` commands
- !165: Make `--dry-run` option a generic one
- #378, !165: Create and use generic `send_doc_confirmation()` in `cert` and `membership` commands
- #176, !149: Get rid of `PyNaCl` and use `base58` module
- #309, !163: `wot`: Fix legend about received certifications
- #208: `argos`: Remove duplicate call to `CurrencySymbol`
#### Tests
- #213, !130: Write unit tests for the `tx` command
- #282, !130: Split `patched.py` into files
- #335, !130: Merge the two functions testing `transaction_amount()`
- #363, !129: Returns balance from `patched_get_source()`
- #368, !161: Assertions are not tested when testing system exit
- #362, !156: Change "moul" id in tests
### Meta
- #240, !150: Drop Python 3.5 support
- #294, !150, docker/python3/poetry!1: Add support and set-up Python 3.9 test job
- #270: Silkaj v0.8.1 package for Debian Bullseye (v11)
- #226, !158: Get rid of `ipaddress` dependency
- #290, !162: Update `pre-commit` dev dependency
- #267: Update the copyright date to 2021 in the headers of every source files
- !150, !155, !167, Update DuniterPy from v0.58.1 to v0.62.0
- #313, !148: Be compatible with and handle new features from Poetry v1.1
- #299, !147: Introduce dev version suffix
______________________________________________________________________
Thanks matograine, moul, atrax
## v0.8.1 <small>November 30, 2020</small> { id="0.8.1" }
- #358, !152: Update DuniterPy to v0.58.1, to support `libnacl` v1.7.2
Thanks matograine
## v0.8.0 <small>October 18, 2020</small> { id="0.8.0" }
### [Milestone v0.8.0](https://git.duniter.org/clients/python/silkaj/-/milestones/8)
### Code
#### Transaction
- #111, !108: Support passing different amounts on multi-recipients tx
- **Breaking change**: Rename `--output` option to `--recipient`
- Add extra small options to ease passing multiple amounts and recipients:
- `-a/--amount`
- `-d/--amountUD`
- `-r/--recipient`
- `-c/--comment`
- Add possibility to pass multiple options:
- **Breaking change**: recipients public keys are no longer `:` separated: `-r A -r B`
- #232, !131, !132: Identities not retrieved for tx with several issuers, and to display the tx history
- #236, !107: Improve the confirmation display
- !144: Rework confirmation fields titles
- #235: Make sure only one option is passed to retrieve the amount of the transaction
#### Membership, WoT
- #88, !140: Add `membership` command
- #88, !144: Rework table fields names
- #140, !140: Ability to pass an `uid` or a `pubkey` to `wot`, and `cert`, `membership` commands
- Implement identity choice selector
#### Checksum
- #237, !132: **Breaking change**: Switch back the checksum delimiter from `!` to `:`
- #323, !132: Handle pubkey's checksum in the tx code
- #301, !143: Generalize pubkey checksum display and verifiction, Add `chekcsum` command
- #320, !143: Incorrect use of `check_public_key()` in `id` command
#### Others
- #262, !123: Add new `verify` command to check blocks’ signatures
- #264, !133: Disable the broken `net` command
- !131: Display `powMin` in a row in the `blocks` explorer
- #210, !115: Close client session in every cases
- #223: Make Click context optional to be able to call functions from an external module
- #255, !113: `balance`: display the content in tables
- #269, !133: Move `convert_time()` to `tui.py`
- #278, !128: Fix PubSec regex
- #336, !141: `history`: Pubkeys display issue with multisig txs
### Dev Env
#### Poetry migration
- #182: Migrate from Pipenv and `setup.py` to Poetry
- #249: Install Poetry stable when v1 is released
- #263, !127: Post migration tasks (black, poetry)
- #276, !120: Pip installation do not install `silkaj` executalbe into `$HOME/.local/bin`
#### CI/CD set-up
- #245: Automated containers builds with Poetry installed for Python versions 3.5, 3.6, 3.7, and 3.8
- #149: CI/CD set up
- #105: Deploy on PyPI from GitLab CD
- #146: Add a coverage badge
- #284, !124: `build` and `tests` jobs are not retriggered in case of source code change
- #286, !126: Use latest Black version from PyPI in the container
- !131: Use `rules` instead of `only/except`
#### Tests
- #241: Can not run test with Click utility
### Dependencies
- #259: `attr` error while installing with `pip`
- !121, !131, !142: Update DuniterPy from v0.55.1 to v0.58.0
- #251, !140: Introduce `pendulum` date utility
- Introduce `pytest-sugar`
- Update PyNaCl to v1.4.0
- Update Click to v7.1.2
- #338, !140: Update black to v20
### Python versions support
We added the support for Python 3.8.
#240: It is planned that v0.8.x versions are going to be the last releases with Python 3.5 support
since [its support from the Python project has been dropped September 30th of 2020](https://pythoninsider.blogspot.com/2020/10/python-35-is-no-longer-supported.html).
### Documentation
- #202: Document contribution process in `CONTRIBUTING.md`
- #182: Document Poetry installation and usage
- !109: Add Poetry installation on Debian Buster
- !103: Add pip installation documentation for macOS
- !131: Add packaging status badge from Repology
- #244: Add `AUTHORS.md` listing the contributors
- #207: Create Silkaj SVG logo
### Project
- #252, !118: Create a script to update and update the copyright date to 2020
- #285, !132: Add copyright and license statements in tests source files
### Thanks
moul, matograine
______________________________________________________________________
## v0.7.6 <small>January 24, 2020</small> { id="0.7.6" }
- Update DuniterPy to v0.55.1 in order to have the PubSec regex fixed
## v0.7.5 <small>January 23, 2020</small> { id="0.7.5" }
- #276: Publish on PyPI with previous method: `wheel`, `twine`, and `setup.py`.
- `silkaj` binary does not get installed to `$HOME/.local/bin` via Poetry
## v0.7.4 <small>January 22, 2020</small> { id="0.7.4" }
- #273, !119: Fix broken PubSec authfile importation regex
Thanks to matograine for this bugfix and the release!
## v0.7.3 <small>July 25, 2019</small> { id="0.7.3" }
#239: Bug fix release for broken successives transactions due to wrongly calculated pending inputs:
- remove already used inputs: restore previous behaviour which haven’t been kept the same during the migration
- `enumerate()` wrongly moved to the non appropriate for loop
## v0.7.2 <small>June 25, 2019</small> { id="0.7.2" }
- #233: fix round passed amount and amoundUD floats × by 100
## v0.7.1 <small>May 29, 2019</small> { id="0.7.1" }
- Fix transaction document generation from DuniterPy
## v0.7.0 <small>May 22, 2019</small> { id="0.7.0" }
### [Milestone v0.7.0](https://git.duniter.org/clients/python/silkaj/-/milestones/10)
#### DuniterPy
- #7, !97: Migrate to DuniterPy
- #200: Freeze DuniterPy dependency version
- #206: Set a sleep for async requests
- #178: Select different sources for intermediaries tx
#### CLI
- #77, !98: Migrate command line tool from commandline to Click
- #67, #76, #116, #117, #123: fixed by previous issue
- #167: Rename `amount` command to `balance`
- #148: Rename `issuers` command to `blocks` which is a more appropriate word to what it does
- With `-p` option: when the port of the node is 443, it’s not necessary to specify the port
#### Transaction
- #22: Display transactions history in a table
- #184: Rework transaction functions (Part 3)
- #152: fix `--allSources` option which was not working
- #165, !99: Display outputBackChange option in confirmation chart
- #131: Prevent sending too small amount
#### Certification
- #170: Change process: only propose license display
- #198: Display identity’s blockstamp and date into confirmation message
#### Difficulty level
- #93: Difficulties fails / use websocket to be informed about new block
- #190: Display the date when the head block has been generated
#### Balance
- !96, #122: display balance in comparison to the average of money share
#### Blocks
- Display the full dates of blocks’ generation and mediantime
#### WoT
- #141: Crash on membership status
- Add legend to explain `✔`
- #189: Handle wot requests exceptions
- #135 :is_member() requests all members to know if an identity is member will explose
#### Authentication
- #130: Prevent erasing authfile
- Use `pathlib.Path` instead of `os.path`
#### Tests
- !83, #85: Create test structure
- #225: Install `pytest-asyncio`
#### Other
- #161: Singleton improvement
- #157, !100: Use `for` loops
- #169, !100: type issue
- #113: Many small improvements
#### Website / Doc
- #82: Update website and readme about new features
- #136: Link directly the installation documentation on the website
- #159: Update website
- #160: Add website repository link in the README
- List Silkaj wrappers en the README
##### Installation documentation
- Add instructions on installing libsodium which is required by pylibscrypt since DuniterPy migration
- #142: Improve pip installation documentation
- Improve Pipenv installation documentation
- !89: Add Docker install procedure, Pip: dependency and PATH tricks
- #215: Conflict between pyproject.toml and pipenv install
#### Windows
- #153: Install on Windows, Scrypt issue
- #154: net: can’t get screen size on Windows
- !92: Document Windows installation with pip
#### Project
- #132: Add a license notice as a header of every source files
- #158: Add CHANGELOG.md file
- #186: Fix firsts two tags
- Pypi: add classifiers
#### Thanks
Attilax, Bernard, cebash, matograine, vtexier
## v0.6.5 Debian <small>January 8, 2019</small> { id="0.6.5" }
v0.6.5 fork for Debian package without DuniterPy migration but with Click CLI module.
- #137: Create Debian package and publish it in Buster
- #77, !98: Migrate to Click
- #132: Add a license notice as a header of every source files
#### Thanks
jonas
## v0.6.1 <small>December 10, 2018</small> { id="0.6.1" }
### [Milestone v0.6.1](https://git.duniter.org/clients/python/silkaj/-/milestones/11)
- !90, #151: Fix intermediaries transactions sent to wrong recipient
- !91, #145: Allow to renew certifications
- #155: Make `clear` calls works on Windows
- #141: Crash on membership status
- #166: Shell completion
## v0.6.0 <small>November 18, 2018</small> { id="0.6.0" }
### [Milestone v0.6.0](https://git.duniter.org/clients/python/silkaj/-/milestones/7)
#### Installation
- #86: Move from `pyenv+pip` to Pipenv as the new development environment solution
- #100, !80: New installation method with `pip` now set as default
- #100: Documentation on how to publish on Pypi
#### Authentication
- #78: Use Scrypt as default authentication method
- #102: Display a confirmation message after using `generate_auth_file` command
- #103: More explicit usage about the authentication file mechanism storage
#### Certification
- #96, !82: Certification fails for non-members identities
- Prevent certifying ourself
- Code refactoring: simplification, duplicate code removal
#### Wot
- Display certification stock
- #73: Display identity status:
- Display membership expiration due to membership expiration and certifications expiration
- #127: fix: display human readable date for 'revoked on' attribute
#### Transaction
- #83, !78: Allow multi-output transactions
- #72: Check the pubkey’s balance is enough before processing the transaction
- #72: Minors transaction refactoring
- #101: Round UD value in the confirmation summary
- #118: Use generic function to get sources
- #120: Display pubkey’s balance before and after transaction in the confirmation summary
- #125: Fix wrong amount transferred
#### New commands
- #91: `about`: displays information about silkaj
- #95: `license`: displays Ğ1’s license
#### Ğ1-test
- #87: Add `--gtest` option to specify official Ğ1-test node
- #109, !84: Improve gtest usage message
- #112: Amount: fix authentication option with `--gtest` option
#### Python 3.7
- #98: Test with Python 3.7: silkaj is compatible with Python from version 3.4 to 3.7
- #98: Set Python 3.7 for Pipenv
#### Network performances
- #42, !85: Thanks to singleton, requests are made once for `head_block`, blockchain parameters, endpoint, `ud_value`, and `currency_symbol` retrieval
- #32: request the domain first instead of the IP (to handle https certificates) (this avoid `network` view to crash)
- #32, !79: Add timeouts on GET and POST requests
- #128, !88: Fix POST request timeout
#### Black: code formatting
- #94, !76: move from `pep8` to `black` code formatting. Set pre-commit hook and CI worker
#### Bug fixes and refactoring
- #121: Move cryptographic related functions into `crypto_tools.py`
#### Logo
- #92: Silkaj logo publication under GNU APGLv3 after a successful crowdfunding
#### Wrappers
- #107: Document silkaj wrappers usages
### [Forum post](https://forum.duniter.org/t/silkaj-v0-6-0-release/4858)
## v0.5.0 <small>May 22, 2018</small> { id="0.5.0" }
### [Milestone v0.5.0](https://git.duniter.org/clients/python/silkaj/-/milestones/2)
#### Certification
- #61: sending certification document:
- check that current identity is member
- check that the certification has not already been sent
- prompt Ğ1’s license and ask for acceptance in web browser or in pager (a `less`-like) if no web browser is available
#### Wot
- #84: display certifications’ expiration date
- #81: bugfix, nothing displayed when there is two identities with same id
#### Amount
- remove necessity to prepend with `--pubkey` option: `silkaj amount pubkey1:pubkey2:pubkey3`
#### Issuers
- display the hash’s ten first characters as Ğ1’s global difficulty has increased
- display blocks in current window: `silkaj issuers 0`
#### Build
- #6: Automate releases using a script
#### Other
- display `Ğ1` and `ĞTest` currencies symbols
- Aliases commands `id`: `identities`, `tx`: `transaction`, `net`: `network`
- `import` rework to improve loading performances
- Lots of code reorganization and cleaning
### [Forum post](https://forum.duniter.org/t/silkaj-v0-5-0/4712)
## v0.4.0 <small>January 28, 2018</small> { id="0.4.0" }
### [Milestone v0.4.0](https://git.duniter.org/clients/python/silkaj/-/milestones/5)
#### New `wot` command which displays received and sent certification of an identity
- !50, !66
#### Transaction
- #41: Rework/refactoring of transaction code (part 1)
- !55: Add check condition for sources
- !57: Exit if wrong pubkey’s output formats
#### Amount
- #46, !68: Add ability to display the amount of many pubkey with same command
- Total amount of pubkeys displayed at the end (nice to know how much units you own)
#### Authentication
- !56: Add [Ğannonce](https://gannonce.duniter.org/) (aka PubSec) file format import
- #60: Hide salt at scrypt authentication
#### Difficulties
- !58: Reload/refresh in a loop PoW difficulty level
- Display in same order as [Remuniter](http://remuniter.cgeek.fr/)
#### Id
- #49: Display if pubkey is member
- #59: Bug fix with `id` command
#### Build
- Build published with sha256 checksum
#### Other
- Change default endpoint
#### Thanks
Thanks to Tortue95, jytou, mmuman, and cuckooland
### [Forum post](https://forum.duniter.org/t/silkaj-0-4-0/4071)
## v0.3.0 <small>April 17, 2017</small> { id="0.3.0" }
### [Milestone v0.3.0](https://git.duniter.org/clients/python/silkaj/-/milestones/5)
#### Transactions
- enhance transaction command:
- #27, #30: ask for confirmation
- !38: new confirmation chart containing transaction informations
- don’t prompt `scrypt` parameters. See `Auth` §
#### New command `id` to search for pubkey/identity
- !29: new command `id` to search identities with pubkey or id
#### Tutorial to install a Python environment
- #23, !40: Pyenv installation tutorial
#### Authentication
- !45: new authentication method: WIF. For future paper wallet feature
- #39, #43: Don’t prompt scrypt parameters at authentication. Use default ones
#### Builds
- #5: with Pyinstaller
#### Other
- !33, !37: Ability to sort network view
- Change license from GNU GPLv3 to GNU AGPLv3
- !31: Code formatting with `pep8`
Thanks to Tortue95 and jytou
### [Forum post](https://forum.duniter.org/t/lets-send-your-money-silkaj-v0-3-0/2404/1)
## v0.2.0 <small>March 27, 2017</small> { id="0.2.0" }
### Features
- [Transaction feature](https://github.com/duniter/silkaj/pull/21)
- [Output information on the drop-down menu with Argos (GNOME Shell extension)](https://github.com/duniter/silkaj/pull/20)
### [Milestone v0.2.0](https://git.duniter.org/clients/python/silkaj/-/milestones/4)
### Announcement
- [Diaspora\* post](https://framasphere.org/posts/3055642)
Big thanks to Tortue95, and mmuman.
## v0.1.0 <small>September 23, 2016</small> { id="0.1.0" }
### Public release
- [Duniter forum post](https://forum.duniter.org/t/silkaj-new-cli-duniter-client/1278)
- [Diaspora\* post](https://framasphere.org/posts/2226277)
### [Milestone v0.1.0](https://git.duniter.org/clients/python/silkaj/-/milestones/1)
### Features
Sub-commands:
- `info`
- `difficulties`
- `network`
- `issuers`
Thanks to c-geek.