
Komunitin is an app featuring a local currency wallet and a marketplace for local communities. It models a decentralized set of local community currencies with the ability to trade between currencies. Community currencies (also local currencies or LETS) are a tool for financial inclusion and for a transition to a more fair and ecologically sustainable economy. They are issued and governed by mutual credit groups, cooperatives, time banks, local councils, etc. They define the currency rules, deploy local monetary policies, and need more features than just a payments system: engaging marketplace with offers and needs, news feed, efficient means of contact between members, etc.
Blockchain technology has not penetrated this user base and most of these communities use classic centralized systems (CES, Cyclos, IntegralCES, TimeOverflow, MutualCredit). This is because individual communities lack the resources to develop a project like this, and existing cryptocurrencies don’t fit the use case because they don’t have the required features, are not flexible enough or are difficult to use or deploy. “The LETS movement, on a whole, hasn't been able to keep up with technology.” (Investopedia)
Komunitin aims to be the flagship open source project for community currencies where to join efforts into an engaging, easy to use, decentralized and secure application. After the completion of this project and thanks to Stellar, Komunitin will also provide a critical feature that all previous systems are lacking: the ability to reliably trade between different community currencies without the need of a global coordination or global asset. This feature can effectively scale heterogeneous and autonomous community currencies into a locally-governed global payments system.
Komunitin is already up and running and being used by tens of local communities across Spain, Italy and Greece for 10 years, but recently the project team is working hard in renewing the system. The user interface has already been redesigned and rebuilt and now it is time to upgrade the backend. The goal of this project is to replace the part of the old backend related with payments by a new web service using Stellar: the Komunitin accounting service.
We define a concrete set of assets, accounts and trustlines in order to model community currencies in the Stellar network. Concretely, each currency has an issuer account issuing their own asset, and an administrator account that distributes the asset. Each user within a community has its account and has the administrator account as additional signer. In order to enable trade between users of different currencies, each currency has a special external account, which acts as a proxy to foreign currencies via bidirectional sell offers. The currency administration may set trustlines with external accounts of other communities, after acknowledging that the other currency is indeed trustworthy. Then, end-users of communities can effectively trade with users from other currencies, each of them using only their local currency.
The following are the main characteristics of the Komunitin accounting service with implications on the architecture. Full representation in Stellar: Each community currency issues its own Stellar asset. Each user has its own Stellar account and all transactions are reflected in the Stellar network. Locally governed: Local currency administration has full control over their user accounts. There is no superstructure beyond local communities. Sponsored: Both base reserves and transaction fees are fully sponsored by the platform. Multi-tenant: A single Komunitin server can hold multiple community currencies. A new community currency can be created by filling a form. Data from different communities are isolated in different databases. Federated: Several Komunitin servers can coexist, each one in charge of a different set of community currencies. Users can trade with other users in the same or different Komunitin server (provided there is a trust path between their currencies). Custodial: Users and administrators don’t save their Stellar private keys. Their server is responsible for signing transactions on their behalf and users need to fully trust it. This property may be changed in the future to a non-custodial architecture.
The Komunitin accounting service is the bridge between the Komunitin app and the Stellar network. It implements a JSON REST API for communication with the Komunitin app. It features payments and all other related operations: CRUD for currencies and accounts, local (same currency) and external (different currencies) payments. It is also responsible for implementing some features not directly translatable to Stellar: payment requests, negative balances, recurring payments, collecting membership fee, sending events to users and persisting state not suitable to be stored in the Stellar ledger. Once ready, the Komunitin app will switch from using the current old backend to the new Komunitin accounting service for the payment-related operations. After that, the app and the backend will evolve together with new features. The social features (offers, needs, news, profiles, etc) will still be provided by the current backend. The Komunitin accounting service will be developed in TypeScript, using the Nitro web server toolkit, a PostgreSQL database server for data persistence via TypeORM and the JavaScript Stellar SDK for interaction with the Stellar network and the OAuth2 protocol for client authorization. The whole system will be deployed using a set of Docker containers using Github Actions. Push messages to users will be sent via the notifications service, an additional microservice written in Go, already developed and working and using the Google Cloud Messaging service.
All user’s private keys will be stored in a database column AES-encrypted using a different key per community. These community keys will be again stored in the database encrypted using a master key, provided to the server in deployment time, only in memory and not shared with other OS processes. Master and community keys will be rotated periodically. This is a simple but sufficient security approach in case of community currencies, where the first security layer is given by interpersonal trust of small communities. The fact that all transactions are recorded in Stellar makes it possible for the currency administration to check and eventually restore the balance of a compromised account. The current architecture allows for switching to a non-custodial model in the future if any community currency is ever convertible to fiat or cryptocurrency assets.
There can be multiple Komunitin servers. Each community currency completely belongs to a server, and a single server can maintain multiple currencies. The team will maintain an instance at komunitin.org, but communities are encouraged to deploy additional instances if they have the resources. The only federation feature in this iteration is the availability to perform payments with users on different servers. For same-currency payments, the user can select or search the list of members. Account names, avatars and profiles are provided by another subsystem (the Komunitin social service) that is out of the scope of this project. This is not available for external users yet, and hence the user will need to enter an account URI (either scanning a QR code or selecting the currency and account number) to identify the target account. The server will reach this URI to get the user’s public key and perform the path payment through the Stellar network.
$44.9K
Esteve Badia. Mathematician and software engineer. 15 years of experience in edtech and financial software. Developer of the community currency software IntegralCES and the Komunitin app. Member of a community currency for 10 years. Teaching cryptography at UPC.
Warren Puckett. Technologist with almost 30 years of experience in business sectors including financial services, web3 and political activism. Tech founder of UK’s political action organization 38degrees with 3 million members. Tech lead of Ethereum project sponsored by Barclays, HSBC and Northern Trust banks.

No other submissions.