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.
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. 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:
Based on this new authentication way, you can run commands using (E)WIF authentication from the account storage, i.e.:
For further details, check out the account storage documentation.
New documentation website¶
Previous 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 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.
I found out about MkDocs and the great Material theme. 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 describes how to contribute to the website.
CSV output on money history
command¶
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:
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
, a Click add-on.
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:
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.
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:
│───────────────────│──────────────────│────────────────│──────────────────│
│ 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:
│───────────────────│──────────────────│────────────────│──────────────────│
│ 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
Ğ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 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 datetime library was lacking maintenance and had no Python v3.13 support. I replaced Pendulum with Arrow. 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 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 framework which run in the terminal, and can also run in a web browser.