diff --git a/requirements_dev.txt b/requirements_dev.txt
index d13caef0ed86847461ff8657b6d1c41a57e833f1..c65f86bf47756421a1610b8a7aa1cbfc1a5253d3 100644
--- a/requirements_dev.txt
+++ b/requirements_dev.txt
@@ -1,4 +1,4 @@
-black
+black==20.8b1
 duniter-mirage>=0.1.50
 mypy==0.770
 pylint==2.4.4
diff --git a/src/sakia/app.py b/src/sakia/app.py
index 8402fb1a8addcb1983ee0a09457df3722c242051..20ad6203012854e4ba49fbb111b6800abcd204b7 100644
--- a/src/sakia/app.py
+++ b/src/sakia/app.py
@@ -147,7 +147,11 @@ class Application(QObject):
         self._logger.debug(
             "Load root servers config file: {}".format(root_servers_config_path)
         )
-        with open(root_servers_config_path, "r", encoding="utf-8",) as stream:
+        with open(
+            root_servers_config_path,
+            "r",
+            encoding="utf-8",
+        ) as stream:
             self.root_servers = yaml.load(stream, Loader=yaml.FullLoader)
 
     def load_profile(self, profile_name):
diff --git a/src/sakia/data/processors/identities.py b/src/sakia/data/processors/identities.py
index 7416ce9b9cb66fc79322dbc081c3b993d124ef4b..0d93e7b94ea5d71bd43bdf9528a15e08ab5396fa 100644
--- a/src/sakia/data/processors/identities.py
+++ b/src/sakia/data/processors/identities.py
@@ -107,11 +107,13 @@ class IdentitiesProcessor:
                             )
                             if identity not in identities:
                                 # Search same identity with empty blockstamp (incomplete)
-                                same_with_empty_blockstamp = self._identities_repo.get_one(
-                                    currency=identity.currency,
-                                    uid=identity.uid,
-                                    pubkey=identity.pubkey,
-                                    blockstamp=BlockUID.empty(),
+                                same_with_empty_blockstamp = (
+                                    self._identities_repo.get_one(
+                                        currency=identity.currency,
+                                        uid=identity.uid,
+                                        pubkey=identity.pubkey,
+                                        blockstamp=BlockUID.empty(),
+                                    )
                                 )
                                 # Same identity with empty blockstamp (incomplete) should not appears as duplicate
                                 # Beware that identities in block 0 have empty blockstamps !
diff --git a/src/sakia/data/processors/sources.py b/src/sakia/data/processors/sources.py
index 0ca1812d08af74071f34a51d2c787e129565efbb..864d2d05fe88ceb1c3f37749cc017e154ed6fd0c 100644
--- a/src/sakia/data/processors/sources.py
+++ b/src/sakia/data/processors/sources.py
@@ -49,7 +49,7 @@ class SourcesProcessor:
         return sum([s.amount * (10 ** s.base) for s in sources])
 
     def available(self, currency, pubkey):
-        """"
+        """ "
         :param str currency: the currency of the sources
         :param str pubkey: the owner of the sources
         :rtype: list[sakia.data.entities.Source]
diff --git a/src/sakia/data/processors/tx_lifecycle.py b/src/sakia/data/processors/tx_lifecycle.py
index 3bce1c7368a4fa8ffd4a0069a3e4306c10d0845d..04d179f94e7fd4aae16405f90a9810cde4c6dd0e 100644
--- a/src/sakia/data/processors/tx_lifecycle.py
+++ b/src/sakia/data/processors/tx_lifecycle.py
@@ -79,8 +79,12 @@ states = {
         (lambda tx, l: _broadcast_failure(tx, l), None, Transaction.REFUSED),
     ),
     (Transaction.TO_SEND, ()): ((_is_locally_created, _drop, Transaction.DROPPED),),
-    (Transaction.AWAITING, (str, int,)): (
-        (_found_in_block, _be_validated, Transaction.VALIDATED),
-    ),
+    (
+        Transaction.AWAITING,
+        (
+            str,
+            int,
+        ),
+    ): ((_found_in_block, _be_validated, Transaction.VALIDATED),),
     (Transaction.REFUSED, ()): ((_is_locally_created, _drop, Transaction.DROPPED),),
 }
diff --git a/src/sakia/data/repositories/blockchains.py b/src/sakia/data/repositories/blockchains.py
index 77ebfb5143e610123a3ad088f2e514da15af1761..4135060011f1284a7f03bb0dd81710f3b90b2adf 100644
--- a/src/sakia/data/repositories/blockchains.py
+++ b/src/sakia/data/repositories/blockchains.py
@@ -7,8 +7,7 @@ from ..entities import Blockchain, BlockchainParameters
 
 @attr.s(frozen=True)
 class BlockchainsRepo:
-    """The repository for Blockchain entities.
-    """
+    """The repository for Blockchain entities."""
 
     _conn = attr.ib()  # :type sqlite3.Connection
     _primary_keys = (attr.fields(Blockchain).currency,)
diff --git a/src/sakia/data/repositories/certifications.py b/src/sakia/data/repositories/certifications.py
index bb727b5e67b97dc86701f278fabd2f2292b176c4..cc88148473b06f01a1fa1d53c4d677cf67af3277 100644
--- a/src/sakia/data/repositories/certifications.py
+++ b/src/sakia/data/repositories/certifications.py
@@ -5,8 +5,7 @@ from ..entities import Certification
 
 @attr.s(frozen=True)
 class CertificationsRepo:
-    """The repository for Communities entities.
-    """
+    """The repository for Communities entities."""
 
     _conn = attr.ib()  # :type sqlite3.Connection
     _primary_keys = (
diff --git a/src/sakia/data/repositories/dividends.py b/src/sakia/data/repositories/dividends.py
index f0627e2e9b57b2ec3e87eff2ddf9cf8f20e4f854..0d2f391fae95e174febc26489d190b410eff3136 100644
--- a/src/sakia/data/repositories/dividends.py
+++ b/src/sakia/data/repositories/dividends.py
@@ -5,8 +5,7 @@ from ..entities import Dividend
 
 @attr.s(frozen=True)
 class DividendsRepo:
-    """The repository for Communities entities.
-    """
+    """The repository for Communities entities."""
 
     _conn = attr.ib()  # :type sqlite3.Connection
     _primary_keys = (
diff --git a/src/sakia/data/repositories/identities.py b/src/sakia/data/repositories/identities.py
index dc68bf74681535a9a7b3f413795a500c98a2b1d3..3de7aedeb6a583bb7d4a83222ee6be51532f6861 100644
--- a/src/sakia/data/repositories/identities.py
+++ b/src/sakia/data/repositories/identities.py
@@ -7,8 +7,7 @@ from ..entities import Identity
 
 @attr.s(frozen=True)
 class IdentitiesRepo:
-    """The repository for Identities entities.
-    """
+    """The repository for Identities entities."""
 
     _conn = attr.ib()  # :type sqlite3.Connection
     _primary_keys = (
diff --git a/src/sakia/data/repositories/nodes.py b/src/sakia/data/repositories/nodes.py
index 73f698428b956a243ead33a0c42ab2dbc4248c76..09552ab9977d5d76b7b3a66a5ac1520489e86c81 100644
--- a/src/sakia/data/repositories/nodes.py
+++ b/src/sakia/data/repositories/nodes.py
@@ -6,8 +6,7 @@ from ..entities import Node
 
 @attr.s(frozen=True)
 class NodesRepo:
-    """The repository for Communities entities.
-    """
+    """The repository for Communities entities."""
 
     _conn = attr.ib()  # :type sqlite3.Connection
     _primary_keys = (attr.fields(Node).currency, attr.fields(Node).pubkey)
diff --git a/src/sakia/data/repositories/sources.py b/src/sakia/data/repositories/sources.py
index 246777529e8723108401dd939027aa59bdd84b69..f70ac232fe7d2c1cd33f76dc43801f5d54fd171f 100644
--- a/src/sakia/data/repositories/sources.py
+++ b/src/sakia/data/repositories/sources.py
@@ -5,8 +5,7 @@ from ..entities import Source
 
 @attr.s(frozen=True)
 class SourcesRepo:
-    """The repository for Communities entities.
-    """
+    """The repository for Communities entities."""
 
     _conn = attr.ib()  # :type sqlite3.Connection
     _primary_keys = (
diff --git a/src/sakia/data/repositories/transactions.py b/src/sakia/data/repositories/transactions.py
index c51c8a5d35a3f3d07b2ec16e49ca1ba4d404cdbc..c0cc14429db4528d879afb568dc52e123471bd0a 100644
--- a/src/sakia/data/repositories/transactions.py
+++ b/src/sakia/data/repositories/transactions.py
@@ -5,8 +5,7 @@ from ..entities import Transaction, Dividend
 
 @attr.s(frozen=True)
 class TransactionsRepo:
-    """The repository for Communities entities.
-    """
+    """The repository for Communities entities."""
 
     _conn = attr.ib()  # :type sqlite3.Connection
     _primary_keys = (
diff --git a/src/sakia/gui/dialogs/connection_cfg/model.py b/src/sakia/gui/dialogs/connection_cfg/model.py
index 92d151b263661130efea1c260ee1fc2caee80a6c..d40454ddbf08754e4f3fe419f01da80df99ca9a9 100644
--- a/src/sakia/gui/dialogs/connection_cfg/model.py
+++ b/src/sakia/gui/dialogs/connection_cfg/model.py
@@ -146,7 +146,7 @@ class ConnectionConfigModel(QObject):
         )
 
     async def publish_selfcert(self, identity):
-        """"
+        """ "
         Publish the self certification of the connection identity
         """
         result = await self.app.documents_service.broadcast_identity(
diff --git a/src/sakia/gui/navigation/graphs/wot/scene.py b/src/sakia/gui/navigation/graphs/wot/scene.py
index 937577e058521181b7922e99c760439d5bb64a9c..a517fa4febc6021a5a1bd5eedc0c11517ca56374 100644
--- a/src/sakia/gui/navigation/graphs/wot/scene.py
+++ b/src/sakia/gui/navigation/graphs/wot/scene.py
@@ -62,7 +62,16 @@ class WotScene(BaseScene):
 
     @staticmethod
     def center_pos(nb_certifiers, nb_certified, scale):
-        return 0, max(nb_certified, nb_certifiers,) / 2 * 0.12 * scale
+        return (
+            0,
+            max(
+                nb_certified,
+                nb_certifiers,
+            )
+            / 2
+            * 0.12
+            * scale,
+        )
 
     @staticmethod
     def certifiers_partial_layout(nx_graph, center, scale=1):
diff --git a/src/sakia/gui/navigation/identities/table_model.py b/src/sakia/gui/navigation/identities/table_model.py
index adfe01fac28e8a34e116768dcfa6bde60e3e4b6b..243479ad2316619ba66ccfad633e2c7823f9e3cf 100644
--- a/src/sakia/gui/navigation/identities/table_model.py
+++ b/src/sakia/gui/navigation/identities/table_model.py
@@ -126,8 +126,10 @@ class IdentitiesFilterProxyModel(QSortFilterProxyModel):
                 font.setItalic(True)
                 return font
 
-            if role == Qt.DecorationRole and source_index.column() == IdentitiesTableModel.columns_ids.index(
-                "uid"
+            if (
+                role == Qt.DecorationRole
+                and source_index.column()
+                == IdentitiesTableModel.columns_ids.index("uid")
             ):
                 if status == STATUS_NOT_MEMBER:
                     return QIcon(":/icons/not_member")
diff --git a/src/sakia/gui/navigation/model.py b/src/sakia/gui/navigation/model.py
index 214fb53c16b56bceeed3a108a46b9cfd8ab84d6f..9174f32d34e0677e6610356114e6b7ec8ce46faf 100644
--- a/src/sakia/gui/navigation/model.py
+++ b/src/sakia/gui/navigation/model.py
@@ -42,7 +42,9 @@ class NavigationModel(QObject):
                 "title": QCoreApplication.translate("NavigationModel", "Network"),
                 "icon": ":/icons/network_icon",
                 "component": "Network",
-                "dependencies": {"network_service": self.app.network_service,},
+                "dependencies": {
+                    "network_service": self.app.network_service,
+                },
                 "misc": {},
                 "children": [],
             },
diff --git a/src/sakia/gui/navigation/network/controller.py b/src/sakia/gui/navigation/network/controller.py
index 09634a554d3743518a131e826d71a42b39fcfc58..80d4d12fb7a263ee708568f76150607643e9912b 100644
--- a/src/sakia/gui/navigation/network/controller.py
+++ b/src/sakia/gui/navigation/network/controller.py
@@ -40,7 +40,9 @@ class NetworkController(QObject):
         :param sakia.services.NetworkService network_service:
         :return:
         """
-        view = NetworkView(parent.view,)
+        view = NetworkView(
+            parent.view,
+        )
         model = NetworkModel(None, app, network_service)
         txhistory = cls(parent, view, model)
         model.setParent(txhistory)
diff --git a/src/sakia/gui/navigation/txhistory/controller.py b/src/sakia/gui/navigation/txhistory/controller.py
index 2bbb639ee144d32862a5cda578e89d421e0dae66..265b1b8eb62dbbf75d2fad4fdafa4a5aec957645 100644
--- a/src/sakia/gui/navigation/txhistory/controller.py
+++ b/src/sakia/gui/navigation/txhistory/controller.py
@@ -210,11 +210,13 @@ class TxHistoryController(QObject):
             self._logger.error(str(e))
 
         try:
-            new_dividends = await self.model.transactions_service.update_dividends_history(
-                pubkey,
-                self.view.table_history.model().ts_from,
-                self.view.table_history.model().ts_to,
-                new_tx,
+            new_dividends = (
+                await self.model.transactions_service.update_dividends_history(
+                    pubkey,
+                    self.view.table_history.model().ts_from,
+                    self.view.table_history.model().ts_to,
+                    new_tx,
+                )
             )
             self._logger.debug("Found {} new dividends".format(len(new_dividends)))
 
diff --git a/src/sakia/services/documents.py b/src/sakia/services/documents.py
index 16182f8a5b582547b499f00b88c70bc493c1d3d0..cbfda9c9a912243c9008b9687916337fbb4ab778 100644
--- a/src/sakia/services/documents.py
+++ b/src/sakia/services/documents.py
@@ -421,7 +421,9 @@ class DocumentsService:
                     SIG.token(receiver),
                     Operator.token("||"),
                     Condition.token(
-                        SIG.token(issuer), Operator.token("&&"), CSV.token(604800),
+                        SIG.token(issuer),
+                        Operator.token("&&"),
+                        CSV.token(604800),
                     ),
                 ),
                 Condition,
diff --git a/src/sakia/services/identities.py b/src/sakia/services/identities.py
index 159ff8a306828104238b519f0bb583522a4c67a0..8d09fb87c17a98eb05cf1819b5f0d5cc487ae8e8 100644
--- a/src/sakia/services/identities.py
+++ b/src/sakia/services/identities.py
@@ -112,8 +112,10 @@ class IdentitiesService(QObject):
                     blockstamp = BlockUID(ms["blockNumber"], ms["blockHash"])
                     membership_data = ms
             if membership_data:
-                identity.membership_timestamp = await self._blockchain_processor.timestamp(
-                    self.currency, blockstamp.number
+                identity.membership_timestamp = (
+                    await self._blockchain_processor.timestamp(
+                        self.currency, blockstamp.number
+                    )
                 )
                 identity.membership_buid = blockstamp
                 identity.membership_type = membership_data["membership"]
@@ -199,8 +201,10 @@ class IdentitiesService(QObject):
                         certified[cert] = certified_idty
                         # We save connections pubkeys
                         if self.is_identity_of_connection(identity):
-                            cert.timestamp = self._blockchain_processor.rounded_timestamp(
-                                self.currency, cert.block
+                            cert.timestamp = (
+                                self._blockchain_processor.rounded_timestamp(
+                                    self.currency, cert.block
+                                )
                             )
                             self._certs_processor.insert_or_update_certification(cert)
         except errors.DuniterError as e:
@@ -395,8 +399,10 @@ class IdentitiesService(QObject):
                         identity.blockstamp = block_uid(
                             identity_data["meta"]["timestamp"]
                         )
-                        identity.timestamp = self._blockchain_processor.rounded_timestamp(
-                            self.currency, identity.blockstamp.number
+                        identity.timestamp = (
+                            self._blockchain_processor.rounded_timestamp(
+                                self.currency, identity.blockstamp.number
+                            )
                         )
                         identity.outdistanced = identity_data["outdistanced"]
                         identity.written = identity_data["wasMember"]
diff --git a/src/sakia/services/transactions.py b/src/sakia/services/transactions.py
index b525a97e5bb71ce05421127fb86d568464c75373..437085c48f16ad7748d403df0d60f3b9087fca0d 100644
--- a/src/sakia/services/transactions.py
+++ b/src/sakia/services/transactions.py
@@ -239,7 +239,11 @@ class TransactionsService(QObject):
                 pubkey, tx_doc.sha_hash
             ) and SimpleTransaction.is_simple(tx_doc):
                 tx = parse_transaction_doc(
-                    tx_doc, pubkey, tx_data["block_number"], tx_data["time"], txid,
+                    tx_doc,
+                    pubkey,
+                    tx_data["block_number"],
+                    tx_data["time"],
+                    txid,
                 )
                 if tx:
                     new_transfers.append(tx)
diff --git a/tests/technical/test_transactions_service.py b/tests/technical/test_transactions_service.py
index 944f3477e136476cd9f26bcda61ba87a42cb426e..3b07032b717d0571a92dff37ee5029784d2ae220 100644
--- a/tests/technical/test_transactions_service.py
+++ b/tests/technical/test_transactions_service.py
@@ -91,8 +91,8 @@ async def test_receive_tx(
 async def test_issue_dividend(
     application_with_one_connection, fake_server_with_blockchain, bob
 ):
-    dividends_before_send = application_with_one_connection.transactions_service.dividends(
-        bob.key.pubkey
+    dividends_before_send = (
+        application_with_one_connection.transactions_service.dividends(bob.key.pubkey)
     )
     start = fake_server_with_blockchain.forge.blocks[-1].number + 1
     fake_server_with_blockchain.forge.forge_block()
@@ -109,8 +109,8 @@ async def test_issue_dividend(
     await application_with_one_connection.transactions_service.handle_new_blocks(
         connections, start, end
     )
-    dividends_after_parse = application_with_one_connection.transactions_service.dividends(
-        bob.key.pubkey
+    dividends_after_parse = (
+        application_with_one_connection.transactions_service.dividends(bob.key.pubkey)
     )
     assert len(dividends_before_send) + 2 == len(dividends_after_parse)
     await fake_server_with_blockchain.close()
diff --git a/tests/unit/services/test_sources.py b/tests/unit/services/test_sources.py
index 2a098a5269c5617ff39ec9682ef08fb95da249a6..1f0dd8831328b288b481a0e8af80f5f5af5ea0a7 100644
--- a/tests/unit/services/test_sources.py
+++ b/tests/unit/services/test_sources.py
@@ -77,8 +77,10 @@ def test_evaluate_condition_source_lock_mode_0(
     application_with_one_connection.instanciate_services()
 
     # capture blockchain median time
-    median_time = application_with_one_connection.blockchain_service._blockchain_processor.time(
-        application_with_one_connection.currency
+    median_time = (
+        application_with_one_connection.blockchain_service._blockchain_processor.time(
+            application_with_one_connection.currency
+        )
     )
     tx_hash = "FCAD5A388AC8A811B45A9334A375585E77071AA9F6E5B6896582961A6C66F365"
 
@@ -121,7 +123,9 @@ def test_evaluate_condition_source_lock_mode_0(
         )
     )
     # test simple signature condition
-    condition = output.Condition.token(output.SIG.token(bob.key.pubkey),)
+    condition = output.Condition.token(
+        output.SIG.token(bob.key.pubkey),
+    )
     # bob can spend this source
     (
         result,
@@ -163,8 +167,10 @@ def test_evaluate_condition_source_lock_mode_1(
     application_with_one_connection.instanciate_services()
 
     # capture blockchain median time
-    median_time = application_with_one_connection.blockchain_service._blockchain_processor.time(
-        application_with_one_connection.currency
+    median_time = (
+        application_with_one_connection.blockchain_service._blockchain_processor.time(
+            application_with_one_connection.currency
+        )
     )
     tx_hash = "FCAD5A388AC8A811B45A9334A375585E77071AA9F6E5B6896582961A6C66F365"
 
@@ -347,8 +353,10 @@ def test_evaluate_condition_source_multisig(
     application_with_one_connection.instanciate_services()
 
     # capture blockchain median time
-    median_time = application_with_one_connection.blockchain_service._blockchain_processor.time(
-        application_with_one_connection.currency
+    median_time = (
+        application_with_one_connection.blockchain_service._blockchain_processor.time(
+            application_with_one_connection.currency
+        )
     )
     tx_hash = "FCAD5A388AC8A811B45A9334A375585E77071AA9F6E5B6896582961A6C66F365"
 
@@ -459,8 +467,10 @@ def test_evaluate_condition_source_atomic_swap(
     transactions_repo = TransactionsRepo(meta_repo.conn)
 
     # capture blockchain median time
-    median_time = application_with_one_connection.blockchain_service._blockchain_processor.time(
-        application_with_one_connection.currency
+    median_time = (
+        application_with_one_connection.blockchain_service._blockchain_processor.time(
+            application_with_one_connection.currency
+        )
     )
 
     tx1_hash = "FCAD5A388AC8A811B45A9334A375585E77071AA9F6E5B6896582961A6C66F365"